diff --git a/config/overlays.mk b/config/overlays.mk index 7330f9490..f62a7b121 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_jr_8012ACE0.o,tail2.data.o,ov_SC01_005_jr_8013FFD8.o,tail3.data.o,ov_SC01_005_after.o,tail4.data.o,ov_SC01_005_jr_8015AE2C.o,tail5.data.o,ov_SC01_005_jr_801734BC.o,tail6.data.o,ov_SC01_005_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC01_005_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_005_jr_8012ACE0.o,tail2.data.o,ov_SC01_005_jr_8013FFD8.o,tail3.data.o,ov_SC01_005_after.o,tail4.data.o,ov_SC01_005_jr_8015AE2C.o,tail5.data.o,ov_SC01_005_jr_8016AB6C.o,tail6.data.o,ov_SC01_005_jr_801734BC.o,tail7.data.o,ov_SC01_005_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC01_006_jr_8013FFD8.o,tail3.data.o,ov_SC01_006_after.o,tail4.data.o,ov_SC01_006_jr_8015AE2C.o,tail5.data.o,ov_SC01_006_jr_801734BC.o,tail6.data.o,ov_SC01_006_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC01_006_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_006_jr_8012ACE0.o,tail2.data.o,ov_SC01_006_jr_8013FFD8.o,tail3.data.o,ov_SC01_006_after.o,tail4.data.o,ov_SC01_006_jr_8015AE2C.o,tail5.data.o,ov_SC01_006_jr_8016AB6C.o,tail6.data.o,ov_SC01_006_jr_801734BC.o,tail7.data.o,ov_SC01_006_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC03_001_jr_8013FFD8.o,tail3.data.o,ov_SC03_001_after.o,tail4.data.o,ov_SC03_001_jr_8015AE2C.o,tail5.data.o,ov_SC03_001_jr_801734BC.o,tail6.data.o,ov_SC03_001_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_001_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_001_jr_8012ACE0.o,tail2.data.o,ov_SC03_001_jr_8013FFD8.o,tail3.data.o,ov_SC03_001_after.o,tail4.data.o,ov_SC03_001_jr_8015AE2C.o,tail5.data.o,ov_SC03_001_jr_8016AB6C.o,tail6.data.o,ov_SC03_001_jr_801734BC.o,tail7.data.o,ov_SC03_001_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC01_000_jr_8013FFD8.o,tail3.data.o,ov_SC01_000_after.o,tail4.data.o,ov_SC01_000_jr_8015AE2C.o,tail5.data.o,ov_SC01_000_jr_801734BC.o,tail6.data.o,ov_SC01_000_jr_80178D40.o,tail7.data.o,ov_SC01_000_jr_8017BEBC.o,tail8.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC01_000_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_000_jr_8012ACE0.o,tail2.data.o,ov_SC01_000_jr_8013FFD8.o,tail3.data.o,ov_SC01_000_after.o,tail4.data.o,ov_SC01_000_jr_8015AE2C.o,tail5.data.o,ov_SC01_000_jr_8016AB6C.o,tail6.data.o,ov_SC01_000_jr_801734BC.o,tail7.data.o,ov_SC01_000_jr_80178D40.o,tail8.data.o,ov_SC01_000_jr_8017BEBC.o,tail9.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_jr_8012ACE0.o,tail2.data.o,ov_SC01_001_jr_8013FFD8.o,tail3.data.o,ov_SC01_001_after.o,tail4.data.o,ov_SC01_001_jr_8015AE2C.o,tail5.data.o,ov_SC01_001_jr_801734BC.o,tail6.data.o,ov_SC01_001_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC01_001_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_001_jr_8012ACE0.o,tail2.data.o,ov_SC01_001_jr_8013FFD8.o,tail3.data.o,ov_SC01_001_after.o,tail4.data.o,ov_SC01_001_jr_8015AE2C.o,tail5.data.o,ov_SC01_001_jr_8016AB6C.o,tail6.data.o,ov_SC01_001_jr_801734BC.o,tail7.data.o,ov_SC01_001_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC02_000_jr_8013FFD8.o,tail3.data.o,ov_SC02_000_after.o,tail4.data.o,ov_SC02_000_jr_8015AE2C.o,tail5.data.o,ov_SC02_000_jr_801734BC.o,tail6.data.o,ov_SC02_000_jr_80178D40.o,tail7.data.o,ov_SC02_000_jr_8017FCB0.o,tail8.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_000_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_000_jr_8012ACE0.o,tail2.data.o,ov_SC02_000_jr_8013FFD8.o,tail3.data.o,ov_SC02_000_after.o,tail4.data.o,ov_SC02_000_jr_8015AE2C.o,tail5.data.o,ov_SC02_000_jr_8016AB6C.o,tail6.data.o,ov_SC02_000_jr_801734BC.o,tail7.data.o,ov_SC02_000_jr_80178D40.o,tail8.data.o,ov_SC02_000_jr_8017FCB0.o,tail9.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_jr_8012ACE0.o,tail2.data.o,ov_SC02_003_jr_8013FFD8.o,tail3.data.o,ov_SC02_003_after.o,tail4.data.o,ov_SC02_003_jr_8015AE2C.o,tail5.data.o,ov_SC02_003_jr_801734BC.o,tail6.data.o,ov_SC02_003_jr_80178D40.o,tail7.data.o,ov_SC02_003_jr_8017FCB0.o,tail8.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_003_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_003_jr_8012ACE0.o,tail2.data.o,ov_SC02_003_jr_8013FFD8.o,tail3.data.o,ov_SC02_003_after.o,tail4.data.o,ov_SC02_003_jr_8015AE2C.o,tail5.data.o,ov_SC02_003_jr_8016AB6C.o,tail6.data.o,ov_SC02_003_jr_801734BC.o,tail7.data.o,ov_SC02_003_jr_80178D40.o,tail8.data.o,ov_SC02_003_jr_8017FCB0.o,tail9.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_jr_8012ACE0.o,tail2.data.o,ov_SC03_002_jr_8013FFD8.o,tail3.data.o,ov_SC03_002_after.o,tail4.data.o,ov_SC03_002_jr_8015AE2C.o,tail5.data.o,ov_SC03_002_jr_801734BC.o,tail6.data.o,ov_SC03_002_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_002_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_002_jr_8012ACE0.o,tail2.data.o,ov_SC03_002_jr_8013FFD8.o,tail3.data.o,ov_SC03_002_after.o,tail4.data.o,ov_SC03_002_jr_8015AE2C.o,tail5.data.o,ov_SC03_002_jr_8016AB6C.o,tail6.data.o,ov_SC03_002_jr_801734BC.o,tail7.data.o,ov_SC03_002_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC03_006_jr_8013FFD8.o,tail3.data.o,ov_SC03_006_after.o,tail4.data.o,ov_SC03_006_jr_8015AE2C.o,tail5.data.o,ov_SC03_006_jr_801734BC.o,tail6.data.o,ov_SC03_006_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_006_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_006_jr_8012ACE0.o,tail2.data.o,ov_SC03_006_jr_8013FFD8.o,tail3.data.o,ov_SC03_006_after.o,tail4.data.o,ov_SC03_006_jr_8015AE2C.o,tail5.data.o,ov_SC03_006_jr_8016AB6C.o,tail6.data.o,ov_SC03_006_jr_801734BC.o,tail7.data.o,ov_SC03_006_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC04_000_jr_8013FFD8.o,tail3.data.o,ov_SC04_000_after.o,tail4.data.o,ov_SC04_000_jr_8015AE2C.o,tail5.data.o,ov_SC04_000_jr_801734BC.o,tail6.data.o,ov_SC04_000_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_000_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_000_jr_8012ACE0.o,tail2.data.o,ov_SC04_000_jr_8013FFD8.o,tail3.data.o,ov_SC04_000_after.o,tail4.data.o,ov_SC04_000_jr_8015AE2C.o,tail5.data.o,ov_SC04_000_jr_8016AB6C.o,tail6.data.o,ov_SC04_000_jr_801734BC.o,tail7.data.o,ov_SC04_000_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC04_018_jr_8013FFD8.o,tail3.data.o,ov_SC04_018_after.o,tail4.data.o,ov_SC04_018_jr_8015AE2C.o,tail5.data.o,ov_SC04_018_jr_801734BC.o,tail6.data.o,ov_SC04_018_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_018_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_018_jr_8012ACE0.o,tail2.data.o,ov_SC04_018_jr_8013FFD8.o,tail3.data.o,ov_SC04_018_after.o,tail4.data.o,ov_SC04_018_jr_8015AE2C.o,tail5.data.o,ov_SC04_018_jr_8016AB6C.o,tail6.data.o,ov_SC04_018_jr_801734BC.o,tail7.data.o,ov_SC04_018_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC04_019_jr_8013FFD8.o,tail3.data.o,ov_SC04_019_after.o,tail4.data.o,ov_SC04_019_jr_8015AE2C.o,tail5.data.o,ov_SC04_019_jr_801734BC.o,tail6.data.o,ov_SC04_019_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_019_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_019_jr_8012ACE0.o,tail2.data.o,ov_SC04_019_jr_8013FFD8.o,tail3.data.o,ov_SC04_019_after.o,tail4.data.o,ov_SC04_019_jr_8015AE2C.o,tail5.data.o,ov_SC04_019_jr_8016AB6C.o,tail6.data.o,ov_SC04_019_jr_801734BC.o,tail7.data.o,ov_SC04_019_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC05_000_jr_8013FFD8.o,tail3.data.o,ov_SC05_000_after.o,tail4.data.o,ov_SC05_000_jr_8015AE2C.o,tail5.data.o,ov_SC05_000_jr_801734BC.o,tail6.data.o,ov_SC05_000_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_000_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_000_jr_8012ACE0.o,tail2.data.o,ov_SC05_000_jr_8013FFD8.o,tail3.data.o,ov_SC05_000_after.o,tail4.data.o,ov_SC05_000_jr_8015AE2C.o,tail5.data.o,ov_SC05_000_jr_8016AB6C.o,tail6.data.o,ov_SC05_000_jr_801734BC.o,tail7.data.o,ov_SC05_000_jr_80178D40.o,tail8.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_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_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_8016AB6C.o,tail5.data.o,ov_SC06_000_jr_801734BC.o,tail6.data.o,ov_SC06_000_jr_80178D40.o,tail7.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_jr_8012ACE0.o,tail2.data.o,ov_SC07_000_jr_8013FFD8.o,tail3.data.o,ov_SC07_000_after.o,tail4.data.o,ov_SC07_000_jr_8015AE2C.o,tail5.data.o,ov_SC07_000_jr_801734BC.o,tail6.data.o,ov_SC07_000_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC07_000_JTBL_INTERLEAVE := --order tail.data.o,ov_SC07_000_jr_8012ACE0.o,tail2.data.o,ov_SC07_000_jr_8013FFD8.o,tail3.data.o,ov_SC07_000_after.o,tail4.data.o,ov_SC07_000_jr_8015AE2C.o,tail5.data.o,ov_SC07_000_jr_8016AB6C.o,tail6.data.o,ov_SC07_000_jr_801734BC.o,tail7.data.o,ov_SC07_000_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC01_004_jr_8013FFD8.o,tail3.data.o,ov_SC01_004_after.o,tail4.data.o,ov_SC01_004_jr_8015AE2C.o,tail5.data.o,ov_SC01_004_jr_801734BC.o,tail6.data.o,ov_SC01_004_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC01_004_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_004_jr_8012ACE0.o,tail2.data.o,ov_SC01_004_jr_8013FFD8.o,tail3.data.o,ov_SC01_004_after.o,tail4.data.o,ov_SC01_004_jr_8015AE2C.o,tail5.data.o,ov_SC01_004_jr_8016AB6C.o,tail6.data.o,ov_SC01_004_jr_801734BC.o,tail7.data.o,ov_SC01_004_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC01_008_jr_8013FFD8.o,tail3.data.o,ov_SC01_008_after.o,tail4.data.o,ov_SC01_008_jr_8015AE2C.o,tail5.data.o,ov_SC01_008_jr_801734BC.o,tail6.data.o,ov_SC01_008_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC01_008_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_008_jr_8012ACE0.o,tail2.data.o,ov_SC01_008_jr_8013FFD8.o,tail3.data.o,ov_SC01_008_after.o,tail4.data.o,ov_SC01_008_jr_8015AE2C.o,tail5.data.o,ov_SC01_008_jr_8016AB6C.o,tail6.data.o,ov_SC01_008_jr_801734BC.o,tail7.data.o,ov_SC01_008_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC01_009_jr_8013FFD8.o,tail3.data.o,ov_SC01_009_after.o,tail4.data.o,ov_SC01_009_jr_8015AE2C.o,tail5.data.o,ov_SC01_009_jr_801734BC.o,tail6.data.o,ov_SC01_009_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC01_009_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_009_jr_8012ACE0.o,tail2.data.o,ov_SC01_009_jr_8013FFD8.o,tail3.data.o,ov_SC01_009_after.o,tail4.data.o,ov_SC01_009_jr_8015AE2C.o,tail5.data.o,ov_SC01_009_jr_8016AB6C.o,tail6.data.o,ov_SC01_009_jr_801734BC.o,tail7.data.o,ov_SC01_009_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC01_074_jr_8013FFD8.o,tail3.data.o,ov_SC01_074_after.o,tail4.data.o,ov_SC01_074_jr_8015AE2C.o,tail5.data.o,ov_SC01_074_jr_801734BC.o,tail6.data.o,ov_SC01_074_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC01_074_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_074_jr_8012ACE0.o,tail2.data.o,ov_SC01_074_jr_8013FFD8.o,tail3.data.o,ov_SC01_074_after.o,tail4.data.o,ov_SC01_074_jr_8015AE2C.o,tail5.data.o,ov_SC01_074_jr_8016AB6C.o,tail6.data.o,ov_SC01_074_jr_801734BC.o,tail7.data.o,ov_SC01_074_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC01_080_jr_8013FFD8.o,tail3.data.o,ov_SC01_080_after.o,tail4.data.o,ov_SC01_080_jr_8015AE2C.o,tail5.data.o,ov_SC01_080_jr_801734BC.o,tail6.data.o,ov_SC01_080_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC01_080_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_080_jr_8012ACE0.o,tail2.data.o,ov_SC01_080_jr_8013FFD8.o,tail3.data.o,ov_SC01_080_after.o,tail4.data.o,ov_SC01_080_jr_8015AE2C.o,tail5.data.o,ov_SC01_080_jr_8016AB6C.o,tail6.data.o,ov_SC01_080_jr_801734BC.o,tail7.data.o,ov_SC01_080_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC01_084_jr_8013FFD8.o,tail3.data.o,ov_SC01_084_after.o,tail4.data.o,ov_SC01_084_jr_8015AE2C.o,tail5.data.o,ov_SC01_084_jr_801734BC.o,tail6.data.o,ov_SC01_084_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC01_084_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_084_jr_8012ACE0.o,tail2.data.o,ov_SC01_084_jr_8013FFD8.o,tail3.data.o,ov_SC01_084_after.o,tail4.data.o,ov_SC01_084_jr_8015AE2C.o,tail5.data.o,ov_SC01_084_jr_8016AB6C.o,tail6.data.o,ov_SC01_084_jr_801734BC.o,tail7.data.o,ov_SC01_084_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC02_004_jr_8013FFD8.o,tail3.data.o,ov_SC02_004_after.o,tail4.data.o,ov_SC02_004_jr_8015AE2C.o,tail5.data.o,ov_SC02_004_jr_801734BC.o,tail6.data.o,ov_SC02_004_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_004_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_004_jr_8012ACE0.o,tail2.data.o,ov_SC02_004_jr_8013FFD8.o,tail3.data.o,ov_SC02_004_after.o,tail4.data.o,ov_SC02_004_jr_8015AE2C.o,tail5.data.o,ov_SC02_004_jr_8016AB6C.o,tail6.data.o,ov_SC02_004_jr_801734BC.o,tail7.data.o,ov_SC02_004_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC02_005_jr_8013FFD8.o,tail3.data.o,ov_SC02_005_after.o,tail4.data.o,ov_SC02_005_jr_8015AE2C.o,tail5.data.o,ov_SC02_005_jr_801734BC.o,tail6.data.o,ov_SC02_005_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_005_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_005_jr_8012ACE0.o,tail2.data.o,ov_SC02_005_jr_8013FFD8.o,tail3.data.o,ov_SC02_005_after.o,tail4.data.o,ov_SC02_005_jr_8015AE2C.o,tail5.data.o,ov_SC02_005_jr_8016AB6C.o,tail6.data.o,ov_SC02_005_jr_801734BC.o,tail7.data.o,ov_SC02_005_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC02_011_jr_8013FFD8.o,tail3.data.o,ov_SC02_011_after.o,tail4.data.o,ov_SC02_011_jr_8015AE2C.o,tail5.data.o,ov_SC02_011_jr_801734BC.o,tail6.data.o,ov_SC02_011_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_011_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_011_jr_8012ACE0.o,tail2.data.o,ov_SC02_011_jr_8013FFD8.o,tail3.data.o,ov_SC02_011_after.o,tail4.data.o,ov_SC02_011_jr_8015AE2C.o,tail5.data.o,ov_SC02_011_jr_8016AB6C.o,tail6.data.o,ov_SC02_011_jr_801734BC.o,tail7.data.o,ov_SC02_011_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC02_015_jr_8013FFD8.o,tail3.data.o,ov_SC02_015_after.o,tail4.data.o,ov_SC02_015_jr_8015AE2C.o,tail5.data.o,ov_SC02_015_jr_801734BC.o,tail6.data.o,ov_SC02_015_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_015_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_015_jr_8012ACE0.o,tail2.data.o,ov_SC02_015_jr_8013FFD8.o,tail3.data.o,ov_SC02_015_after.o,tail4.data.o,ov_SC02_015_jr_8015AE2C.o,tail5.data.o,ov_SC02_015_jr_8016AB6C.o,tail6.data.o,ov_SC02_015_jr_801734BC.o,tail7.data.o,ov_SC02_015_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC02_016_jr_8013FFD8.o,tail3.data.o,ov_SC02_016_after.o,tail4.data.o,ov_SC02_016_jr_8015AE2C.o,tail5.data.o,ov_SC02_016_jr_801734BC.o,tail6.data.o,ov_SC02_016_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_016_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_016_jr_8012ACE0.o,tail2.data.o,ov_SC02_016_jr_8013FFD8.o,tail3.data.o,ov_SC02_016_after.o,tail4.data.o,ov_SC02_016_jr_8015AE2C.o,tail5.data.o,ov_SC02_016_jr_8016AB6C.o,tail6.data.o,ov_SC02_016_jr_801734BC.o,tail7.data.o,ov_SC02_016_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC02_017_jr_8013FFD8.o,tail3.data.o,ov_SC02_017_after.o,tail4.data.o,ov_SC02_017_jr_8015AE2C.o,tail5.data.o,ov_SC02_017_jr_801734BC.o,tail6.data.o,ov_SC02_017_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_017_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_017_jr_8012ACE0.o,tail2.data.o,ov_SC02_017_jr_8013FFD8.o,tail3.data.o,ov_SC02_017_after.o,tail4.data.o,ov_SC02_017_jr_8015AE2C.o,tail5.data.o,ov_SC02_017_jr_8016AB6C.o,tail6.data.o,ov_SC02_017_jr_801734BC.o,tail7.data.o,ov_SC02_017_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC02_021_jr_8013FFD8.o,tail3.data.o,ov_SC02_021_after.o,tail4.data.o,ov_SC02_021_jr_8015AE2C.o,tail5.data.o,ov_SC02_021_jr_801734BC.o,tail6.data.o,ov_SC02_021_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_021_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_021_jr_8012ACE0.o,tail2.data.o,ov_SC02_021_jr_8013FFD8.o,tail3.data.o,ov_SC02_021_after.o,tail4.data.o,ov_SC02_021_jr_8015AE2C.o,tail5.data.o,ov_SC02_021_jr_8016AB6C.o,tail6.data.o,ov_SC02_021_jr_801734BC.o,tail7.data.o,ov_SC02_021_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC02_026_jr_8013FFD8.o,tail3.data.o,ov_SC02_026_after.o,tail4.data.o,ov_SC02_026_jr_8015AE2C.o,tail5.data.o,ov_SC02_026_jr_801734BC.o,tail6.data.o,ov_SC02_026_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_026_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_026_jr_8012ACE0.o,tail2.data.o,ov_SC02_026_jr_8013FFD8.o,tail3.data.o,ov_SC02_026_after.o,tail4.data.o,ov_SC02_026_jr_8015AE2C.o,tail5.data.o,ov_SC02_026_jr_8016AB6C.o,tail6.data.o,ov_SC02_026_jr_801734BC.o,tail7.data.o,ov_SC02_026_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC02_027_jr_8013FFD8.o,tail3.data.o,ov_SC02_027_after.o,tail4.data.o,ov_SC02_027_jr_8015AE2C.o,tail5.data.o,ov_SC02_027_jr_801734BC.o,tail6.data.o,ov_SC02_027_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_027_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_027_jr_8012ACE0.o,tail2.data.o,ov_SC02_027_jr_8013FFD8.o,tail3.data.o,ov_SC02_027_after.o,tail4.data.o,ov_SC02_027_jr_8015AE2C.o,tail5.data.o,ov_SC02_027_jr_8016AB6C.o,tail6.data.o,ov_SC02_027_jr_801734BC.o,tail7.data.o,ov_SC02_027_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC02_028_jr_8013FFD8.o,tail3.data.o,ov_SC02_028_after.o,tail4.data.o,ov_SC02_028_jr_8015AE2C.o,tail5.data.o,ov_SC02_028_jr_801734BC.o,tail6.data.o,ov_SC02_028_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_028_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_028_jr_8012ACE0.o,tail2.data.o,ov_SC02_028_jr_8013FFD8.o,tail3.data.o,ov_SC02_028_after.o,tail4.data.o,ov_SC02_028_jr_8015AE2C.o,tail5.data.o,ov_SC02_028_jr_8016AB6C.o,tail6.data.o,ov_SC02_028_jr_801734BC.o,tail7.data.o,ov_SC02_028_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC02_031_jr_8013FFD8.o,tail3.data.o,ov_SC02_031_after.o,tail4.data.o,ov_SC02_031_jr_8015AE2C.o,tail5.data.o,ov_SC02_031_jr_801734BC.o,tail6.data.o,ov_SC02_031_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_031_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_031_jr_8012ACE0.o,tail2.data.o,ov_SC02_031_jr_8013FFD8.o,tail3.data.o,ov_SC02_031_after.o,tail4.data.o,ov_SC02_031_jr_8015AE2C.o,tail5.data.o,ov_SC02_031_jr_8016AB6C.o,tail6.data.o,ov_SC02_031_jr_801734BC.o,tail7.data.o,ov_SC02_031_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC02_035_jr_8013FFD8.o,tail3.data.o,ov_SC02_035_after.o,tail4.data.o,ov_SC02_035_jr_8015AE2C.o,tail5.data.o,ov_SC02_035_jr_801734BC.o,tail6.data.o,ov_SC02_035_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_035_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_035_jr_8012ACE0.o,tail2.data.o,ov_SC02_035_jr_8013FFD8.o,tail3.data.o,ov_SC02_035_after.o,tail4.data.o,ov_SC02_035_jr_8015AE2C.o,tail5.data.o,ov_SC02_035_jr_8016AB6C.o,tail6.data.o,ov_SC02_035_jr_801734BC.o,tail7.data.o,ov_SC02_035_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC02_039_jr_8013FFD8.o,tail3.data.o,ov_SC02_039_after.o,tail4.data.o,ov_SC02_039_jr_8015AE2C.o,tail5.data.o,ov_SC02_039_jr_801734BC.o,tail6.data.o,ov_SC02_039_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_039_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_039_jr_8012ACE0.o,tail2.data.o,ov_SC02_039_jr_8013FFD8.o,tail3.data.o,ov_SC02_039_after.o,tail4.data.o,ov_SC02_039_jr_8015AE2C.o,tail5.data.o,ov_SC02_039_jr_8016AB6C.o,tail6.data.o,ov_SC02_039_jr_801734BC.o,tail7.data.o,ov_SC02_039_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC02_041_jr_8013FFD8.o,tail3.data.o,ov_SC02_041_after.o,tail4.data.o,ov_SC02_041_jr_8015AE2C.o,tail5.data.o,ov_SC02_041_jr_801734BC.o,tail6.data.o,ov_SC02_041_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_041_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_041_jr_8012ACE0.o,tail2.data.o,ov_SC02_041_jr_8013FFD8.o,tail3.data.o,ov_SC02_041_after.o,tail4.data.o,ov_SC02_041_jr_8015AE2C.o,tail5.data.o,ov_SC02_041_jr_8016AB6C.o,tail6.data.o,ov_SC02_041_jr_801734BC.o,tail7.data.o,ov_SC02_041_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC03_003_jr_8013FFD8.o,tail3.data.o,ov_SC03_003_after.o,tail4.data.o,ov_SC03_003_jr_8015AE2C.o,tail5.data.o,ov_SC03_003_jr_801734BC.o,tail6.data.o,ov_SC03_003_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_003_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_003_jr_8012ACE0.o,tail2.data.o,ov_SC03_003_jr_8013FFD8.o,tail3.data.o,ov_SC03_003_after.o,tail4.data.o,ov_SC03_003_jr_8015AE2C.o,tail5.data.o,ov_SC03_003_jr_8016AB6C.o,tail6.data.o,ov_SC03_003_jr_801734BC.o,tail7.data.o,ov_SC03_003_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC03_007_jr_8013FFD8.o,tail3.data.o,ov_SC03_007_after.o,tail4.data.o,ov_SC03_007_jr_8015AE2C.o,tail5.data.o,ov_SC03_007_jr_801734BC.o,tail6.data.o,ov_SC03_007_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_007_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_007_jr_8012ACE0.o,tail2.data.o,ov_SC03_007_jr_8013FFD8.o,tail3.data.o,ov_SC03_007_after.o,tail4.data.o,ov_SC03_007_jr_8015AE2C.o,tail5.data.o,ov_SC03_007_jr_8016AB6C.o,tail6.data.o,ov_SC03_007_jr_801734BC.o,tail7.data.o,ov_SC03_007_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC03_010_jr_8013FFD8.o,tail3.data.o,ov_SC03_010_after.o,tail4.data.o,ov_SC03_010_jr_8015AE2C.o,tail5.data.o,ov_SC03_010_jr_801734BC.o,tail6.data.o,ov_SC03_010_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_010_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_010_jr_8012ACE0.o,tail2.data.o,ov_SC03_010_jr_8013FFD8.o,tail3.data.o,ov_SC03_010_after.o,tail4.data.o,ov_SC03_010_jr_8015AE2C.o,tail5.data.o,ov_SC03_010_jr_8016AB6C.o,tail6.data.o,ov_SC03_010_jr_801734BC.o,tail7.data.o,ov_SC03_010_jr_80178D40.o,tail8.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_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_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_8016AB6C.o,tail5.data.o,ov_SC03_011_jr_801734BC.o,tail6.data.o,ov_SC03_011_jr_80178D40.o,tail7.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_jr_8012ACE0.o,tail2.data.o,ov_SC03_012_jr_8013FFD8.o,tail3.data.o,ov_SC03_012_after.o,tail4.data.o,ov_SC03_012_jr_8015AE2C.o,tail5.data.o,ov_SC03_012_jr_801734BC.o,tail6.data.o,ov_SC03_012_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_012_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_012_jr_8012ACE0.o,tail2.data.o,ov_SC03_012_jr_8013FFD8.o,tail3.data.o,ov_SC03_012_after.o,tail4.data.o,ov_SC03_012_jr_8015AE2C.o,tail5.data.o,ov_SC03_012_jr_8016AB6C.o,tail6.data.o,ov_SC03_012_jr_801734BC.o,tail7.data.o,ov_SC03_012_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC03_013_jr_8013FFD8.o,tail3.data.o,ov_SC03_013_after.o,tail4.data.o,ov_SC03_013_jr_8015AE2C.o,tail5.data.o,ov_SC03_013_jr_801734BC.o,tail6.data.o,ov_SC03_013_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_013_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_013_jr_8012ACE0.o,tail2.data.o,ov_SC03_013_jr_8013FFD8.o,tail3.data.o,ov_SC03_013_after.o,tail4.data.o,ov_SC03_013_jr_8015AE2C.o,tail5.data.o,ov_SC03_013_jr_8016AB6C.o,tail6.data.o,ov_SC03_013_jr_801734BC.o,tail7.data.o,ov_SC03_013_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC03_014_jr_8013FFD8.o,tail3.data.o,ov_SC03_014_after.o,tail4.data.o,ov_SC03_014_jr_8015AE2C.o,tail5.data.o,ov_SC03_014_jr_801734BC.o,tail6.data.o,ov_SC03_014_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_014_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_014_jr_8012ACE0.o,tail2.data.o,ov_SC03_014_jr_8013FFD8.o,tail3.data.o,ov_SC03_014_after.o,tail4.data.o,ov_SC03_014_jr_8015AE2C.o,tail5.data.o,ov_SC03_014_jr_8016AB6C.o,tail6.data.o,ov_SC03_014_jr_801734BC.o,tail7.data.o,ov_SC03_014_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC03_015_jr_8013FFD8.o,tail3.data.o,ov_SC03_015_after.o,tail4.data.o,ov_SC03_015_jr_8015AE2C.o,tail5.data.o,ov_SC03_015_jr_801734BC.o,tail6.data.o,ov_SC03_015_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_015_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_015_jr_8012ACE0.o,tail2.data.o,ov_SC03_015_jr_8013FFD8.o,tail3.data.o,ov_SC03_015_after.o,tail4.data.o,ov_SC03_015_jr_8015AE2C.o,tail5.data.o,ov_SC03_015_jr_8016AB6C.o,tail6.data.o,ov_SC03_015_jr_801734BC.o,tail7.data.o,ov_SC03_015_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC03_023_jr_8013FFD8.o,tail3.data.o,ov_SC03_023_after.o,tail4.data.o,ov_SC03_023_jr_8015AE2C.o,tail5.data.o,ov_SC03_023_jr_801734BC.o,tail6.data.o,ov_SC03_023_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_023_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_023_jr_8012ACE0.o,tail2.data.o,ov_SC03_023_jr_8013FFD8.o,tail3.data.o,ov_SC03_023_after.o,tail4.data.o,ov_SC03_023_jr_8015AE2C.o,tail5.data.o,ov_SC03_023_jr_8016AB6C.o,tail6.data.o,ov_SC03_023_jr_801734BC.o,tail7.data.o,ov_SC03_023_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC03_024_jr_8013FFD8.o,tail3.data.o,ov_SC03_024_after.o,tail4.data.o,ov_SC03_024_jr_8015AE2C.o,tail5.data.o,ov_SC03_024_jr_801734BC.o,tail6.data.o,ov_SC03_024_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_024_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_024_jr_8012ACE0.o,tail2.data.o,ov_SC03_024_jr_8013FFD8.o,tail3.data.o,ov_SC03_024_after.o,tail4.data.o,ov_SC03_024_jr_8015AE2C.o,tail5.data.o,ov_SC03_024_jr_8016AB6C.o,tail6.data.o,ov_SC03_024_jr_801734BC.o,tail7.data.o,ov_SC03_024_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC03_028_jr_8013FFD8.o,tail3.data.o,ov_SC03_028_after.o,tail4.data.o,ov_SC03_028_jr_8015AE2C.o,tail5.data.o,ov_SC03_028_jr_801734BC.o,tail6.data.o,ov_SC03_028_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_028_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_028_jr_8012ACE0.o,tail2.data.o,ov_SC03_028_jr_8013FFD8.o,tail3.data.o,ov_SC03_028_after.o,tail4.data.o,ov_SC03_028_jr_8015AE2C.o,tail5.data.o,ov_SC03_028_jr_8016AB6C.o,tail6.data.o,ov_SC03_028_jr_801734BC.o,tail7.data.o,ov_SC03_028_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC03_029_jr_8013FFD8.o,tail3.data.o,ov_SC03_029_after.o,tail4.data.o,ov_SC03_029_jr_8015AE2C.o,tail5.data.o,ov_SC03_029_jr_801734BC.o,tail6.data.o,ov_SC03_029_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_029_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_029_jr_8012ACE0.o,tail2.data.o,ov_SC03_029_jr_8013FFD8.o,tail3.data.o,ov_SC03_029_after.o,tail4.data.o,ov_SC03_029_jr_8015AE2C.o,tail5.data.o,ov_SC03_029_jr_8016AB6C.o,tail6.data.o,ov_SC03_029_jr_801734BC.o,tail7.data.o,ov_SC03_029_jr_80178D40.o,tail8.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_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_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_8016AB6C.o,tail5.data.o,ov_SC03_030_jr_801734BC.o,tail6.data.o,ov_SC03_030_jr_80178D40.o,tail7.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_jr_8012ACE0.o,tail2.data.o,ov_SC03_031_jr_8013FFD8.o,tail3.data.o,ov_SC03_031_after.o,tail4.data.o,ov_SC03_031_jr_8015AE2C.o,tail5.data.o,ov_SC03_031_jr_801734BC.o,tail6.data.o,ov_SC03_031_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_031_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_031_jr_8012ACE0.o,tail2.data.o,ov_SC03_031_jr_8013FFD8.o,tail3.data.o,ov_SC03_031_after.o,tail4.data.o,ov_SC03_031_jr_8015AE2C.o,tail5.data.o,ov_SC03_031_jr_8016AB6C.o,tail6.data.o,ov_SC03_031_jr_801734BC.o,tail7.data.o,ov_SC03_031_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC03_089_jr_8013FFD8.o,tail3.data.o,ov_SC03_089_after.o,tail4.data.o,ov_SC03_089_jr_8015AE2C.o,tail5.data.o,ov_SC03_089_jr_801734BC.o,tail6.data.o,ov_SC03_089_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_089_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_089_jr_8012ACE0.o,tail2.data.o,ov_SC03_089_jr_8013FFD8.o,tail3.data.o,ov_SC03_089_after.o,tail4.data.o,ov_SC03_089_jr_8015AE2C.o,tail5.data.o,ov_SC03_089_jr_8016AB6C.o,tail6.data.o,ov_SC03_089_jr_801734BC.o,tail7.data.o,ov_SC03_089_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC03_090_jr_8013FFD8.o,tail3.data.o,ov_SC03_090_after.o,tail4.data.o,ov_SC03_090_jr_8015AE2C.o,tail5.data.o,ov_SC03_090_jr_801734BC.o,tail6.data.o,ov_SC03_090_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_090_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_090_jr_8012ACE0.o,tail2.data.o,ov_SC03_090_jr_8013FFD8.o,tail3.data.o,ov_SC03_090_after.o,tail4.data.o,ov_SC03_090_jr_8015AE2C.o,tail5.data.o,ov_SC03_090_jr_8016AB6C.o,tail6.data.o,ov_SC03_090_jr_801734BC.o,tail7.data.o,ov_SC03_090_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC03_091_jr_8013FFD8.o,tail3.data.o,ov_SC03_091_after.o,tail4.data.o,ov_SC03_091_jr_8015AE2C.o,tail5.data.o,ov_SC03_091_jr_801734BC.o,tail6.data.o,ov_SC03_091_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_091_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_091_jr_8012ACE0.o,tail2.data.o,ov_SC03_091_jr_8013FFD8.o,tail3.data.o,ov_SC03_091_after.o,tail4.data.o,ov_SC03_091_jr_8015AE2C.o,tail5.data.o,ov_SC03_091_jr_8016AB6C.o,tail6.data.o,ov_SC03_091_jr_801734BC.o,tail7.data.o,ov_SC03_091_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC03_092_jr_8013FFD8.o,tail3.data.o,ov_SC03_092_after.o,tail4.data.o,ov_SC03_092_jr_8015AE2C.o,tail5.data.o,ov_SC03_092_jr_801734BC.o,tail6.data.o,ov_SC03_092_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_092_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_092_jr_8012ACE0.o,tail2.data.o,ov_SC03_092_jr_8013FFD8.o,tail3.data.o,ov_SC03_092_after.o,tail4.data.o,ov_SC03_092_jr_8015AE2C.o,tail5.data.o,ov_SC03_092_jr_8016AB6C.o,tail6.data.o,ov_SC03_092_jr_801734BC.o,tail7.data.o,ov_SC03_092_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC03_093_jr_8013FFD8.o,tail3.data.o,ov_SC03_093_after.o,tail4.data.o,ov_SC03_093_jr_8015AE2C.o,tail5.data.o,ov_SC03_093_jr_801734BC.o,tail6.data.o,ov_SC03_093_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_093_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_093_jr_8012ACE0.o,tail2.data.o,ov_SC03_093_jr_8013FFD8.o,tail3.data.o,ov_SC03_093_after.o,tail4.data.o,ov_SC03_093_jr_8015AE2C.o,tail5.data.o,ov_SC03_093_jr_8016AB6C.o,tail6.data.o,ov_SC03_093_jr_801734BC.o,tail7.data.o,ov_SC03_093_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC03_094_jr_8013FFD8.o,tail3.data.o,ov_SC03_094_after.o,tail4.data.o,ov_SC03_094_jr_8015AE2C.o,tail5.data.o,ov_SC03_094_jr_801734BC.o,tail6.data.o,ov_SC03_094_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_094_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_094_jr_8012ACE0.o,tail2.data.o,ov_SC03_094_jr_8013FFD8.o,tail3.data.o,ov_SC03_094_after.o,tail4.data.o,ov_SC03_094_jr_8015AE2C.o,tail5.data.o,ov_SC03_094_jr_8016AB6C.o,tail6.data.o,ov_SC03_094_jr_801734BC.o,tail7.data.o,ov_SC03_094_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC03_095_jr_8013FFD8.o,tail3.data.o,ov_SC03_095_after.o,tail4.data.o,ov_SC03_095_jr_8015AE2C.o,tail5.data.o,ov_SC03_095_jr_801734BC.o,tail6.data.o,ov_SC03_095_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_095_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_095_jr_8012ACE0.o,tail2.data.o,ov_SC03_095_jr_8013FFD8.o,tail3.data.o,ov_SC03_095_after.o,tail4.data.o,ov_SC03_095_jr_8015AE2C.o,tail5.data.o,ov_SC03_095_jr_8016AB6C.o,tail6.data.o,ov_SC03_095_jr_801734BC.o,tail7.data.o,ov_SC03_095_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC03_096_jr_8013FFD8.o,tail3.data.o,ov_SC03_096_after.o,tail4.data.o,ov_SC03_096_jr_8015AE2C.o,tail5.data.o,ov_SC03_096_jr_801734BC.o,tail6.data.o,ov_SC03_096_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_096_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_096_jr_8012ACE0.o,tail2.data.o,ov_SC03_096_jr_8013FFD8.o,tail3.data.o,ov_SC03_096_after.o,tail4.data.o,ov_SC03_096_jr_8015AE2C.o,tail5.data.o,ov_SC03_096_jr_8016AB6C.o,tail6.data.o,ov_SC03_096_jr_801734BC.o,tail7.data.o,ov_SC03_096_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC03_097_jr_8013FFD8.o,tail3.data.o,ov_SC03_097_after.o,tail4.data.o,ov_SC03_097_jr_8015AE2C.o,tail5.data.o,ov_SC03_097_jr_801734BC.o,tail6.data.o,ov_SC03_097_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_097_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_097_jr_8012ACE0.o,tail2.data.o,ov_SC03_097_jr_8013FFD8.o,tail3.data.o,ov_SC03_097_after.o,tail4.data.o,ov_SC03_097_jr_8015AE2C.o,tail5.data.o,ov_SC03_097_jr_8016AB6C.o,tail6.data.o,ov_SC03_097_jr_801734BC.o,tail7.data.o,ov_SC03_097_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC03_098_jr_8013FFD8.o,tail3.data.o,ov_SC03_098_after.o,tail4.data.o,ov_SC03_098_jr_8015AE2C.o,tail5.data.o,ov_SC03_098_jr_801734BC.o,tail6.data.o,ov_SC03_098_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_098_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_098_jr_8012ACE0.o,tail2.data.o,ov_SC03_098_jr_8013FFD8.o,tail3.data.o,ov_SC03_098_after.o,tail4.data.o,ov_SC03_098_jr_8015AE2C.o,tail5.data.o,ov_SC03_098_jr_8016AB6C.o,tail6.data.o,ov_SC03_098_jr_801734BC.o,tail7.data.o,ov_SC03_098_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC03_099_jr_8013FFD8.o,tail3.data.o,ov_SC03_099_after.o,tail4.data.o,ov_SC03_099_jr_8015AE2C.o,tail5.data.o,ov_SC03_099_jr_801734BC.o,tail6.data.o,ov_SC03_099_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_099_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_099_jr_8012ACE0.o,tail2.data.o,ov_SC03_099_jr_8013FFD8.o,tail3.data.o,ov_SC03_099_after.o,tail4.data.o,ov_SC03_099_jr_8015AE2C.o,tail5.data.o,ov_SC03_099_jr_8016AB6C.o,tail6.data.o,ov_SC03_099_jr_801734BC.o,tail7.data.o,ov_SC03_099_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC03_100_jr_8013FFD8.o,tail3.data.o,ov_SC03_100_after.o,tail4.data.o,ov_SC03_100_jr_8015AE2C.o,tail5.data.o,ov_SC03_100_jr_801734BC.o,tail6.data.o,ov_SC03_100_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_100_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_100_jr_8012ACE0.o,tail2.data.o,ov_SC03_100_jr_8013FFD8.o,tail3.data.o,ov_SC03_100_after.o,tail4.data.o,ov_SC03_100_jr_8015AE2C.o,tail5.data.o,ov_SC03_100_jr_8016AB6C.o,tail6.data.o,ov_SC03_100_jr_801734BC.o,tail7.data.o,ov_SC03_100_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC03_101_jr_8013FFD8.o,tail3.data.o,ov_SC03_101_after.o,tail4.data.o,ov_SC03_101_jr_8015AE2C.o,tail5.data.o,ov_SC03_101_jr_801734BC.o,tail6.data.o,ov_SC03_101_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_101_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_101_jr_8012ACE0.o,tail2.data.o,ov_SC03_101_jr_8013FFD8.o,tail3.data.o,ov_SC03_101_after.o,tail4.data.o,ov_SC03_101_jr_8015AE2C.o,tail5.data.o,ov_SC03_101_jr_8016AB6C.o,tail6.data.o,ov_SC03_101_jr_801734BC.o,tail7.data.o,ov_SC03_101_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC03_102_jr_8013FFD8.o,tail3.data.o,ov_SC03_102_after.o,tail4.data.o,ov_SC03_102_jr_8015AE2C.o,tail5.data.o,ov_SC03_102_jr_801734BC.o,tail6.data.o,ov_SC03_102_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_102_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_102_jr_8012ACE0.o,tail2.data.o,ov_SC03_102_jr_8013FFD8.o,tail3.data.o,ov_SC03_102_after.o,tail4.data.o,ov_SC03_102_jr_8015AE2C.o,tail5.data.o,ov_SC03_102_jr_8016AB6C.o,tail6.data.o,ov_SC03_102_jr_801734BC.o,tail7.data.o,ov_SC03_102_jr_80178D40.o,tail8.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_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_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_8016AB6C.o,tail5.data.o,ov_SC03_103_jr_801734BC.o,tail6.data.o,ov_SC03_103_jr_80178D40.o,tail7.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_jr_8012ACE0.o,tail2.data.o,ov_SC03_104_jr_8013FFD8.o,tail3.data.o,ov_SC03_104_after.o,tail4.data.o,ov_SC03_104_jr_8015AE2C.o,tail5.data.o,ov_SC03_104_jr_801734BC.o,tail6.data.o,ov_SC03_104_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_104_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_104_jr_8012ACE0.o,tail2.data.o,ov_SC03_104_jr_8013FFD8.o,tail3.data.o,ov_SC03_104_after.o,tail4.data.o,ov_SC03_104_jr_8015AE2C.o,tail5.data.o,ov_SC03_104_jr_8016AB6C.o,tail6.data.o,ov_SC03_104_jr_801734BC.o,tail7.data.o,ov_SC03_104_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC03_105_jr_8013FFD8.o,tail3.data.o,ov_SC03_105_after.o,tail4.data.o,ov_SC03_105_jr_8015AE2C.o,tail5.data.o,ov_SC03_105_jr_801734BC.o,tail6.data.o,ov_SC03_105_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_105_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_105_jr_8012ACE0.o,tail2.data.o,ov_SC03_105_jr_8013FFD8.o,tail3.data.o,ov_SC03_105_after.o,tail4.data.o,ov_SC03_105_jr_8015AE2C.o,tail5.data.o,ov_SC03_105_jr_8016AB6C.o,tail6.data.o,ov_SC03_105_jr_801734BC.o,tail7.data.o,ov_SC03_105_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC03_108_jr_8013FFD8.o,tail3.data.o,ov_SC03_108_after.o,tail4.data.o,ov_SC03_108_jr_8015AE2C.o,tail5.data.o,ov_SC03_108_jr_801734BC.o,tail6.data.o,ov_SC03_108_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_108_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_108_jr_8012ACE0.o,tail2.data.o,ov_SC03_108_jr_8013FFD8.o,tail3.data.o,ov_SC03_108_after.o,tail4.data.o,ov_SC03_108_jr_8015AE2C.o,tail5.data.o,ov_SC03_108_jr_8016AB6C.o,tail6.data.o,ov_SC03_108_jr_801734BC.o,tail7.data.o,ov_SC03_108_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC03_109_jr_8013FFD8.o,tail3.data.o,ov_SC03_109_after.o,tail4.data.o,ov_SC03_109_jr_8015AE2C.o,tail5.data.o,ov_SC03_109_jr_801734BC.o,tail6.data.o,ov_SC03_109_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_109_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_109_jr_8012ACE0.o,tail2.data.o,ov_SC03_109_jr_8013FFD8.o,tail3.data.o,ov_SC03_109_after.o,tail4.data.o,ov_SC03_109_jr_8015AE2C.o,tail5.data.o,ov_SC03_109_jr_8016AB6C.o,tail6.data.o,ov_SC03_109_jr_801734BC.o,tail7.data.o,ov_SC03_109_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC03_110_jr_8013FFD8.o,tail3.data.o,ov_SC03_110_after.o,tail4.data.o,ov_SC03_110_jr_8015AE2C.o,tail5.data.o,ov_SC03_110_jr_801734BC.o,tail6.data.o,ov_SC03_110_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_110_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_110_jr_8012ACE0.o,tail2.data.o,ov_SC03_110_jr_8013FFD8.o,tail3.data.o,ov_SC03_110_after.o,tail4.data.o,ov_SC03_110_jr_8015AE2C.o,tail5.data.o,ov_SC03_110_jr_8016AB6C.o,tail6.data.o,ov_SC03_110_jr_801734BC.o,tail7.data.o,ov_SC03_110_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC03_111_jr_8013FFD8.o,tail3.data.o,ov_SC03_111_after.o,tail4.data.o,ov_SC03_111_jr_8015AE2C.o,tail5.data.o,ov_SC03_111_jr_801734BC.o,tail6.data.o,ov_SC03_111_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_111_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_111_jr_8012ACE0.o,tail2.data.o,ov_SC03_111_jr_8013FFD8.o,tail3.data.o,ov_SC03_111_after.o,tail4.data.o,ov_SC03_111_jr_8015AE2C.o,tail5.data.o,ov_SC03_111_jr_8016AB6C.o,tail6.data.o,ov_SC03_111_jr_801734BC.o,tail7.data.o,ov_SC03_111_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC03_112_jr_8013FFD8.o,tail3.data.o,ov_SC03_112_after.o,tail4.data.o,ov_SC03_112_jr_8015AE2C.o,tail5.data.o,ov_SC03_112_jr_801734BC.o,tail6.data.o,ov_SC03_112_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_112_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_112_jr_8012ACE0.o,tail2.data.o,ov_SC03_112_jr_8013FFD8.o,tail3.data.o,ov_SC03_112_after.o,tail4.data.o,ov_SC03_112_jr_8015AE2C.o,tail5.data.o,ov_SC03_112_jr_8016AB6C.o,tail6.data.o,ov_SC03_112_jr_801734BC.o,tail7.data.o,ov_SC03_112_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC03_113_jr_8013FFD8.o,tail3.data.o,ov_SC03_113_after.o,tail4.data.o,ov_SC03_113_jr_8015AE2C.o,tail5.data.o,ov_SC03_113_jr_801734BC.o,tail6.data.o,ov_SC03_113_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_113_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_113_jr_8012ACE0.o,tail2.data.o,ov_SC03_113_jr_8013FFD8.o,tail3.data.o,ov_SC03_113_after.o,tail4.data.o,ov_SC03_113_jr_8015AE2C.o,tail5.data.o,ov_SC03_113_jr_8016AB6C.o,tail6.data.o,ov_SC03_113_jr_801734BC.o,tail7.data.o,ov_SC03_113_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC03_114_jr_8013FFD8.o,tail3.data.o,ov_SC03_114_after.o,tail4.data.o,ov_SC03_114_jr_8015AE2C.o,tail5.data.o,ov_SC03_114_jr_801734BC.o,tail6.data.o,ov_SC03_114_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_114_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_114_jr_8012ACE0.o,tail2.data.o,ov_SC03_114_jr_8013FFD8.o,tail3.data.o,ov_SC03_114_after.o,tail4.data.o,ov_SC03_114_jr_8015AE2C.o,tail5.data.o,ov_SC03_114_jr_8016AB6C.o,tail6.data.o,ov_SC03_114_jr_801734BC.o,tail7.data.o,ov_SC03_114_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC03_115_jr_8013FFD8.o,tail3.data.o,ov_SC03_115_after.o,tail4.data.o,ov_SC03_115_jr_8015AE2C.o,tail5.data.o,ov_SC03_115_jr_801734BC.o,tail6.data.o,ov_SC03_115_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_115_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_115_jr_8012ACE0.o,tail2.data.o,ov_SC03_115_jr_8013FFD8.o,tail3.data.o,ov_SC03_115_after.o,tail4.data.o,ov_SC03_115_jr_8015AE2C.o,tail5.data.o,ov_SC03_115_jr_8016AB6C.o,tail6.data.o,ov_SC03_115_jr_801734BC.o,tail7.data.o,ov_SC03_115_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC03_116_jr_8013FFD8.o,tail3.data.o,ov_SC03_116_after.o,tail4.data.o,ov_SC03_116_jr_8015AE2C.o,tail5.data.o,ov_SC03_116_jr_801734BC.o,tail6.data.o,ov_SC03_116_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_116_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_116_jr_8012ACE0.o,tail2.data.o,ov_SC03_116_jr_8013FFD8.o,tail3.data.o,ov_SC03_116_after.o,tail4.data.o,ov_SC03_116_jr_8015AE2C.o,tail5.data.o,ov_SC03_116_jr_8016AB6C.o,tail6.data.o,ov_SC03_116_jr_801734BC.o,tail7.data.o,ov_SC03_116_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC03_117_jr_8013FFD8.o,tail3.data.o,ov_SC03_117_after.o,tail4.data.o,ov_SC03_117_jr_8015AE2C.o,tail5.data.o,ov_SC03_117_jr_801734BC.o,tail6.data.o,ov_SC03_117_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_117_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_117_jr_8012ACE0.o,tail2.data.o,ov_SC03_117_jr_8013FFD8.o,tail3.data.o,ov_SC03_117_after.o,tail4.data.o,ov_SC03_117_jr_8015AE2C.o,tail5.data.o,ov_SC03_117_jr_8016AB6C.o,tail6.data.o,ov_SC03_117_jr_801734BC.o,tail7.data.o,ov_SC03_117_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC03_118_jr_8013FFD8.o,tail3.data.o,ov_SC03_118_after.o,tail4.data.o,ov_SC03_118_jr_8015AE2C.o,tail5.data.o,ov_SC03_118_jr_801734BC.o,tail6.data.o,ov_SC03_118_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_118_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_118_jr_8012ACE0.o,tail2.data.o,ov_SC03_118_jr_8013FFD8.o,tail3.data.o,ov_SC03_118_after.o,tail4.data.o,ov_SC03_118_jr_8015AE2C.o,tail5.data.o,ov_SC03_118_jr_8016AB6C.o,tail6.data.o,ov_SC03_118_jr_801734BC.o,tail7.data.o,ov_SC03_118_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC03_119_jr_8013FFD8.o,tail3.data.o,ov_SC03_119_after.o,tail4.data.o,ov_SC03_119_jr_8015AE2C.o,tail5.data.o,ov_SC03_119_jr_801734BC.o,tail6.data.o,ov_SC03_119_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_119_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_119_jr_8012ACE0.o,tail2.data.o,ov_SC03_119_jr_8013FFD8.o,tail3.data.o,ov_SC03_119_after.o,tail4.data.o,ov_SC03_119_jr_8015AE2C.o,tail5.data.o,ov_SC03_119_jr_8016AB6C.o,tail6.data.o,ov_SC03_119_jr_801734BC.o,tail7.data.o,ov_SC03_119_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC03_121_jr_8013FFD8.o,tail3.data.o,ov_SC03_121_after.o,tail4.data.o,ov_SC03_121_jr_8015AE2C.o,tail5.data.o,ov_SC03_121_jr_801734BC.o,tail6.data.o,ov_SC03_121_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_121_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_121_jr_8012ACE0.o,tail2.data.o,ov_SC03_121_jr_8013FFD8.o,tail3.data.o,ov_SC03_121_after.o,tail4.data.o,ov_SC03_121_jr_8015AE2C.o,tail5.data.o,ov_SC03_121_jr_8016AB6C.o,tail6.data.o,ov_SC03_121_jr_801734BC.o,tail7.data.o,ov_SC03_121_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC03_124_jr_8013FFD8.o,tail3.data.o,ov_SC03_124_after.o,tail4.data.o,ov_SC03_124_jr_8015AE2C.o,tail5.data.o,ov_SC03_124_jr_801734BC.o,tail6.data.o,ov_SC03_124_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_124_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_124_jr_8012ACE0.o,tail2.data.o,ov_SC03_124_jr_8013FFD8.o,tail3.data.o,ov_SC03_124_after.o,tail4.data.o,ov_SC03_124_jr_8015AE2C.o,tail5.data.o,ov_SC03_124_jr_8016AB6C.o,tail6.data.o,ov_SC03_124_jr_801734BC.o,tail7.data.o,ov_SC03_124_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC03_125_jr_8013FFD8.o,tail3.data.o,ov_SC03_125_after.o,tail4.data.o,ov_SC03_125_jr_8015AE2C.o,tail5.data.o,ov_SC03_125_jr_801734BC.o,tail6.data.o,ov_SC03_125_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_125_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_125_jr_8012ACE0.o,tail2.data.o,ov_SC03_125_jr_8013FFD8.o,tail3.data.o,ov_SC03_125_after.o,tail4.data.o,ov_SC03_125_jr_8015AE2C.o,tail5.data.o,ov_SC03_125_jr_8016AB6C.o,tail6.data.o,ov_SC03_125_jr_801734BC.o,tail7.data.o,ov_SC03_125_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC03_126_jr_8013FFD8.o,tail3.data.o,ov_SC03_126_after.o,tail4.data.o,ov_SC03_126_jr_8015AE2C.o,tail5.data.o,ov_SC03_126_jr_801734BC.o,tail6.data.o,ov_SC03_126_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_126_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_126_jr_8012ACE0.o,tail2.data.o,ov_SC03_126_jr_8013FFD8.o,tail3.data.o,ov_SC03_126_after.o,tail4.data.o,ov_SC03_126_jr_8015AE2C.o,tail5.data.o,ov_SC03_126_jr_8016AB6C.o,tail6.data.o,ov_SC03_126_jr_801734BC.o,tail7.data.o,ov_SC03_126_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC04_002_jr_8013FFD8.o,tail3.data.o,ov_SC04_002_after.o,tail4.data.o,ov_SC04_002_jr_8015AE2C.o,tail5.data.o,ov_SC04_002_jr_801734BC.o,tail6.data.o,ov_SC04_002_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_002_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_002_jr_8012ACE0.o,tail2.data.o,ov_SC04_002_jr_8013FFD8.o,tail3.data.o,ov_SC04_002_after.o,tail4.data.o,ov_SC04_002_jr_8015AE2C.o,tail5.data.o,ov_SC04_002_jr_8016AB6C.o,tail6.data.o,ov_SC04_002_jr_801734BC.o,tail7.data.o,ov_SC04_002_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC04_003_jr_8013FFD8.o,tail3.data.o,ov_SC04_003_after.o,tail4.data.o,ov_SC04_003_jr_8015AE2C.o,tail5.data.o,ov_SC04_003_jr_801734BC.o,tail6.data.o,ov_SC04_003_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_003_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_003_jr_8012ACE0.o,tail2.data.o,ov_SC04_003_jr_8013FFD8.o,tail3.data.o,ov_SC04_003_after.o,tail4.data.o,ov_SC04_003_jr_8015AE2C.o,tail5.data.o,ov_SC04_003_jr_8016AB6C.o,tail6.data.o,ov_SC04_003_jr_801734BC.o,tail7.data.o,ov_SC04_003_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC04_004_jr_8013FFD8.o,tail3.data.o,ov_SC04_004_after.o,tail4.data.o,ov_SC04_004_jr_8015AE2C.o,tail5.data.o,ov_SC04_004_jr_801734BC.o,tail6.data.o,ov_SC04_004_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_004_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_004_jr_8012ACE0.o,tail2.data.o,ov_SC04_004_jr_8013FFD8.o,tail3.data.o,ov_SC04_004_after.o,tail4.data.o,ov_SC04_004_jr_8015AE2C.o,tail5.data.o,ov_SC04_004_jr_8016AB6C.o,tail6.data.o,ov_SC04_004_jr_801734BC.o,tail7.data.o,ov_SC04_004_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC04_005_jr_8013FFD8.o,tail3.data.o,ov_SC04_005_after.o,tail4.data.o,ov_SC04_005_jr_8015AE2C.o,tail5.data.o,ov_SC04_005_jr_801734BC.o,tail6.data.o,ov_SC04_005_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_005_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_005_jr_8012ACE0.o,tail2.data.o,ov_SC04_005_jr_8013FFD8.o,tail3.data.o,ov_SC04_005_after.o,tail4.data.o,ov_SC04_005_jr_8015AE2C.o,tail5.data.o,ov_SC04_005_jr_8016AB6C.o,tail6.data.o,ov_SC04_005_jr_801734BC.o,tail7.data.o,ov_SC04_005_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC04_006_jr_8013FFD8.o,tail3.data.o,ov_SC04_006_after.o,tail4.data.o,ov_SC04_006_jr_8015AE2C.o,tail5.data.o,ov_SC04_006_jr_801734BC.o,tail6.data.o,ov_SC04_006_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_006_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_006_jr_8012ACE0.o,tail2.data.o,ov_SC04_006_jr_8013FFD8.o,tail3.data.o,ov_SC04_006_after.o,tail4.data.o,ov_SC04_006_jr_8015AE2C.o,tail5.data.o,ov_SC04_006_jr_8016AB6C.o,tail6.data.o,ov_SC04_006_jr_801734BC.o,tail7.data.o,ov_SC04_006_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC04_007_jr_8013FFD8.o,tail3.data.o,ov_SC04_007_after.o,tail4.data.o,ov_SC04_007_jr_8015AE2C.o,tail5.data.o,ov_SC04_007_jr_801734BC.o,tail6.data.o,ov_SC04_007_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_007_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_007_jr_8012ACE0.o,tail2.data.o,ov_SC04_007_jr_8013FFD8.o,tail3.data.o,ov_SC04_007_after.o,tail4.data.o,ov_SC04_007_jr_8015AE2C.o,tail5.data.o,ov_SC04_007_jr_8016AB6C.o,tail6.data.o,ov_SC04_007_jr_801734BC.o,tail7.data.o,ov_SC04_007_jr_80178D40.o,tail8.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 @@ -1979,7 +1979,7 @@ ov_SC04_008_ELF := $(ov_SC04_008_OUT).elf ov_SC04_008_MAPFILE := $(ov_SC04_008_OUT).map ov_SC04_008_LD_SCRIPT := $(ov_SC04_008_OUT).ld ov_SC04_008_SPLAT_YAML := config/splat.ov_SC04_008.yaml -ov_SC04_008_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_008_jr_8012ACE0.o,tail2.data.o,ov_SC04_008_jr_8013FFD8.o,tail3.data.o,ov_SC04_008_jr_8015AE2C.o,tail4.data.o,ov_SC04_008_jr_801734BC.o,tail5.data.o,ov_SC04_008_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_008_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_008_jr_8012ACE0.o,tail2.data.o,ov_SC04_008_jr_8013FFD8.o,tail3.data.o,ov_SC04_008_jr_8015AE2C.o,tail4.data.o,ov_SC04_008_jr_8016AB6C.o,tail5.data.o,ov_SC04_008_jr_801734BC.o,tail6.data.o,ov_SC04_008_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_008_CHECK_SHA := config/check.ov_SC04_008.sha ov_SC04_008_SYMBOLS := config/symbols.ov_SC04_008.txt ov_SC04_008_SIG := .run/sig.ov_SC04_008.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_jr_8012ACE0.o,tail2.data.o,ov_SC04_009_jr_8013FFD8.o,tail3.data.o,ov_SC04_009_after.o,tail4.data.o,ov_SC04_009_jr_8015AE2C.o,tail5.data.o,ov_SC04_009_jr_801734BC.o,tail6.data.o,ov_SC04_009_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_009_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_009_jr_8012ACE0.o,tail2.data.o,ov_SC04_009_jr_8013FFD8.o,tail3.data.o,ov_SC04_009_after.o,tail4.data.o,ov_SC04_009_jr_8015AE2C.o,tail5.data.o,ov_SC04_009_jr_8016AB6C.o,tail6.data.o,ov_SC04_009_jr_801734BC.o,tail7.data.o,ov_SC04_009_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC04_010_jr_8013FFD8.o,tail3.data.o,ov_SC04_010_after.o,tail4.data.o,ov_SC04_010_jr_8015AE2C.o,tail5.data.o,ov_SC04_010_jr_801734BC.o,tail6.data.o,ov_SC04_010_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_010_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_010_jr_8012ACE0.o,tail2.data.o,ov_SC04_010_jr_8013FFD8.o,tail3.data.o,ov_SC04_010_after.o,tail4.data.o,ov_SC04_010_jr_8015AE2C.o,tail5.data.o,ov_SC04_010_jr_8016AB6C.o,tail6.data.o,ov_SC04_010_jr_801734BC.o,tail7.data.o,ov_SC04_010_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC04_011_jr_8013FFD8.o,tail3.data.o,ov_SC04_011_after.o,tail4.data.o,ov_SC04_011_jr_8015AE2C.o,tail5.data.o,ov_SC04_011_jr_801734BC.o,tail6.data.o,ov_SC04_011_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_011_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_011_jr_8012ACE0.o,tail2.data.o,ov_SC04_011_jr_8013FFD8.o,tail3.data.o,ov_SC04_011_after.o,tail4.data.o,ov_SC04_011_jr_8015AE2C.o,tail5.data.o,ov_SC04_011_jr_8016AB6C.o,tail6.data.o,ov_SC04_011_jr_801734BC.o,tail7.data.o,ov_SC04_011_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC04_012_jr_8013FFD8.o,tail3.data.o,ov_SC04_012_after.o,tail4.data.o,ov_SC04_012_jr_8015AE2C.o,tail5.data.o,ov_SC04_012_jr_801734BC.o,tail6.data.o,ov_SC04_012_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_012_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_012_jr_8012ACE0.o,tail2.data.o,ov_SC04_012_jr_8013FFD8.o,tail3.data.o,ov_SC04_012_after.o,tail4.data.o,ov_SC04_012_jr_8015AE2C.o,tail5.data.o,ov_SC04_012_jr_8016AB6C.o,tail6.data.o,ov_SC04_012_jr_801734BC.o,tail7.data.o,ov_SC04_012_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC04_015_jr_8013FFD8.o,tail3.data.o,ov_SC04_015_after.o,tail4.data.o,ov_SC04_015_jr_8015AE2C.o,tail5.data.o,ov_SC04_015_jr_801734BC.o,tail6.data.o,ov_SC04_015_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_015_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_015_jr_8012ACE0.o,tail2.data.o,ov_SC04_015_jr_8013FFD8.o,tail3.data.o,ov_SC04_015_after.o,tail4.data.o,ov_SC04_015_jr_8015AE2C.o,tail5.data.o,ov_SC04_015_jr_8016AB6C.o,tail6.data.o,ov_SC04_015_jr_801734BC.o,tail7.data.o,ov_SC04_015_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC04_016_jr_8013FFD8.o,tail3.data.o,ov_SC04_016_after.o,tail4.data.o,ov_SC04_016_jr_8015AE2C.o,tail5.data.o,ov_SC04_016_jr_801734BC.o,tail6.data.o,ov_SC04_016_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_016_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_016_jr_8012ACE0.o,tail2.data.o,ov_SC04_016_jr_8013FFD8.o,tail3.data.o,ov_SC04_016_after.o,tail4.data.o,ov_SC04_016_jr_8015AE2C.o,tail5.data.o,ov_SC04_016_jr_8016AB6C.o,tail6.data.o,ov_SC04_016_jr_801734BC.o,tail7.data.o,ov_SC04_016_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC04_020_jr_8013FFD8.o,tail3.data.o,ov_SC04_020_after.o,tail4.data.o,ov_SC04_020_jr_8015AE2C.o,tail5.data.o,ov_SC04_020_jr_801734BC.o,tail6.data.o,ov_SC04_020_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_020_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_020_jr_8012ACE0.o,tail2.data.o,ov_SC04_020_jr_8013FFD8.o,tail3.data.o,ov_SC04_020_after.o,tail4.data.o,ov_SC04_020_jr_8015AE2C.o,tail5.data.o,ov_SC04_020_jr_8016AB6C.o,tail6.data.o,ov_SC04_020_jr_801734BC.o,tail7.data.o,ov_SC04_020_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC04_021_jr_8013FFD8.o,tail3.data.o,ov_SC04_021_after.o,tail4.data.o,ov_SC04_021_jr_8015AE2C.o,tail5.data.o,ov_SC04_021_jr_801734BC.o,tail6.data.o,ov_SC04_021_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_021_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_021_jr_8012ACE0.o,tail2.data.o,ov_SC04_021_jr_8013FFD8.o,tail3.data.o,ov_SC04_021_after.o,tail4.data.o,ov_SC04_021_jr_8015AE2C.o,tail5.data.o,ov_SC04_021_jr_8016AB6C.o,tail6.data.o,ov_SC04_021_jr_801734BC.o,tail7.data.o,ov_SC04_021_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC05_001_jr_8013FFD8.o,tail3.data.o,ov_SC05_001_after.o,tail4.data.o,ov_SC05_001_jr_8015AE2C.o,tail5.data.o,ov_SC05_001_jr_801734BC.o,tail6.data.o,ov_SC05_001_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_001_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_001_jr_8012ACE0.o,tail2.data.o,ov_SC05_001_jr_8013FFD8.o,tail3.data.o,ov_SC05_001_after.o,tail4.data.o,ov_SC05_001_jr_8015AE2C.o,tail5.data.o,ov_SC05_001_jr_8016AB6C.o,tail6.data.o,ov_SC05_001_jr_801734BC.o,tail7.data.o,ov_SC05_001_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC05_002_jr_8013FFD8.o,tail3.data.o,ov_SC05_002_after.o,tail4.data.o,ov_SC05_002_jr_8015AE2C.o,tail5.data.o,ov_SC05_002_jr_801734BC.o,tail6.data.o,ov_SC05_002_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_002_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_002_jr_8012ACE0.o,tail2.data.o,ov_SC05_002_jr_8013FFD8.o,tail3.data.o,ov_SC05_002_after.o,tail4.data.o,ov_SC05_002_jr_8015AE2C.o,tail5.data.o,ov_SC05_002_jr_8016AB6C.o,tail6.data.o,ov_SC05_002_jr_801734BC.o,tail7.data.o,ov_SC05_002_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC05_003_jr_8013FFD8.o,tail3.data.o,ov_SC05_003_after.o,tail4.data.o,ov_SC05_003_jr_8015AE2C.o,tail5.data.o,ov_SC05_003_jr_801734BC.o,tail6.data.o,ov_SC05_003_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_003_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_003_jr_8012ACE0.o,tail2.data.o,ov_SC05_003_jr_8013FFD8.o,tail3.data.o,ov_SC05_003_after.o,tail4.data.o,ov_SC05_003_jr_8015AE2C.o,tail5.data.o,ov_SC05_003_jr_8016AB6C.o,tail6.data.o,ov_SC05_003_jr_801734BC.o,tail7.data.o,ov_SC05_003_jr_80178D40.o,tail8.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_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_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_8016AB6C.o,tail5.data.o,ov_SC05_004_jr_801734BC.o,tail6.data.o,ov_SC05_004_jr_80178D40.o,tail7.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_jr_8012ACE0.o,tail2.data.o,ov_SC05_005_jr_8013FFD8.o,tail3.data.o,ov_SC05_005_after.o,tail4.data.o,ov_SC05_005_jr_8015AE2C.o,tail5.data.o,ov_SC05_005_jr_801734BC.o,tail6.data.o,ov_SC05_005_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_005_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_005_jr_8012ACE0.o,tail2.data.o,ov_SC05_005_jr_8013FFD8.o,tail3.data.o,ov_SC05_005_after.o,tail4.data.o,ov_SC05_005_jr_8015AE2C.o,tail5.data.o,ov_SC05_005_jr_8016AB6C.o,tail6.data.o,ov_SC05_005_jr_801734BC.o,tail7.data.o,ov_SC05_005_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC05_006_jr_8013FFD8.o,tail3.data.o,ov_SC05_006_after.o,tail4.data.o,ov_SC05_006_jr_8015AE2C.o,tail5.data.o,ov_SC05_006_jr_801734BC.o,tail6.data.o,ov_SC05_006_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_006_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_006_jr_8012ACE0.o,tail2.data.o,ov_SC05_006_jr_8013FFD8.o,tail3.data.o,ov_SC05_006_after.o,tail4.data.o,ov_SC05_006_jr_8015AE2C.o,tail5.data.o,ov_SC05_006_jr_8016AB6C.o,tail6.data.o,ov_SC05_006_jr_801734BC.o,tail7.data.o,ov_SC05_006_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC05_007_jr_8013FFD8.o,tail3.data.o,ov_SC05_007_after.o,tail4.data.o,ov_SC05_007_jr_8015AE2C.o,tail5.data.o,ov_SC05_007_jr_801734BC.o,tail6.data.o,ov_SC05_007_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_007_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_007_jr_8012ACE0.o,tail2.data.o,ov_SC05_007_jr_8013FFD8.o,tail3.data.o,ov_SC05_007_after.o,tail4.data.o,ov_SC05_007_jr_8015AE2C.o,tail5.data.o,ov_SC05_007_jr_8016AB6C.o,tail6.data.o,ov_SC05_007_jr_801734BC.o,tail7.data.o,ov_SC05_007_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC05_008_jr_8013FFD8.o,tail3.data.o,ov_SC05_008_after.o,tail4.data.o,ov_SC05_008_jr_8015AE2C.o,tail5.data.o,ov_SC05_008_jr_801734BC.o,tail6.data.o,ov_SC05_008_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_008_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_008_jr_8012ACE0.o,tail2.data.o,ov_SC05_008_jr_8013FFD8.o,tail3.data.o,ov_SC05_008_after.o,tail4.data.o,ov_SC05_008_jr_8015AE2C.o,tail5.data.o,ov_SC05_008_jr_8016AB6C.o,tail6.data.o,ov_SC05_008_jr_801734BC.o,tail7.data.o,ov_SC05_008_jr_80178D40.o,tail8.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 @@ -2353,7 +2353,7 @@ ov_SC05_009_ELF := $(ov_SC05_009_OUT).elf ov_SC05_009_MAPFILE := $(ov_SC05_009_OUT).map ov_SC05_009_LD_SCRIPT := $(ov_SC05_009_OUT).ld ov_SC05_009_SPLAT_YAML := config/splat.ov_SC05_009.yaml -ov_SC05_009_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_009_jr_8012ACE0.o,tail2.data.o,ov_SC05_009_jr_8013FFD8.o,tail3.data.o,ov_SC05_009_jr_8015AE2C.o,tail4.data.o,ov_SC05_009_jr_801734BC.o,tail5.data.o,ov_SC05_009_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_009_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_009_jr_8012ACE0.o,tail2.data.o,ov_SC05_009_jr_8013FFD8.o,tail3.data.o,ov_SC05_009_jr_8015AE2C.o,tail4.data.o,ov_SC05_009_jr_8016AB6C.o,tail5.data.o,ov_SC05_009_jr_801734BC.o,tail6.data.o,ov_SC05_009_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC05_009_CHECK_SHA := config/check.ov_SC05_009.sha ov_SC05_009_SYMBOLS := config/symbols.ov_SC05_009.txt ov_SC05_009_SIG := .run/sig.ov_SC05_009.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_jr_8012ACE0.o,tail2.data.o,ov_SC05_010_jr_8013FFD8.o,tail3.data.o,ov_SC05_010_after.o,tail4.data.o,ov_SC05_010_jr_8015AE2C.o,tail5.data.o,ov_SC05_010_jr_801734BC.o,tail6.data.o,ov_SC05_010_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_010_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_010_jr_8012ACE0.o,tail2.data.o,ov_SC05_010_jr_8013FFD8.o,tail3.data.o,ov_SC05_010_after.o,tail4.data.o,ov_SC05_010_jr_8015AE2C.o,tail5.data.o,ov_SC05_010_jr_8016AB6C.o,tail6.data.o,ov_SC05_010_jr_801734BC.o,tail7.data.o,ov_SC05_010_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC05_011_jr_8013FFD8.o,tail3.data.o,ov_SC05_011_after.o,tail4.data.o,ov_SC05_011_jr_8015AE2C.o,tail5.data.o,ov_SC05_011_jr_801734BC.o,tail6.data.o,ov_SC05_011_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_011_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_011_jr_8012ACE0.o,tail2.data.o,ov_SC05_011_jr_8013FFD8.o,tail3.data.o,ov_SC05_011_after.o,tail4.data.o,ov_SC05_011_jr_8015AE2C.o,tail5.data.o,ov_SC05_011_jr_8016AB6C.o,tail6.data.o,ov_SC05_011_jr_801734BC.o,tail7.data.o,ov_SC05_011_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC05_017_jr_8013FFD8.o,tail3.data.o,ov_SC05_017_after.o,tail4.data.o,ov_SC05_017_jr_8015AE2C.o,tail5.data.o,ov_SC05_017_jr_801734BC.o,tail6.data.o,ov_SC05_017_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_017_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_017_jr_8012ACE0.o,tail2.data.o,ov_SC05_017_jr_8013FFD8.o,tail3.data.o,ov_SC05_017_after.o,tail4.data.o,ov_SC05_017_jr_8015AE2C.o,tail5.data.o,ov_SC05_017_jr_8016AB6C.o,tail6.data.o,ov_SC05_017_jr_801734BC.o,tail7.data.o,ov_SC05_017_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC05_018_jr_8013FFD8.o,tail3.data.o,ov_SC05_018_after.o,tail4.data.o,ov_SC05_018_jr_8015AE2C.o,tail5.data.o,ov_SC05_018_jr_801734BC.o,tail6.data.o,ov_SC05_018_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_018_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_018_jr_8012ACE0.o,tail2.data.o,ov_SC05_018_jr_8013FFD8.o,tail3.data.o,ov_SC05_018_after.o,tail4.data.o,ov_SC05_018_jr_8015AE2C.o,tail5.data.o,ov_SC05_018_jr_8016AB6C.o,tail6.data.o,ov_SC05_018_jr_801734BC.o,tail7.data.o,ov_SC05_018_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC05_019_jr_8013FFD8.o,tail3.data.o,ov_SC05_019_after.o,tail4.data.o,ov_SC05_019_jr_8015AE2C.o,tail5.data.o,ov_SC05_019_jr_801734BC.o,tail6.data.o,ov_SC05_019_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_019_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_019_jr_8012ACE0.o,tail2.data.o,ov_SC05_019_jr_8013FFD8.o,tail3.data.o,ov_SC05_019_after.o,tail4.data.o,ov_SC05_019_jr_8015AE2C.o,tail5.data.o,ov_SC05_019_jr_8016AB6C.o,tail6.data.o,ov_SC05_019_jr_801734BC.o,tail7.data.o,ov_SC05_019_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC06_006_jr_8013FFD8.o,tail3.data.o,ov_SC06_006_after.o,tail4.data.o,ov_SC06_006_jr_8015AE2C.o,tail5.data.o,ov_SC06_006_jr_801734BC.o,tail6.data.o,ov_SC06_006_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_006_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_006_jr_8012ACE0.o,tail2.data.o,ov_SC06_006_jr_8013FFD8.o,tail3.data.o,ov_SC06_006_after.o,tail4.data.o,ov_SC06_006_jr_8015AE2C.o,tail5.data.o,ov_SC06_006_jr_8016AB6C.o,tail6.data.o,ov_SC06_006_jr_801734BC.o,tail7.data.o,ov_SC06_006_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC06_008_jr_8013FFD8.o,tail3.data.o,ov_SC06_008_after.o,tail4.data.o,ov_SC06_008_jr_8015AE2C.o,tail5.data.o,ov_SC06_008_jr_801734BC.o,tail6.data.o,ov_SC06_008_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_008_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_008_jr_8012ACE0.o,tail2.data.o,ov_SC06_008_jr_8013FFD8.o,tail3.data.o,ov_SC06_008_after.o,tail4.data.o,ov_SC06_008_jr_8015AE2C.o,tail5.data.o,ov_SC06_008_jr_8016AB6C.o,tail6.data.o,ov_SC06_008_jr_801734BC.o,tail7.data.o,ov_SC06_008_jr_80178D40.o,tail8.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_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_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_8016AB6C.o,tail5.data.o,ov_SC06_010_jr_801734BC.o,tail6.data.o,ov_SC06_010_jr_80178D40.o,tail7.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_jr_8012ACE0.o,tail2.data.o,ov_SC06_011_jr_8013FFD8.o,tail3.data.o,ov_SC06_011_after.o,tail4.data.o,ov_SC06_011_jr_8015AE2C.o,tail5.data.o,ov_SC06_011_jr_801734BC.o,tail6.data.o,ov_SC06_011_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_011_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_011_jr_8012ACE0.o,tail2.data.o,ov_SC06_011_jr_8013FFD8.o,tail3.data.o,ov_SC06_011_after.o,tail4.data.o,ov_SC06_011_jr_8015AE2C.o,tail5.data.o,ov_SC06_011_jr_8016AB6C.o,tail6.data.o,ov_SC06_011_jr_801734BC.o,tail7.data.o,ov_SC06_011_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC06_013_jr_8013FFD8.o,tail3.data.o,ov_SC06_013_after.o,tail4.data.o,ov_SC06_013_jr_8015AE2C.o,tail5.data.o,ov_SC06_013_jr_801734BC.o,tail6.data.o,ov_SC06_013_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_013_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_013_jr_8012ACE0.o,tail2.data.o,ov_SC06_013_jr_8013FFD8.o,tail3.data.o,ov_SC06_013_after.o,tail4.data.o,ov_SC06_013_jr_8015AE2C.o,tail5.data.o,ov_SC06_013_jr_8016AB6C.o,tail6.data.o,ov_SC06_013_jr_801734BC.o,tail7.data.o,ov_SC06_013_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC06_014_jr_8013FFD8.o,tail3.data.o,ov_SC06_014_after.o,tail4.data.o,ov_SC06_014_jr_8015AE2C.o,tail5.data.o,ov_SC06_014_jr_801734BC.o,tail6.data.o,ov_SC06_014_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_014_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_014_jr_8012ACE0.o,tail2.data.o,ov_SC06_014_jr_8013FFD8.o,tail3.data.o,ov_SC06_014_after.o,tail4.data.o,ov_SC06_014_jr_8015AE2C.o,tail5.data.o,ov_SC06_014_jr_8016AB6C.o,tail6.data.o,ov_SC06_014_jr_801734BC.o,tail7.data.o,ov_SC06_014_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC06_015_jr_8013FFD8.o,tail3.data.o,ov_SC06_015_after.o,tail4.data.o,ov_SC06_015_jr_8015AE2C.o,tail5.data.o,ov_SC06_015_jr_801734BC.o,tail6.data.o,ov_SC06_015_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_015_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_015_jr_8012ACE0.o,tail2.data.o,ov_SC06_015_jr_8013FFD8.o,tail3.data.o,ov_SC06_015_after.o,tail4.data.o,ov_SC06_015_jr_8015AE2C.o,tail5.data.o,ov_SC06_015_jr_8016AB6C.o,tail6.data.o,ov_SC06_015_jr_801734BC.o,tail7.data.o,ov_SC06_015_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC06_016_jr_8013FFD8.o,tail3.data.o,ov_SC06_016_after.o,tail4.data.o,ov_SC06_016_jr_8015AE2C.o,tail5.data.o,ov_SC06_016_jr_801734BC.o,tail6.data.o,ov_SC06_016_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_016_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_016_jr_8012ACE0.o,tail2.data.o,ov_SC06_016_jr_8013FFD8.o,tail3.data.o,ov_SC06_016_after.o,tail4.data.o,ov_SC06_016_jr_8015AE2C.o,tail5.data.o,ov_SC06_016_jr_8016AB6C.o,tail6.data.o,ov_SC06_016_jr_801734BC.o,tail7.data.o,ov_SC06_016_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC06_018_jr_8013FFD8.o,tail3.data.o,ov_SC06_018_after.o,tail4.data.o,ov_SC06_018_jr_8015AE2C.o,tail5.data.o,ov_SC06_018_jr_801734BC.o,tail6.data.o,ov_SC06_018_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_018_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_018_jr_8012ACE0.o,tail2.data.o,ov_SC06_018_jr_8013FFD8.o,tail3.data.o,ov_SC06_018_after.o,tail4.data.o,ov_SC06_018_jr_8015AE2C.o,tail5.data.o,ov_SC06_018_jr_8016AB6C.o,tail6.data.o,ov_SC06_018_jr_801734BC.o,tail7.data.o,ov_SC06_018_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC06_020_jr_8013FFD8.o,tail3.data.o,ov_SC06_020_after.o,tail4.data.o,ov_SC06_020_jr_8015AE2C.o,tail5.data.o,ov_SC06_020_jr_801734BC.o,tail6.data.o,ov_SC06_020_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_020_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_020_jr_8012ACE0.o,tail2.data.o,ov_SC06_020_jr_8013FFD8.o,tail3.data.o,ov_SC06_020_after.o,tail4.data.o,ov_SC06_020_jr_8015AE2C.o,tail5.data.o,ov_SC06_020_jr_8016AB6C.o,tail6.data.o,ov_SC06_020_jr_801734BC.o,tail7.data.o,ov_SC06_020_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC06_022_jr_8013FFD8.o,tail3.data.o,ov_SC06_022_after.o,tail4.data.o,ov_SC06_022_jr_8015AE2C.o,tail5.data.o,ov_SC06_022_jr_801734BC.o,tail6.data.o,ov_SC06_022_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_022_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_022_jr_8012ACE0.o,tail2.data.o,ov_SC06_022_jr_8013FFD8.o,tail3.data.o,ov_SC06_022_after.o,tail4.data.o,ov_SC06_022_jr_8015AE2C.o,tail5.data.o,ov_SC06_022_jr_8016AB6C.o,tail6.data.o,ov_SC06_022_jr_801734BC.o,tail7.data.o,ov_SC06_022_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC06_024_jr_8013FFD8.o,tail3.data.o,ov_SC06_024_after.o,tail4.data.o,ov_SC06_024_jr_8015AE2C.o,tail5.data.o,ov_SC06_024_jr_801734BC.o,tail6.data.o,ov_SC06_024_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_024_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_024_jr_8012ACE0.o,tail2.data.o,ov_SC06_024_jr_8013FFD8.o,tail3.data.o,ov_SC06_024_after.o,tail4.data.o,ov_SC06_024_jr_8015AE2C.o,tail5.data.o,ov_SC06_024_jr_8016AB6C.o,tail6.data.o,ov_SC06_024_jr_801734BC.o,tail7.data.o,ov_SC06_024_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC06_025_jr_8013FFD8.o,tail3.data.o,ov_SC06_025_after.o,tail4.data.o,ov_SC06_025_jr_8015AE2C.o,tail5.data.o,ov_SC06_025_jr_801734BC.o,tail6.data.o,ov_SC06_025_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_025_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_025_jr_8012ACE0.o,tail2.data.o,ov_SC06_025_jr_8013FFD8.o,tail3.data.o,ov_SC06_025_after.o,tail4.data.o,ov_SC06_025_jr_8015AE2C.o,tail5.data.o,ov_SC06_025_jr_8016AB6C.o,tail6.data.o,ov_SC06_025_jr_801734BC.o,tail7.data.o,ov_SC06_025_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC06_027_jr_8013FFD8.o,tail3.data.o,ov_SC06_027_after.o,tail4.data.o,ov_SC06_027_jr_8015AE2C.o,tail5.data.o,ov_SC06_027_jr_801734BC.o,tail6.data.o,ov_SC06_027_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_027_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_027_jr_8012ACE0.o,tail2.data.o,ov_SC06_027_jr_8013FFD8.o,tail3.data.o,ov_SC06_027_after.o,tail4.data.o,ov_SC06_027_jr_8015AE2C.o,tail5.data.o,ov_SC06_027_jr_8016AB6C.o,tail6.data.o,ov_SC06_027_jr_801734BC.o,tail7.data.o,ov_SC06_027_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC06_029_jr_8013FFD8.o,tail3.data.o,ov_SC06_029_after.o,tail4.data.o,ov_SC06_029_jr_8015AE2C.o,tail5.data.o,ov_SC06_029_jr_801734BC.o,tail6.data.o,ov_SC06_029_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_029_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_029_jr_8012ACE0.o,tail2.data.o,ov_SC06_029_jr_8013FFD8.o,tail3.data.o,ov_SC06_029_after.o,tail4.data.o,ov_SC06_029_jr_8015AE2C.o,tail5.data.o,ov_SC06_029_jr_8016AB6C.o,tail6.data.o,ov_SC06_029_jr_801734BC.o,tail7.data.o,ov_SC06_029_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC06_030_jr_8013FFD8.o,tail3.data.o,ov_SC06_030_after.o,tail4.data.o,ov_SC06_030_jr_8015AE2C.o,tail5.data.o,ov_SC06_030_jr_801734BC.o,tail6.data.o,ov_SC06_030_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_030_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_030_jr_8012ACE0.o,tail2.data.o,ov_SC06_030_jr_8013FFD8.o,tail3.data.o,ov_SC06_030_after.o,tail4.data.o,ov_SC06_030_jr_8015AE2C.o,tail5.data.o,ov_SC06_030_jr_8016AB6C.o,tail6.data.o,ov_SC06_030_jr_801734BC.o,tail7.data.o,ov_SC06_030_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC06_032_jr_8013FFD8.o,tail3.data.o,ov_SC06_032_after.o,tail4.data.o,ov_SC06_032_jr_8015AE2C.o,tail5.data.o,ov_SC06_032_jr_801734BC.o,tail6.data.o,ov_SC06_032_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_032_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_032_jr_8012ACE0.o,tail2.data.o,ov_SC06_032_jr_8013FFD8.o,tail3.data.o,ov_SC06_032_after.o,tail4.data.o,ov_SC06_032_jr_8015AE2C.o,tail5.data.o,ov_SC06_032_jr_8016AB6C.o,tail6.data.o,ov_SC06_032_jr_801734BC.o,tail7.data.o,ov_SC06_032_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC06_033_jr_8013FFD8.o,tail3.data.o,ov_SC06_033_after.o,tail4.data.o,ov_SC06_033_jr_8015AE2C.o,tail5.data.o,ov_SC06_033_jr_801734BC.o,tail6.data.o,ov_SC06_033_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_033_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_033_jr_8012ACE0.o,tail2.data.o,ov_SC06_033_jr_8013FFD8.o,tail3.data.o,ov_SC06_033_after.o,tail4.data.o,ov_SC06_033_jr_8015AE2C.o,tail5.data.o,ov_SC06_033_jr_8016AB6C.o,tail6.data.o,ov_SC06_033_jr_801734BC.o,tail7.data.o,ov_SC06_033_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC07_001_jr_8013FFD8.o,tail3.data.o,ov_SC07_001_after.o,tail4.data.o,ov_SC07_001_jr_8015AE2C.o,tail5.data.o,ov_SC07_001_jr_801734BC.o,tail6.data.o,ov_SC07_001_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC07_001_JTBL_INTERLEAVE := --order tail.data.o,ov_SC07_001_jr_8012ACE0.o,tail2.data.o,ov_SC07_001_jr_8013FFD8.o,tail3.data.o,ov_SC07_001_after.o,tail4.data.o,ov_SC07_001_jr_8015AE2C.o,tail5.data.o,ov_SC07_001_jr_8016AB6C.o,tail6.data.o,ov_SC07_001_jr_801734BC.o,tail7.data.o,ov_SC07_001_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC07_002_jr_8013FFD8.o,tail3.data.o,ov_SC07_002_after.o,tail4.data.o,ov_SC07_002_jr_8015AE2C.o,tail5.data.o,ov_SC07_002_jr_801734BC.o,tail6.data.o,ov_SC07_002_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC07_002_JTBL_INTERLEAVE := --order tail.data.o,ov_SC07_002_jr_8012ACE0.o,tail2.data.o,ov_SC07_002_jr_8013FFD8.o,tail3.data.o,ov_SC07_002_after.o,tail4.data.o,ov_SC07_002_jr_8015AE2C.o,tail5.data.o,ov_SC07_002_jr_8016AB6C.o,tail6.data.o,ov_SC07_002_jr_801734BC.o,tail7.data.o,ov_SC07_002_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC07_008_jr_8013FFD8.o,tail3.data.o,ov_SC07_008_after.o,tail4.data.o,ov_SC07_008_jr_8015AE2C.o,tail5.data.o,ov_SC07_008_jr_801734BC.o,tail6.data.o,ov_SC07_008_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC07_008_JTBL_INTERLEAVE := --order tail.data.o,ov_SC07_008_jr_8012ACE0.o,tail2.data.o,ov_SC07_008_jr_8013FFD8.o,tail3.data.o,ov_SC07_008_after.o,tail4.data.o,ov_SC07_008_jr_8015AE2C.o,tail5.data.o,ov_SC07_008_jr_8016AB6C.o,tail6.data.o,ov_SC07_008_jr_801734BC.o,tail7.data.o,ov_SC07_008_jr_80178D40.o,tail8.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_jr_8012ACE0.o,tail2.data.o,ov_SC07_009_jr_8013FFD8.o,tail3.data.o,ov_SC07_009_after.o,tail4.data.o,ov_SC07_009_jr_8015AE2C.o,tail5.data.o,ov_SC07_009_jr_801734BC.o,tail6.data.o,ov_SC07_009_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC07_009_JTBL_INTERLEAVE := --order tail.data.o,ov_SC07_009_jr_8012ACE0.o,tail2.data.o,ov_SC07_009_jr_8013FFD8.o,tail3.data.o,ov_SC07_009_after.o,tail4.data.o,ov_SC07_009_jr_8015AE2C.o,tail5.data.o,ov_SC07_009_jr_8016AB6C.o,tail6.data.o,ov_SC07_009_jr_801734BC.o,tail7.data.o,ov_SC07_009_jr_80178D40.o,tail8.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 c63617376..1e122b789 100644 --- a/config/splat.ov_SC01_000.yaml +++ b/config/splat.ov_SC01_000.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC01_000_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC01_000_after] - [0x32cd4, c, ov_SC01_000_jr_8015AE2C] + - [0x42a14, c, ov_SC01_000_jr_8016AB6C] - [0x4b364, c, ov_SC01_000_jr_801734BC] - [0x50be8, c, ov_SC01_000_jr_80178D40] - [0x53d64, c, ov_SC01_000_jr_8017BEBC] @@ -111,12 +112,14 @@ segments: - [0x7bc9c, data, tail4] - [0x7bca0, .rodata, ov_SC01_000_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7bcbc, data, tail5] + - [0x7bd14, .rodata, ov_SC01_000_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x7bd34, data, tail6] - [0x7bdb4, .rodata, ov_SC01_000_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7bdc8, data, tail6] + - [0x7bdc8, data, tail7] - [0x7bf70, .rodata, ov_SC01_000_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7c0e8, data, tail7] + - [0x7c0e8, data, tail8] - [0x7c21c, .rodata, ov_SC01_000_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7c23c, data, tail8] + - [0x7c23c, data, tail9] - [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 49c88f8f4..803f3b493 100644 --- a/config/splat.ov_SC01_001.yaml +++ b/config/splat.ov_SC01_001.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC01_001_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC01_001_after] - [0x32cd4, c, ov_SC01_001_jr_8015AE2C] + - [0x42a14, c, ov_SC01_001_jr_8016AB6C] - [0x4b364, c, ov_SC01_001_jr_801734BC] - [0x50be8, c, ov_SC01_001_jr_80178D40] - [0x5b6b4, data, tail] @@ -110,10 +111,12 @@ segments: - [0xc3d74, data, tail4] - [0xc3d78, .rodata, ov_SC01_001_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc3d94, data, tail5] + - [0xc3dec, .rodata, ov_SC01_001_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc3e0c, data, tail6] - [0xc3e8c, .rodata, ov_SC01_001_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc3ea0, data, tail6] + - [0xc3ea0, data, tail7] - [0xc4048, .rodata, ov_SC01_001_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc41c0, data, tail7] + - [0xc41c0, data, tail8] - [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 7069d91af..a96d02af8 100644 --- a/config/splat.ov_SC01_004.yaml +++ b/config/splat.ov_SC01_004.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC01_004_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC01_004_after] - [0x32cd4, c, ov_SC01_004_jr_8015AE2C] + - [0x42a14, c, ov_SC01_004_jr_8016AB6C] - [0x4b364, c, ov_SC01_004_jr_801734BC] - [0x50be8, c, ov_SC01_004_jr_80178D40] - [0x57078, data, tail] @@ -110,10 +111,12 @@ segments: - [0x66154, data, tail4] - [0x66158, .rodata, ov_SC01_004_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x66174, data, tail5] + - [0x661cc, .rodata, ov_SC01_004_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x661ec, data, tail6] - [0x6626c, .rodata, ov_SC01_004_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x66280, data, tail6] + - [0x66280, data, tail7] - [0x66428, .rodata, ov_SC01_004_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x665a0, data, tail7] + - [0x665a0, data, tail8] - [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 f60fcc655..c0c2f5ede 100644 --- a/config/splat.ov_SC01_005.yaml +++ b/config/splat.ov_SC01_005.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC01_005_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC01_005_after] - [0x32cd4, c, ov_SC01_005_jr_8015AE2C] + - [0x42a14, c, ov_SC01_005_jr_8016AB6C] - [0x4b364, c, ov_SC01_005_jr_801734BC] - [0x50be8, c, ov_SC01_005_jr_80178D40] - [0x5a20c, data, tail] @@ -110,10 +111,12 @@ segments: - [0xa38b4, data, tail4] - [0xa38b8, .rodata, ov_SC01_005_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa38d4, data, tail5] + - [0xa392c, .rodata, ov_SC01_005_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa394c, data, tail6] - [0xa39cc, .rodata, ov_SC01_005_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa39e0, data, tail6] + - [0xa39e0, data, tail7] - [0xa3b88, .rodata, ov_SC01_005_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa3d00, data, tail7] + - [0xa3d00, data, tail8] - [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 714631ca5..30da180e2 100644 --- a/config/splat.ov_SC01_006.yaml +++ b/config/splat.ov_SC01_006.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC01_006_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC01_006_after] - [0x32cd4, c, ov_SC01_006_jr_8015AE2C] + - [0x42a14, c, ov_SC01_006_jr_8016AB6C] - [0x4b364, c, ov_SC01_006_jr_801734BC] - [0x50be8, c, ov_SC01_006_jr_80178D40] - [0x5a20c, data, tail] @@ -110,10 +111,12 @@ segments: - [0xa38b4, data, tail4] - [0xa38b8, .rodata, ov_SC01_006_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa38d4, data, tail5] + - [0xa392c, .rodata, ov_SC01_006_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa394c, data, tail6] - [0xa39cc, .rodata, ov_SC01_006_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa39e0, data, tail6] + - [0xa39e0, data, tail7] - [0xa3b88, .rodata, ov_SC01_006_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa3d00, data, tail7] + - [0xa3d00, data, tail8] - [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 b92f85d27..146707b05 100644 --- a/config/splat.ov_SC01_008.yaml +++ b/config/splat.ov_SC01_008.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC01_008_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC01_008_after] - [0x32cd4, c, ov_SC01_008_jr_8015AE2C] + - [0x42a14, c, ov_SC01_008_jr_8016AB6C] - [0x4b364, c, ov_SC01_008_jr_801734BC] - [0x50be8, c, ov_SC01_008_jr_80178D40] - [0x575ec, data, tail] @@ -110,10 +111,12 @@ segments: - [0x79364, data, tail4] - [0x79368, .rodata, ov_SC01_008_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x79384, data, tail5] + - [0x793dc, .rodata, ov_SC01_008_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x793fc, data, tail6] - [0x7947c, .rodata, ov_SC01_008_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x79490, data, tail6] + - [0x79490, data, tail7] - [0x79638, .rodata, ov_SC01_008_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x797b0, data, tail7] + - [0x797b0, data, tail8] - [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 2378337cb..d762eaa6f 100644 --- a/config/splat.ov_SC01_009.yaml +++ b/config/splat.ov_SC01_009.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC01_009_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC01_009_after] - [0x32cd4, c, ov_SC01_009_jr_8015AE2C] + - [0x42a14, c, ov_SC01_009_jr_8016AB6C] - [0x4b364, c, ov_SC01_009_jr_801734BC] - [0x50be8, c, ov_SC01_009_jr_80178D40] - [0x5a7d4, data, tail] @@ -110,10 +111,12 @@ segments: - [0xc9128, data, tail4] - [0xc912c, .rodata, ov_SC01_009_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc9148, data, tail5] + - [0xc91a0, .rodata, ov_SC01_009_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc91c0, data, tail6] - [0xc9240, .rodata, ov_SC01_009_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc9254, data, tail6] + - [0xc9254, data, tail7] - [0xc93fc, .rodata, ov_SC01_009_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc9574, data, tail7] + - [0xc9574, data, tail8] - [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 8a95c289b..62274cbef 100644 --- a/config/splat.ov_SC01_074.yaml +++ b/config/splat.ov_SC01_074.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC01_074_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC01_074_after] - [0x32cd4, c, ov_SC01_074_jr_8015AE2C] + - [0x42a14, c, ov_SC01_074_jr_8016AB6C] - [0x4b364, c, ov_SC01_074_jr_801734BC] - [0x50be8, c, ov_SC01_074_jr_80178D40] - [0x56454, data, tail] @@ -110,10 +111,12 @@ segments: - [0x721b8, data, tail4] - [0x721bc, .rodata, ov_SC01_074_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x721d8, data, tail5] + - [0x72230, .rodata, ov_SC01_074_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x72250, data, tail6] - [0x722d0, .rodata, ov_SC01_074_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x722e4, data, tail6] + - [0x722e4, data, tail7] - [0x7248c, .rodata, ov_SC01_074_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x72604, data, tail7] + - [0x72604, data, tail8] - [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 3ecbe1764..b436aedab 100644 --- a/config/splat.ov_SC01_080.yaml +++ b/config/splat.ov_SC01_080.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC01_080_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC01_080_after] - [0x32cd4, c, ov_SC01_080_jr_8015AE2C] + - [0x42a14, c, ov_SC01_080_jr_8016AB6C] - [0x4b364, c, ov_SC01_080_jr_801734BC] - [0x50be8, c, ov_SC01_080_jr_80178D40] - [0x5b3b4, data, tail] @@ -110,10 +111,12 @@ segments: - [0x9bfd8, data, tail4] - [0x9bfdc, .rodata, ov_SC01_080_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9bff8, data, tail5] + - [0x9c050, .rodata, ov_SC01_080_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9c070, data, tail6] - [0x9c0f0, .rodata, ov_SC01_080_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9c104, data, tail6] + - [0x9c104, data, tail7] - [0x9c2ac, .rodata, ov_SC01_080_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9c424, data, tail7] + - [0x9c424, data, tail8] - [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 a201396f4..1c1f50906 100644 --- a/config/splat.ov_SC01_084.yaml +++ b/config/splat.ov_SC01_084.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC01_084_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC01_084_after] - [0x32cd4, c, ov_SC01_084_jr_8015AE2C] + - [0x42a14, c, ov_SC01_084_jr_8016AB6C] - [0x4b364, c, ov_SC01_084_jr_801734BC] - [0x50be8, c, ov_SC01_084_jr_80178D40] - [0x5e6a8, data, tail] @@ -110,10 +111,12 @@ segments: - [0x9d9a8, data, tail4] - [0x9d9ac, .rodata, ov_SC01_084_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9d9c8, data, tail5] + - [0x9da20, .rodata, ov_SC01_084_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9da40, data, tail6] - [0x9dac0, .rodata, ov_SC01_084_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9dad4, data, tail6] + - [0x9dad4, data, tail7] - [0x9dc7c, .rodata, ov_SC01_084_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9ddf4, data, tail7] + - [0x9ddf4, data, tail8] - [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 59884f541..1c976781b 100644 --- a/config/splat.ov_SC02_000.yaml +++ b/config/splat.ov_SC02_000.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC02_000_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC02_000_after] - [0x32cd4, c, ov_SC02_000_jr_8015AE2C] + - [0x42a14, c, ov_SC02_000_jr_8016AB6C] - [0x4b364, c, ov_SC02_000_jr_801734BC] - [0x50be8, c, ov_SC02_000_jr_80178D40] - [0x57b58, c, ov_SC02_000_jr_8017FCB0] @@ -111,12 +112,14 @@ segments: - [0xbe1fc, data, tail4] - [0xbe200, .rodata, ov_SC02_000_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbe21c, data, tail5] + - [0xbe274, .rodata, ov_SC02_000_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xbe294, data, tail6] - [0xbe314, .rodata, ov_SC02_000_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe328, data, tail6] + - [0xbe328, data, tail7] - [0xbe4d0, .rodata, ov_SC02_000_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe648, data, tail7] + - [0xbe648, data, tail8] - [0xbe944, .rodata, ov_SC02_000_jr_8017FCB0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe964, data, tail8] + - [0xbe964, data, tail9] - [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 0c0b35ca2..3a4d5cfa8 100644 --- a/config/splat.ov_SC02_003.yaml +++ b/config/splat.ov_SC02_003.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC02_003_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC02_003_after] - [0x32cd4, c, ov_SC02_003_jr_8015AE2C] + - [0x42a14, c, ov_SC02_003_jr_8016AB6C] - [0x4b364, c, ov_SC02_003_jr_801734BC] - [0x50be8, c, ov_SC02_003_jr_80178D40] - [0x57b58, c, ov_SC02_003_jr_8017FCB0] @@ -111,12 +112,14 @@ segments: - [0xbe1fc, data, tail4] - [0xbe200, .rodata, ov_SC02_003_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbe21c, data, tail5] + - [0xbe274, .rodata, ov_SC02_003_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xbe294, data, tail6] - [0xbe314, .rodata, ov_SC02_003_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe328, data, tail6] + - [0xbe328, data, tail7] - [0xbe4d0, .rodata, ov_SC02_003_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe648, data, tail7] + - [0xbe648, data, tail8] - [0xbe944, .rodata, ov_SC02_003_jr_8017FCB0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe964, data, tail8] + - [0xbe964, data, tail9] - [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 0139650bc..47f92b538 100644 --- a/config/splat.ov_SC02_004.yaml +++ b/config/splat.ov_SC02_004.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC02_004_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC02_004_after] - [0x32cd4, c, ov_SC02_004_jr_8015AE2C] + - [0x42a14, c, ov_SC02_004_jr_8016AB6C] - [0x4b364, c, ov_SC02_004_jr_801734BC] - [0x50be8, c, ov_SC02_004_jr_80178D40] - [0x55b38, data, tail] @@ -110,10 +111,12 @@ segments: - [0x6c80c, data, tail4] - [0x6c810, .rodata, ov_SC02_004_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6c82c, data, tail5] + - [0x6c884, .rodata, ov_SC02_004_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6c8a4, data, tail6] - [0x6c924, .rodata, ov_SC02_004_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6c938, data, tail6] + - [0x6c938, data, tail7] - [0x6cae0, .rodata, ov_SC02_004_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6cc58, data, tail7] + - [0x6cc58, data, tail8] - [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 926f81f7d..8d44a5de0 100644 --- a/config/splat.ov_SC02_005.yaml +++ b/config/splat.ov_SC02_005.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC02_005_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC02_005_after] - [0x32cd4, c, ov_SC02_005_jr_8015AE2C] + - [0x42a14, c, ov_SC02_005_jr_8016AB6C] - [0x4b364, c, ov_SC02_005_jr_801734BC] - [0x50be8, c, ov_SC02_005_jr_80178D40] - [0x6873c, data, tail] @@ -110,10 +111,12 @@ segments: - [0xba540, data, tail4] - [0xba544, .rodata, ov_SC02_005_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xba560, data, tail5] + - [0xba5b8, .rodata, ov_SC02_005_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xba5d8, data, tail6] - [0xba658, .rodata, ov_SC02_005_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xba66c, data, tail6] + - [0xba66c, data, tail7] - [0xba814, .rodata, ov_SC02_005_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xba98c, data, tail7] + - [0xba98c, data, tail8] - [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 9d6af74ac..40a3ac027 100644 --- a/config/splat.ov_SC02_011.yaml +++ b/config/splat.ov_SC02_011.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC02_011_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC02_011_after] - [0x32cd4, c, ov_SC02_011_jr_8015AE2C] + - [0x42a14, c, ov_SC02_011_jr_8016AB6C] - [0x4b364, c, ov_SC02_011_jr_801734BC] - [0x50be8, c, ov_SC02_011_jr_80178D40] - [0x68b8c, data, tail] @@ -110,10 +111,12 @@ segments: - [0xc169c, data, tail4] - [0xc16a0, .rodata, ov_SC02_011_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc16bc, data, tail5] + - [0xc1714, .rodata, ov_SC02_011_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc1734, data, tail6] - [0xc17b4, .rodata, ov_SC02_011_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc17c8, data, tail6] + - [0xc17c8, data, tail7] - [0xc1970, .rodata, ov_SC02_011_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc1ae8, data, tail7] + - [0xc1ae8, data, tail8] - [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 87986a274..e918c5f1b 100644 --- a/config/splat.ov_SC02_015.yaml +++ b/config/splat.ov_SC02_015.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC02_015_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC02_015_after] - [0x32cd4, c, ov_SC02_015_jr_8015AE2C] + - [0x42a14, c, ov_SC02_015_jr_8016AB6C] - [0x4b364, c, ov_SC02_015_jr_801734BC] - [0x50be8, c, ov_SC02_015_jr_80178D40] - [0x560a0, data, tail] @@ -110,10 +111,12 @@ segments: - [0x668f4, data, tail4] - [0x668f8, .rodata, ov_SC02_015_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x66914, data, tail5] + - [0x6696c, .rodata, ov_SC02_015_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6698c, data, tail6] - [0x66a0c, .rodata, ov_SC02_015_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x66a20, data, tail6] + - [0x66a20, data, tail7] - [0x66bc8, .rodata, ov_SC02_015_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x66d40, data, tail7] + - [0x66d40, data, tail8] - [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 4a54f4fec..0e1f80fe0 100644 --- a/config/splat.ov_SC02_016.yaml +++ b/config/splat.ov_SC02_016.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC02_016_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC02_016_after] - [0x32cd4, c, ov_SC02_016_jr_8015AE2C] + - [0x42a14, c, ov_SC02_016_jr_8016AB6C] - [0x4b364, c, ov_SC02_016_jr_801734BC] - [0x50be8, c, ov_SC02_016_jr_80178D40] - [0x5c2d8, data, tail] @@ -110,10 +111,12 @@ segments: - [0x8a4d4, data, tail4] - [0x8a4d8, .rodata, ov_SC02_016_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8a4f4, data, tail5] + - [0x8a54c, .rodata, ov_SC02_016_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8a56c, data, tail6] - [0x8a5ec, .rodata, ov_SC02_016_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8a600, data, tail6] + - [0x8a600, data, tail7] - [0x8a7a8, .rodata, ov_SC02_016_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8a920, data, tail7] + - [0x8a920, data, tail8] - [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 28fe5d9d2..cb02acc3f 100644 --- a/config/splat.ov_SC02_017.yaml +++ b/config/splat.ov_SC02_017.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC02_017_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC02_017_after] - [0x32cd4, c, ov_SC02_017_jr_8015AE2C] + - [0x42a14, c, ov_SC02_017_jr_8016AB6C] - [0x4b364, c, ov_SC02_017_jr_801734BC] - [0x50be8, c, ov_SC02_017_jr_80178D40] - [0x62330, data, tail] @@ -110,10 +111,12 @@ segments: - [0xc5cf4, data, tail4] - [0xc5cf8, .rodata, ov_SC02_017_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc5d14, data, tail5] + - [0xc5d6c, .rodata, ov_SC02_017_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc5d8c, data, tail6] - [0xc5e0c, .rodata, ov_SC02_017_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc5e20, data, tail6] + - [0xc5e20, data, tail7] - [0xc5fc8, .rodata, ov_SC02_017_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc6140, data, tail7] + - [0xc6140, data, tail8] - [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 d237a11cc..0949171d3 100644 --- a/config/splat.ov_SC02_021.yaml +++ b/config/splat.ov_SC02_021.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC02_021_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC02_021_after] - [0x32cd4, c, ov_SC02_021_jr_8015AE2C] + - [0x42a14, c, ov_SC02_021_jr_8016AB6C] - [0x4b364, c, ov_SC02_021_jr_801734BC] - [0x50be8, c, ov_SC02_021_jr_80178D40] - [0x57924, data, tail] @@ -110,10 +111,12 @@ segments: - [0x69270, data, tail4] - [0x69274, .rodata, ov_SC02_021_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x69290, data, tail5] + - [0x692e8, .rodata, ov_SC02_021_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x69308, data, tail6] - [0x69388, .rodata, ov_SC02_021_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6939c, data, tail6] + - [0x6939c, data, tail7] - [0x69544, .rodata, ov_SC02_021_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x696bc, data, tail7] + - [0x696bc, data, tail8] - [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 ed64213ee..a0911f4ab 100644 --- a/config/splat.ov_SC02_026.yaml +++ b/config/splat.ov_SC02_026.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC02_026_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC02_026_after] - [0x32cd4, c, ov_SC02_026_jr_8015AE2C] + - [0x42a14, c, ov_SC02_026_jr_8016AB6C] - [0x4b364, c, ov_SC02_026_jr_801734BC] - [0x50be8, c, ov_SC02_026_jr_80178D40] - [0x5df78, data, tail] @@ -110,10 +111,12 @@ segments: - [0xa66a4, data, tail4] - [0xa66a8, .rodata, ov_SC02_026_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa66c4, data, tail5] + - [0xa671c, .rodata, ov_SC02_026_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa673c, data, tail6] - [0xa67bc, .rodata, ov_SC02_026_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa67d0, data, tail6] + - [0xa67d0, data, tail7] - [0xa6978, .rodata, ov_SC02_026_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa6af0, data, tail7] + - [0xa6af0, data, tail8] - [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 4ee94f85c..5c9eb6bf0 100644 --- a/config/splat.ov_SC02_027.yaml +++ b/config/splat.ov_SC02_027.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC02_027_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC02_027_after] - [0x32cd4, c, ov_SC02_027_jr_8015AE2C] + - [0x42a14, c, ov_SC02_027_jr_8016AB6C] - [0x4b364, c, ov_SC02_027_jr_801734BC] - [0x50be8, c, ov_SC02_027_jr_80178D40] - [0x6309c, data, tail] @@ -110,10 +111,12 @@ segments: - [0xb0410, data, tail4] - [0xb0414, .rodata, ov_SC02_027_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xb0430, data, tail5] + - [0xb0488, .rodata, ov_SC02_027_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xb04a8, data, tail6] - [0xb0528, .rodata, ov_SC02_027_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb053c, data, tail6] + - [0xb053c, data, tail7] - [0xb06e4, .rodata, ov_SC02_027_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb085c, data, tail7] + - [0xb085c, data, tail8] - [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 78cebbfae..6f83f7921 100644 --- a/config/splat.ov_SC02_028.yaml +++ b/config/splat.ov_SC02_028.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC02_028_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC02_028_after] - [0x32cd4, c, ov_SC02_028_jr_8015AE2C] + - [0x42a14, c, ov_SC02_028_jr_8016AB6C] - [0x4b364, c, ov_SC02_028_jr_801734BC] - [0x50be8, c, ov_SC02_028_jr_80178D40] - [0x632a0, data, tail] @@ -110,10 +111,12 @@ segments: - [0xa9394, data, tail4] - [0xa9398, .rodata, ov_SC02_028_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa93b4, data, tail5] + - [0xa940c, .rodata, ov_SC02_028_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa942c, data, tail6] - [0xa94ac, .rodata, ov_SC02_028_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa94c0, data, tail6] + - [0xa94c0, data, tail7] - [0xa9668, .rodata, ov_SC02_028_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa97e0, data, tail7] + - [0xa97e0, data, tail8] - [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 649c47f29..6b6a46d9d 100644 --- a/config/splat.ov_SC02_031.yaml +++ b/config/splat.ov_SC02_031.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC02_031_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC02_031_after] - [0x32cd4, c, ov_SC02_031_jr_8015AE2C] + - [0x42a14, c, ov_SC02_031_jr_8016AB6C] - [0x4b364, c, ov_SC02_031_jr_801734BC] - [0x50be8, c, ov_SC02_031_jr_80178D40] - [0x5cacc, data, tail] @@ -110,10 +111,12 @@ segments: - [0x8db90, data, tail4] - [0x8db94, .rodata, ov_SC02_031_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8dbb0, data, tail5] + - [0x8dc08, .rodata, ov_SC02_031_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8dc28, data, tail6] - [0x8dca8, .rodata, ov_SC02_031_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8dcbc, data, tail6] + - [0x8dcbc, data, tail7] - [0x8de64, .rodata, ov_SC02_031_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8dfdc, data, tail7] + - [0x8dfdc, data, tail8] - [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 27a81e5fd..bf80cce26 100644 --- a/config/splat.ov_SC02_035.yaml +++ b/config/splat.ov_SC02_035.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC02_035_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC02_035_after] - [0x32cd4, c, ov_SC02_035_jr_8015AE2C] + - [0x42a14, c, ov_SC02_035_jr_8016AB6C] - [0x4b364, c, ov_SC02_035_jr_801734BC] - [0x50be8, c, ov_SC02_035_jr_80178D40] - [0x5c32c, data, tail] @@ -110,10 +111,12 @@ segments: - [0x94e58, data, tail4] - [0x94e5c, .rodata, ov_SC02_035_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x94e78, data, tail5] + - [0x94ed0, .rodata, ov_SC02_035_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x94ef0, data, tail6] - [0x94f70, .rodata, ov_SC02_035_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x94f84, data, tail6] + - [0x94f84, data, tail7] - [0x9512c, .rodata, ov_SC02_035_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x952a4, data, tail7] + - [0x952a4, data, tail8] - [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 9e2cb7901..b478c1071 100644 --- a/config/splat.ov_SC02_039.yaml +++ b/config/splat.ov_SC02_039.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC02_039_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC02_039_after] - [0x32cd4, c, ov_SC02_039_jr_8015AE2C] + - [0x42a14, c, ov_SC02_039_jr_8016AB6C] - [0x4b364, c, ov_SC02_039_jr_801734BC] - [0x50be8, c, ov_SC02_039_jr_80178D40] - [0x56f58, data, tail] @@ -110,10 +111,12 @@ segments: - [0x77244, data, tail4] - [0x77248, .rodata, ov_SC02_039_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x77264, data, tail5] + - [0x772bc, .rodata, ov_SC02_039_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x772dc, data, tail6] - [0x7735c, .rodata, ov_SC02_039_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77370, data, tail6] + - [0x77370, data, tail7] - [0x77518, .rodata, ov_SC02_039_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77690, data, tail7] + - [0x77690, data, tail8] - [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 2d0675149..da4739c55 100644 --- a/config/splat.ov_SC02_041.yaml +++ b/config/splat.ov_SC02_041.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC02_041_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC02_041_after] - [0x32cd4, c, ov_SC02_041_jr_8015AE2C] + - [0x42a14, c, ov_SC02_041_jr_8016AB6C] - [0x4b364, c, ov_SC02_041_jr_801734BC] - [0x50be8, c, ov_SC02_041_jr_80178D40] - [0x5cc28, data, tail] @@ -110,10 +111,12 @@ segments: - [0x8f5b0, data, tail4] - [0x8f5b4, .rodata, ov_SC02_041_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8f5d0, data, tail5] + - [0x8f628, .rodata, ov_SC02_041_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8f648, data, tail6] - [0x8f6c8, .rodata, ov_SC02_041_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8f6dc, data, tail6] + - [0x8f6dc, data, tail7] - [0x8f884, .rodata, ov_SC02_041_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8f9fc, data, tail7] + - [0x8f9fc, data, tail8] - [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 d39e1710f..f1b7f16d2 100644 --- a/config/splat.ov_SC03_001.yaml +++ b/config/splat.ov_SC03_001.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC03_001_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_001_after] - [0x32cd4, c, ov_SC03_001_jr_8015AE2C] + - [0x42a14, c, ov_SC03_001_jr_8016AB6C] - [0x4b364, c, ov_SC03_001_jr_801734BC] - [0x50be8, c, ov_SC03_001_jr_80178D40] - [0x650c8, data, tail] @@ -110,10 +111,12 @@ segments: - [0xc46d0, data, tail4] - [0xc46d4, .rodata, ov_SC03_001_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc46f0, data, tail5] + - [0xc4748, .rodata, ov_SC03_001_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc4768, data, tail6] - [0xc47e8, .rodata, ov_SC03_001_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc47fc, data, tail6] + - [0xc47fc, data, tail7] - [0xc49a4, .rodata, ov_SC03_001_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc4b1c, data, tail7] + - [0xc4b1c, data, tail8] - [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 2d3363e65..fb0262e24 100644 --- a/config/splat.ov_SC03_002.yaml +++ b/config/splat.ov_SC03_002.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC03_002_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_002_after] - [0x32cd4, c, ov_SC03_002_jr_8015AE2C] + - [0x42a14, c, ov_SC03_002_jr_8016AB6C] - [0x4b364, c, ov_SC03_002_jr_801734BC] - [0x50be8, c, ov_SC03_002_jr_80178D40] - [0x5d358, data, tail] @@ -110,10 +111,12 @@ segments: - [0xa1c2c, data, tail4] - [0xa1c30, .rodata, ov_SC03_002_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa1c4c, data, tail5] + - [0xa1ca4, .rodata, ov_SC03_002_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa1cc4, data, tail6] - [0xa1d44, .rodata, ov_SC03_002_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa1d58, data, tail6] + - [0xa1d58, data, tail7] - [0xa1f00, .rodata, ov_SC03_002_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa2078, data, tail7] + - [0xa2078, data, tail8] - [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 e8d09451a..3d9223027 100644 --- a/config/splat.ov_SC03_003.yaml +++ b/config/splat.ov_SC03_003.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC03_003_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_003_after] - [0x32cd4, c, ov_SC03_003_jr_8015AE2C] + - [0x42a14, c, ov_SC03_003_jr_8016AB6C] - [0x4b364, c, ov_SC03_003_jr_801734BC] - [0x50be8, c, ov_SC03_003_jr_80178D40] - [0x57120, data, tail] @@ -110,10 +111,12 @@ segments: - [0x65fac, data, tail4] - [0x65fb0, .rodata, ov_SC03_003_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x65fcc, data, tail5] + - [0x66024, .rodata, ov_SC03_003_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x66044, data, tail6] - [0x660c4, .rodata, ov_SC03_003_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x660d8, data, tail6] + - [0x660d8, data, tail7] - [0x66280, .rodata, ov_SC03_003_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x663f8, data, tail7] + - [0x663f8, data, tail8] - [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 a031c1237..a24af7588 100644 --- a/config/splat.ov_SC03_006.yaml +++ b/config/splat.ov_SC03_006.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC03_006_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_006_after] - [0x32cd4, c, ov_SC03_006_jr_8015AE2C] + - [0x42a14, c, ov_SC03_006_jr_8016AB6C] - [0x4b364, c, ov_SC03_006_jr_801734BC] - [0x50be8, c, ov_SC03_006_jr_80178D40] - [0x6443c, data, tail] @@ -110,10 +111,12 @@ segments: - [0xcd868, data, tail4] - [0xcd86c, .rodata, ov_SC03_006_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xcd888, data, tail5] + - [0xcd8e0, .rodata, ov_SC03_006_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xcd900, data, tail6] - [0xcd980, .rodata, ov_SC03_006_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xcd994, data, tail6] + - [0xcd994, data, tail7] - [0xcdb3c, .rodata, ov_SC03_006_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xcdcb4, data, tail7] + - [0xcdcb4, data, tail8] - [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 99ffd67e5..9f7002697 100644 --- a/config/splat.ov_SC03_007.yaml +++ b/config/splat.ov_SC03_007.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC03_007_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_007_after] - [0x32cd4, c, ov_SC03_007_jr_8015AE2C] + - [0x42a14, c, ov_SC03_007_jr_8016AB6C] - [0x4b364, c, ov_SC03_007_jr_801734BC] - [0x50be8, c, ov_SC03_007_jr_80178D40] - [0x5f234, data, tail] @@ -110,10 +111,12 @@ segments: - [0xc01f0, data, tail4] - [0xc01f4, .rodata, ov_SC03_007_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc0210, data, tail5] + - [0xc0268, .rodata, ov_SC03_007_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc0288, data, tail6] - [0xc0308, .rodata, ov_SC03_007_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc031c, data, tail6] + - [0xc031c, data, tail7] - [0xc04c4, .rodata, ov_SC03_007_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc063c, data, tail7] + - [0xc063c, data, tail8] - [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 a49d2d64d..211e3b6f5 100644 --- a/config/splat.ov_SC03_010.yaml +++ b/config/splat.ov_SC03_010.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC03_010_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_010_after] - [0x32cd4, c, ov_SC03_010_jr_8015AE2C] + - [0x42a14, c, ov_SC03_010_jr_8016AB6C] - [0x4b364, c, ov_SC03_010_jr_801734BC] - [0x50be8, c, ov_SC03_010_jr_80178D40] - [0x57d54, data, tail] @@ -110,10 +111,12 @@ segments: - [0x764cc, data, tail4] - [0x764d0, .rodata, ov_SC03_010_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x764ec, data, tail5] + - [0x76544, .rodata, ov_SC03_010_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x76564, data, tail6] - [0x765e4, .rodata, ov_SC03_010_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x765f8, data, tail6] + - [0x765f8, data, tail7] - [0x767a0, .rodata, ov_SC03_010_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x76918, data, tail7] + - [0x76918, data, tail8] - [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 4dd7c5e59..dea076d83 100644 --- a/config/splat.ov_SC03_011.yaml +++ b/config/splat.ov_SC03_011.yaml @@ -97,6 +97,7 @@ segments: - [0x1CA44, c, ov_SC03_011_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_011_after] - [0x32cd4, c, ov_SC03_011_jr_8015AE2C] + - [0x42a14, c, ov_SC03_011_jr_8016AB6C] - [0x4b364, c, ov_SC03_011_jr_801734BC] - [0x50be8, c, ov_SC03_011_jr_80178D40] - [0x590c4, data, tail] @@ -106,10 +107,12 @@ segments: - [0x7873c, data, tail3] - [0x78740, .rodata, ov_SC03_011_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7875c, data, tail4] + - [0x787b4, .rodata, ov_SC03_011_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x787d4, data, tail5] - [0x78854, .rodata, ov_SC03_011_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x78868, data, tail5] + - [0x78868, data, tail6] - [0x78a10, .rodata, ov_SC03_011_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x78b88, data, tail6] + - [0x78b88, data, tail7] - [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 ac553fd3e..40b4d906d 100644 --- a/config/splat.ov_SC03_012.yaml +++ b/config/splat.ov_SC03_012.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC03_012_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_012_after] - [0x32cd4, c, ov_SC03_012_jr_8015AE2C] + - [0x42a14, c, ov_SC03_012_jr_8016AB6C] - [0x4b364, c, ov_SC03_012_jr_801734BC] - [0x50be8, c, ov_SC03_012_jr_80178D40] - [0x55fa4, data, tail] @@ -110,10 +111,12 @@ segments: - [0x6b598, data, tail4] - [0x6b59c, .rodata, ov_SC03_012_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6b5b8, data, tail5] + - [0x6b610, .rodata, ov_SC03_012_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6b630, data, tail6] - [0x6b6b0, .rodata, ov_SC03_012_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6b6c4, data, tail6] + - [0x6b6c4, data, tail7] - [0x6b86c, .rodata, ov_SC03_012_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6b9e4, data, tail7] + - [0x6b9e4, data, tail8] - [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 7e9dd1761..2d6cc36de 100644 --- a/config/splat.ov_SC03_013.yaml +++ b/config/splat.ov_SC03_013.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC03_013_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_013_after] - [0x32cd4, c, ov_SC03_013_jr_8015AE2C] + - [0x42a14, c, ov_SC03_013_jr_8016AB6C] - [0x4b364, c, ov_SC03_013_jr_801734BC] - [0x50be8, c, ov_SC03_013_jr_80178D40] - [0x58d8c, data, tail] @@ -110,10 +111,12 @@ segments: - [0x83830, data, tail4] - [0x83834, .rodata, ov_SC03_013_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x83850, data, tail5] + - [0x838a8, .rodata, ov_SC03_013_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x838c8, data, tail6] - [0x83948, .rodata, ov_SC03_013_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8395c, data, tail6] + - [0x8395c, data, tail7] - [0x83b04, .rodata, ov_SC03_013_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x83c7c, data, tail7] + - [0x83c7c, data, tail8] - [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 429555cc9..a581432d0 100644 --- a/config/splat.ov_SC03_014.yaml +++ b/config/splat.ov_SC03_014.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC03_014_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_014_after] - [0x32cd4, c, ov_SC03_014_jr_8015AE2C] + - [0x42a14, c, ov_SC03_014_jr_8016AB6C] - [0x4b364, c, ov_SC03_014_jr_801734BC] - [0x50be8, c, ov_SC03_014_jr_80178D40] - [0x633c8, data, tail] @@ -110,10 +111,12 @@ segments: - [0xc0c04, data, tail4] - [0xc0c08, .rodata, ov_SC03_014_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc0c24, data, tail5] + - [0xc0c7c, .rodata, ov_SC03_014_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc0c9c, data, tail6] - [0xc0d1c, .rodata, ov_SC03_014_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc0d30, data, tail6] + - [0xc0d30, data, tail7] - [0xc0ed8, .rodata, ov_SC03_014_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc1050, data, tail7] + - [0xc1050, data, tail8] - [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 b56473a6b..5146ac5a9 100644 --- a/config/splat.ov_SC03_015.yaml +++ b/config/splat.ov_SC03_015.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC03_015_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_015_after] - [0x32cd4, c, ov_SC03_015_jr_8015AE2C] + - [0x42a14, c, ov_SC03_015_jr_8016AB6C] - [0x4b364, c, ov_SC03_015_jr_801734BC] - [0x50be8, c, ov_SC03_015_jr_80178D40] - [0x633c8, data, tail] @@ -110,10 +111,12 @@ segments: - [0xc0c04, data, tail4] - [0xc0c08, .rodata, ov_SC03_015_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc0c24, data, tail5] + - [0xc0c7c, .rodata, ov_SC03_015_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc0c9c, data, tail6] - [0xc0d1c, .rodata, ov_SC03_015_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc0d30, data, tail6] + - [0xc0d30, data, tail7] - [0xc0ed8, .rodata, ov_SC03_015_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc1050, data, tail7] + - [0xc1050, data, tail8] - [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 9cb963e3a..1a8f1a25c 100644 --- a/config/splat.ov_SC03_023.yaml +++ b/config/splat.ov_SC03_023.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC03_023_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_023_after] - [0x32cd4, c, ov_SC03_023_jr_8015AE2C] + - [0x42a14, c, ov_SC03_023_jr_8016AB6C] - [0x4b364, c, ov_SC03_023_jr_801734BC] - [0x50be8, c, ov_SC03_023_jr_80178D40] - [0x56d44, data, tail] @@ -110,10 +111,12 @@ segments: - [0x6f1dc, data, tail4] - [0x6f1e0, .rodata, ov_SC03_023_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6f1fc, data, tail5] + - [0x6f254, .rodata, ov_SC03_023_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6f274, data, tail6] - [0x6f2f4, .rodata, ov_SC03_023_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6f308, data, tail6] + - [0x6f308, data, tail7] - [0x6f4b0, .rodata, ov_SC03_023_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6f628, data, tail7] + - [0x6f628, data, tail8] - [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 9488518de..3871da70c 100644 --- a/config/splat.ov_SC03_024.yaml +++ b/config/splat.ov_SC03_024.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC03_024_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_024_after] - [0x32cd4, c, ov_SC03_024_jr_8015AE2C] + - [0x42a14, c, ov_SC03_024_jr_8016AB6C] - [0x4b364, c, ov_SC03_024_jr_801734BC] - [0x50be8, c, ov_SC03_024_jr_80178D40] - [0x5ed68, data, tail] @@ -110,10 +111,12 @@ segments: - [0x97664, data, tail4] - [0x97668, .rodata, ov_SC03_024_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x97684, data, tail5] + - [0x976dc, .rodata, ov_SC03_024_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x976fc, data, tail6] - [0x9777c, .rodata, ov_SC03_024_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x97790, data, tail6] + - [0x97790, data, tail7] - [0x97938, .rodata, ov_SC03_024_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x97ab0, data, tail7] + - [0x97ab0, data, tail8] - [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 6ce967ccc..7626ed1b1 100644 --- a/config/splat.ov_SC03_028.yaml +++ b/config/splat.ov_SC03_028.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC03_028_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_028_after] - [0x32cd4, c, ov_SC03_028_jr_8015AE2C] + - [0x42a14, c, ov_SC03_028_jr_8016AB6C] - [0x4b364, c, ov_SC03_028_jr_801734BC] - [0x50be8, c, ov_SC03_028_jr_80178D40] - [0x63834, data, tail] @@ -110,10 +111,12 @@ segments: - [0xc17ec, data, tail4] - [0xc17f0, .rodata, ov_SC03_028_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc180c, data, tail5] + - [0xc1864, .rodata, ov_SC03_028_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc1884, data, tail6] - [0xc1904, .rodata, ov_SC03_028_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc1918, data, tail6] + - [0xc1918, data, tail7] - [0xc1ac0, .rodata, ov_SC03_028_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc1c38, data, tail7] + - [0xc1c38, data, tail8] - [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 67ad91396..20c790920 100644 --- a/config/splat.ov_SC03_029.yaml +++ b/config/splat.ov_SC03_029.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC03_029_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_029_after] - [0x32cd4, c, ov_SC03_029_jr_8015AE2C] + - [0x42a14, c, ov_SC03_029_jr_8016AB6C] - [0x4b364, c, ov_SC03_029_jr_801734BC] - [0x50be8, c, ov_SC03_029_jr_80178D40] - [0x5f66c, data, tail] @@ -110,10 +111,12 @@ segments: - [0xaf920, data, tail4] - [0xaf924, .rodata, ov_SC03_029_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xaf940, data, tail5] + - [0xaf998, .rodata, ov_SC03_029_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xaf9b8, data, tail6] - [0xafa38, .rodata, ov_SC03_029_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xafa4c, data, tail6] + - [0xafa4c, data, tail7] - [0xafbf4, .rodata, ov_SC03_029_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xafd6c, data, tail7] + - [0xafd6c, data, tail8] - [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 67705047b..576aac69f 100644 --- a/config/splat.ov_SC03_030.yaml +++ b/config/splat.ov_SC03_030.yaml @@ -97,6 +97,7 @@ segments: - [0x1CA44, c, ov_SC03_030_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_030_after] - [0x32cd4, c, ov_SC03_030_jr_8015AE2C] + - [0x42a14, c, ov_SC03_030_jr_8016AB6C] - [0x4b364, c, ov_SC03_030_jr_801734BC] - [0x50be8, c, ov_SC03_030_jr_80178D40] - [0x59ca8, data, tail] @@ -106,10 +107,12 @@ segments: - [0xb7fc4, data, tail3] - [0xb7fc8, .rodata, ov_SC03_030_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xb7fe4, data, tail4] + - [0xb803c, .rodata, ov_SC03_030_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xb805c, data, tail5] - [0xb80dc, .rodata, ov_SC03_030_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb80f0, data, tail5] + - [0xb80f0, data, tail6] - [0xb8298, .rodata, ov_SC03_030_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb8410, data, tail6] + - [0xb8410, data, tail7] - [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 b87faf76e..41e30bb2b 100644 --- a/config/splat.ov_SC03_031.yaml +++ b/config/splat.ov_SC03_031.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC03_031_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_031_after] - [0x32cd4, c, ov_SC03_031_jr_8015AE2C] + - [0x42a14, c, ov_SC03_031_jr_8016AB6C] - [0x4b364, c, ov_SC03_031_jr_801734BC] - [0x50be8, c, ov_SC03_031_jr_80178D40] - [0x5a1c4, data, tail] @@ -110,10 +111,12 @@ segments: - [0x9c468, data, tail4] - [0x9c46c, .rodata, ov_SC03_031_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9c488, data, tail5] + - [0x9c4e0, .rodata, ov_SC03_031_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9c500, data, tail6] - [0x9c580, .rodata, ov_SC03_031_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9c594, data, tail6] + - [0x9c594, data, tail7] - [0x9c73c, .rodata, ov_SC03_031_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9c8b4, data, tail7] + - [0x9c8b4, data, tail8] - [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 0e72433ea..a185e88d9 100644 --- a/config/splat.ov_SC03_089.yaml +++ b/config/splat.ov_SC03_089.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC03_089_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_089_after] - [0x32cd4, c, ov_SC03_089_jr_8015AE2C] + - [0x42a14, c, ov_SC03_089_jr_8016AB6C] - [0x4b364, c, ov_SC03_089_jr_801734BC] - [0x50be8, c, ov_SC03_089_jr_80178D40] - [0x614c0, data, tail] @@ -110,10 +111,12 @@ segments: - [0x9ccd4, data, tail4] - [0x9ccd8, .rodata, ov_SC03_089_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9ccf4, data, tail5] + - [0x9cd4c, .rodata, ov_SC03_089_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9cd6c, data, tail6] - [0x9cdec, .rodata, ov_SC03_089_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9ce00, data, tail6] + - [0x9ce00, data, tail7] - [0x9cfa8, .rodata, ov_SC03_089_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9d120, data, tail7] + - [0x9d120, data, tail8] - [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 9669efe40..7d13b8960 100644 --- a/config/splat.ov_SC03_090.yaml +++ b/config/splat.ov_SC03_090.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC03_090_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_090_after] - [0x32cd4, c, ov_SC03_090_jr_8015AE2C] + - [0x42a14, c, ov_SC03_090_jr_8016AB6C] - [0x4b364, c, ov_SC03_090_jr_801734BC] - [0x50be8, c, ov_SC03_090_jr_80178D40] - [0x638e4, data, tail] @@ -110,10 +111,12 @@ segments: - [0xa2140, data, tail4] - [0xa2144, .rodata, ov_SC03_090_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa2160, data, tail5] + - [0xa21b8, .rodata, ov_SC03_090_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa21d8, data, tail6] - [0xa2258, .rodata, ov_SC03_090_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa226c, data, tail6] + - [0xa226c, data, tail7] - [0xa2414, .rodata, ov_SC03_090_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa258c, data, tail7] + - [0xa258c, data, tail8] - [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 42c0abc67..e6c450915 100644 --- a/config/splat.ov_SC03_091.yaml +++ b/config/splat.ov_SC03_091.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC03_091_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_091_after] - [0x32cd4, c, ov_SC03_091_jr_8015AE2C] + - [0x42a14, c, ov_SC03_091_jr_8016AB6C] - [0x4b364, c, ov_SC03_091_jr_801734BC] - [0x50be8, c, ov_SC03_091_jr_80178D40] - [0x5a110, c, ov_SC03_091_jr_80182268] @@ -111,10 +112,12 @@ segments: - [0xa880c, data, tail4] - [0xa8810, .rodata, ov_SC03_091_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa882c, data, tail5] + - [0xa8884, .rodata, ov_SC03_091_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa88a4, data, tail6] - [0xa8924, .rodata, ov_SC03_091_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa8938, data, tail6] + - [0xa8938, data, tail7] - [0xa8ae0, .rodata, ov_SC03_091_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa8c58, data, tail7] + - [0xa8c58, data, tail8] - [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 9fba375a8..3096e3d56 100644 --- a/config/splat.ov_SC03_092.yaml +++ b/config/splat.ov_SC03_092.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC03_092_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_092_after] - [0x32cd4, c, ov_SC03_092_jr_8015AE2C] + - [0x42a14, c, ov_SC03_092_jr_8016AB6C] - [0x4b364, c, ov_SC03_092_jr_801734BC] - [0x50be8, c, ov_SC03_092_jr_80178D40] - [0x5cb5c, data, tail] @@ -110,10 +111,12 @@ segments: - [0x893e4, data, tail4] - [0x893e8, .rodata, ov_SC03_092_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x89404, data, tail5] + - [0x8945c, .rodata, ov_SC03_092_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8947c, data, tail6] - [0x894fc, .rodata, ov_SC03_092_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x89510, data, tail6] + - [0x89510, data, tail7] - [0x896b8, .rodata, ov_SC03_092_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x89830, data, tail7] + - [0x89830, data, tail8] - [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 7eb5096ec..48c3abf4c 100644 --- a/config/splat.ov_SC03_093.yaml +++ b/config/splat.ov_SC03_093.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC03_093_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_093_after] - [0x32cd4, c, ov_SC03_093_jr_8015AE2C] + - [0x42a14, c, ov_SC03_093_jr_8016AB6C] - [0x4b364, c, ov_SC03_093_jr_801734BC] - [0x50be8, c, ov_SC03_093_jr_80178D40] - [0x5dd34, data, tail] @@ -110,10 +111,12 @@ segments: - [0xa2838, data, tail4] - [0xa283c, .rodata, ov_SC03_093_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa2858, data, tail5] + - [0xa28b0, .rodata, ov_SC03_093_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa28d0, data, tail6] - [0xa2950, .rodata, ov_SC03_093_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa2964, data, tail6] + - [0xa2964, data, tail7] - [0xa2b0c, .rodata, ov_SC03_093_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa2c84, data, tail7] + - [0xa2c84, data, tail8] - [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 49efc79d9..4d587de21 100644 --- a/config/splat.ov_SC03_094.yaml +++ b/config/splat.ov_SC03_094.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC03_094_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_094_after] - [0x32cd4, c, ov_SC03_094_jr_8015AE2C] + - [0x42a14, c, ov_SC03_094_jr_8016AB6C] - [0x4b364, c, ov_SC03_094_jr_801734BC] - [0x50be8, c, ov_SC03_094_jr_80178D40] - [0x5f730, data, tail] @@ -110,10 +111,12 @@ segments: - [0xa9674, data, tail4] - [0xa9678, .rodata, ov_SC03_094_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa9694, data, tail5] + - [0xa96ec, .rodata, ov_SC03_094_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa970c, data, tail6] - [0xa978c, .rodata, ov_SC03_094_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa97a0, data, tail6] + - [0xa97a0, data, tail7] - [0xa9948, .rodata, ov_SC03_094_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa9ac0, data, tail7] + - [0xa9ac0, data, tail8] - [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 ce1d3c764..a4203fdbb 100644 --- a/config/splat.ov_SC03_095.yaml +++ b/config/splat.ov_SC03_095.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC03_095_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_095_after] - [0x32cd4, c, ov_SC03_095_jr_8015AE2C] + - [0x42a14, c, ov_SC03_095_jr_8016AB6C] - [0x4b364, c, ov_SC03_095_jr_801734BC] - [0x50be8, c, ov_SC03_095_jr_80178D40] - [0x58d90, data, tail] @@ -110,10 +111,12 @@ segments: - [0x722a0, data, tail4] - [0x722a4, .rodata, ov_SC03_095_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x722c0, data, tail5] + - [0x72318, .rodata, ov_SC03_095_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x72338, data, tail6] - [0x723b8, .rodata, ov_SC03_095_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x723cc, data, tail6] + - [0x723cc, data, tail7] - [0x72574, .rodata, ov_SC03_095_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x726ec, data, tail7] + - [0x726ec, data, tail8] - [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 954e5c237..c82f1a72a 100644 --- a/config/splat.ov_SC03_096.yaml +++ b/config/splat.ov_SC03_096.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC03_096_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_096_after] - [0x32cd4, c, ov_SC03_096_jr_8015AE2C] + - [0x42a14, c, ov_SC03_096_jr_8016AB6C] - [0x4b364, c, ov_SC03_096_jr_801734BC] - [0x50be8, c, ov_SC03_096_jr_80178D40] - [0x58910, data, tail] @@ -110,10 +111,12 @@ segments: - [0x70d54, data, tail4] - [0x70d58, .rodata, ov_SC03_096_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x70d74, data, tail5] + - [0x70dcc, .rodata, ov_SC03_096_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x70dec, data, tail6] - [0x70e6c, .rodata, ov_SC03_096_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x70e80, data, tail6] + - [0x70e80, data, tail7] - [0x71028, .rodata, ov_SC03_096_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x711a0, data, tail7] + - [0x711a0, data, tail8] - [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 bd30458d9..c9bf9229c 100644 --- a/config/splat.ov_SC03_097.yaml +++ b/config/splat.ov_SC03_097.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC03_097_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_097_after] - [0x32cd4, c, ov_SC03_097_jr_8015AE2C] + - [0x42a14, c, ov_SC03_097_jr_8016AB6C] - [0x4b364, c, ov_SC03_097_jr_801734BC] - [0x50be8, c, ov_SC03_097_jr_80178D40] - [0x5dcf0, data, tail] @@ -110,10 +111,12 @@ segments: - [0x80dc4, data, tail4] - [0x80dc8, .rodata, ov_SC03_097_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x80de4, data, tail5] + - [0x80e3c, .rodata, ov_SC03_097_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x80e5c, data, tail6] - [0x80edc, .rodata, ov_SC03_097_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x80ef0, data, tail6] + - [0x80ef0, data, tail7] - [0x81098, .rodata, ov_SC03_097_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x81210, data, tail7] + - [0x81210, data, tail8] - [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 63f6ca2e2..1a51d48e5 100644 --- a/config/splat.ov_SC03_098.yaml +++ b/config/splat.ov_SC03_098.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC03_098_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_098_after] - [0x32cd4, c, ov_SC03_098_jr_8015AE2C] + - [0x42a14, c, ov_SC03_098_jr_8016AB6C] - [0x4b364, c, ov_SC03_098_jr_801734BC] - [0x50be8, c, ov_SC03_098_jr_80178D40] - [0x5d17c, data, tail] @@ -110,10 +111,12 @@ segments: - [0x9ba48, data, tail4] - [0x9ba4c, .rodata, ov_SC03_098_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9ba68, data, tail5] + - [0x9bac0, .rodata, ov_SC03_098_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9bae0, data, tail6] - [0x9bb60, .rodata, ov_SC03_098_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9bb74, data, tail6] + - [0x9bb74, data, tail7] - [0x9bd1c, .rodata, ov_SC03_098_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9be94, data, tail7] + - [0x9be94, data, tail8] - [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 0cae406b1..f10318542 100644 --- a/config/splat.ov_SC03_099.yaml +++ b/config/splat.ov_SC03_099.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC03_099_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_099_after] - [0x32cd4, c, ov_SC03_099_jr_8015AE2C] + - [0x42a14, c, ov_SC03_099_jr_8016AB6C] - [0x4b364, c, ov_SC03_099_jr_801734BC] - [0x50be8, c, ov_SC03_099_jr_80178D40] - [0x5b27c, data, tail] @@ -110,10 +111,12 @@ segments: - [0x9571c, data, tail4] - [0x95720, .rodata, ov_SC03_099_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9573c, data, tail5] + - [0x95794, .rodata, ov_SC03_099_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x957b4, data, tail6] - [0x95834, .rodata, ov_SC03_099_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x95848, data, tail6] + - [0x95848, data, tail7] - [0x959f0, .rodata, ov_SC03_099_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x95b68, data, tail7] + - [0x95b68, data, tail8] - [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 887d7f949..4a4f4bc3f 100644 --- a/config/splat.ov_SC03_100.yaml +++ b/config/splat.ov_SC03_100.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC03_100_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_100_after] - [0x32cd4, c, ov_SC03_100_jr_8015AE2C] + - [0x42a14, c, ov_SC03_100_jr_8016AB6C] - [0x4b364, c, ov_SC03_100_jr_801734BC] - [0x50be8, c, ov_SC03_100_jr_80178D40] - [0x5c748, data, tail] @@ -110,10 +111,12 @@ segments: - [0x9e9a0, data, tail4] - [0x9e9a4, .rodata, ov_SC03_100_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9e9c0, data, tail5] + - [0x9ea18, .rodata, ov_SC03_100_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9ea38, data, tail6] - [0x9eab8, .rodata, ov_SC03_100_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9eacc, data, tail6] + - [0x9eacc, data, tail7] - [0x9ec74, .rodata, ov_SC03_100_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9edec, data, tail7] + - [0x9edec, data, tail8] - [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 4e8cbd308..ccabd026b 100644 --- a/config/splat.ov_SC03_101.yaml +++ b/config/splat.ov_SC03_101.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC03_101_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_101_after] - [0x32cd4, c, ov_SC03_101_jr_8015AE2C] + - [0x42a14, c, ov_SC03_101_jr_8016AB6C] - [0x4b364, c, ov_SC03_101_jr_801734BC] - [0x50be8, c, ov_SC03_101_jr_80178D40] - [0x5b724, data, tail] @@ -110,10 +111,12 @@ segments: - [0x74268, data, tail4] - [0x7426c, .rodata, ov_SC03_101_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x74288, data, tail5] + - [0x742e0, .rodata, ov_SC03_101_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x74300, data, tail6] - [0x74380, .rodata, ov_SC03_101_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x74394, data, tail6] + - [0x74394, data, tail7] - [0x7453c, .rodata, ov_SC03_101_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x746b4, data, tail7] + - [0x746b4, data, tail8] - [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 54e68d0e9..ccf933d04 100644 --- a/config/splat.ov_SC03_102.yaml +++ b/config/splat.ov_SC03_102.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC03_102_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_102_after] - [0x32cd4, c, ov_SC03_102_jr_8015AE2C] + - [0x42a14, c, ov_SC03_102_jr_8016AB6C] - [0x4b364, c, ov_SC03_102_jr_801734BC] - [0x50be8, c, ov_SC03_102_jr_80178D40] - [0x5dfdc, data, tail] @@ -110,10 +111,12 @@ segments: - [0x8fee4, data, tail4] - [0x8fee8, .rodata, ov_SC03_102_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8ff04, data, tail5] + - [0x8ff5c, .rodata, ov_SC03_102_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8ff7c, data, tail6] - [0x8fffc, .rodata, ov_SC03_102_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x90010, data, tail6] + - [0x90010, data, tail7] - [0x901b8, .rodata, ov_SC03_102_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x90330, data, tail7] + - [0x90330, data, tail8] - [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 84d6aade3..f6f48f02e 100644 --- a/config/splat.ov_SC03_103.yaml +++ b/config/splat.ov_SC03_103.yaml @@ -97,6 +97,7 @@ segments: - [0x1CA44, c, ov_SC03_103_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_103_after] - [0x32cd4, c, ov_SC03_103_jr_8015AE2C] + - [0x42a14, c, ov_SC03_103_jr_8016AB6C] - [0x4b364, c, ov_SC03_103_jr_801734BC] - [0x50be8, c, ov_SC03_103_jr_80178D40] - [0x5bf8c, data, tail] @@ -106,10 +107,12 @@ segments: - [0x9b098, data, tail3] - [0x9b09c, .rodata, ov_SC03_103_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9b0b8, data, tail4] + - [0x9b110, .rodata, ov_SC03_103_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9b130, data, tail5] - [0x9b1b0, .rodata, ov_SC03_103_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9b1c4, data, tail5] + - [0x9b1c4, data, tail6] - [0x9b36c, .rodata, ov_SC03_103_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9b4e4, data, tail6] + - [0x9b4e4, data, tail7] - [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 183c77a71..48f0da0d8 100644 --- a/config/splat.ov_SC03_104.yaml +++ b/config/splat.ov_SC03_104.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC03_104_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_104_after] - [0x32cd4, c, ov_SC03_104_jr_8015AE2C] + - [0x42a14, c, ov_SC03_104_jr_8016AB6C] - [0x4b364, c, ov_SC03_104_jr_801734BC] - [0x50be8, c, ov_SC03_104_jr_80178D40] - [0x62b1c, data, tail] @@ -110,10 +111,12 @@ segments: - [0x965f8, data, tail4] - [0x965fc, .rodata, ov_SC03_104_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x96618, data, tail5] + - [0x96670, .rodata, ov_SC03_104_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x96690, data, tail6] - [0x96710, .rodata, ov_SC03_104_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x96724, data, tail6] + - [0x96724, data, tail7] - [0x968cc, .rodata, ov_SC03_104_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x96a44, data, tail7] + - [0x96a44, data, tail8] - [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 42a12cbcf..6cdb85757 100644 --- a/config/splat.ov_SC03_105.yaml +++ b/config/splat.ov_SC03_105.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC03_105_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_105_after] - [0x32cd4, c, ov_SC03_105_jr_8015AE2C] + - [0x42a14, c, ov_SC03_105_jr_8016AB6C] - [0x4b364, c, ov_SC03_105_jr_801734BC] - [0x50be8, c, ov_SC03_105_jr_80178D40] - [0x621a4, data, tail] @@ -110,10 +111,12 @@ segments: - [0x8f8f0, data, tail4] - [0x8f8f4, .rodata, ov_SC03_105_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8f910, data, tail5] + - [0x8f968, .rodata, ov_SC03_105_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8f988, data, tail6] - [0x8fa08, .rodata, ov_SC03_105_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8fa1c, data, tail6] + - [0x8fa1c, data, tail7] - [0x8fbc4, .rodata, ov_SC03_105_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8fd3c, data, tail7] + - [0x8fd3c, data, tail8] - [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 22ed46c7c..5b76cfd67 100644 --- a/config/splat.ov_SC03_108.yaml +++ b/config/splat.ov_SC03_108.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC03_108_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_108_after] - [0x32cd4, c, ov_SC03_108_jr_8015AE2C] + - [0x42a14, c, ov_SC03_108_jr_8016AB6C] - [0x4b364, c, ov_SC03_108_jr_801734BC] - [0x50be8, c, ov_SC03_108_jr_80178D40] - [0x58afc, data, tail] @@ -110,10 +111,12 @@ segments: - [0x77df8, data, tail4] - [0x77dfc, .rodata, ov_SC03_108_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x77e18, data, tail5] + - [0x77e70, .rodata, ov_SC03_108_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x77e90, data, tail6] - [0x77f10, .rodata, ov_SC03_108_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77f24, data, tail6] + - [0x77f24, data, tail7] - [0x780cc, .rodata, ov_SC03_108_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x78244, data, tail7] + - [0x78244, data, tail8] - [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 89778ce67..d436d9e1b 100644 --- a/config/splat.ov_SC03_109.yaml +++ b/config/splat.ov_SC03_109.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC03_109_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_109_after] - [0x32cd4, c, ov_SC03_109_jr_8015AE2C] + - [0x42a14, c, ov_SC03_109_jr_8016AB6C] - [0x4b364, c, ov_SC03_109_jr_801734BC] - [0x50be8, c, ov_SC03_109_jr_80178D40] - [0x561a8, data, tail] @@ -110,10 +111,12 @@ segments: - [0x70908, data, tail4] - [0x7090c, .rodata, ov_SC03_109_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x70928, data, tail5] + - [0x70980, .rodata, ov_SC03_109_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x709a0, data, tail6] - [0x70a20, .rodata, ov_SC03_109_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x70a34, data, tail6] + - [0x70a34, data, tail7] - [0x70bdc, .rodata, ov_SC03_109_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x70d54, data, tail7] + - [0x70d54, data, tail8] - [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 f42bc16aa..f15d3d706 100644 --- a/config/splat.ov_SC03_110.yaml +++ b/config/splat.ov_SC03_110.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC03_110_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_110_after] - [0x32cd4, c, ov_SC03_110_jr_8015AE2C] + - [0x42a14, c, ov_SC03_110_jr_8016AB6C] - [0x4b364, c, ov_SC03_110_jr_801734BC] - [0x50be8, c, ov_SC03_110_jr_80178D40] - [0x59bc8, data, tail] @@ -110,10 +111,12 @@ segments: - [0x785a4, data, tail4] - [0x785a8, .rodata, ov_SC03_110_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x785c4, data, tail5] + - [0x7861c, .rodata, ov_SC03_110_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x7863c, data, tail6] - [0x786bc, .rodata, ov_SC03_110_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x786d0, data, tail6] + - [0x786d0, data, tail7] - [0x78878, .rodata, ov_SC03_110_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x789f0, data, tail7] + - [0x789f0, data, tail8] - [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 fbe0de4a4..56733415a 100644 --- a/config/splat.ov_SC03_111.yaml +++ b/config/splat.ov_SC03_111.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC03_111_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_111_after] - [0x32cd4, c, ov_SC03_111_jr_8015AE2C] + - [0x42a14, c, ov_SC03_111_jr_8016AB6C] - [0x4b364, c, ov_SC03_111_jr_801734BC] - [0x50be8, c, ov_SC03_111_jr_80178D40] - [0x5c77c, data, tail] @@ -110,10 +111,12 @@ segments: - [0x8fb24, data, tail4] - [0x8fb28, .rodata, ov_SC03_111_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8fb44, data, tail5] + - [0x8fb9c, .rodata, ov_SC03_111_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8fbbc, data, tail6] - [0x8fc3c, .rodata, ov_SC03_111_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8fc50, data, tail6] + - [0x8fc50, data, tail7] - [0x8fdf8, .rodata, ov_SC03_111_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8ff70, data, tail7] + - [0x8ff70, data, tail8] - [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 9bd0a16dc..12c79b174 100644 --- a/config/splat.ov_SC03_112.yaml +++ b/config/splat.ov_SC03_112.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC03_112_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_112_after] - [0x32cd4, c, ov_SC03_112_jr_8015AE2C] + - [0x42a14, c, ov_SC03_112_jr_8016AB6C] - [0x4b364, c, ov_SC03_112_jr_801734BC] - [0x50be8, c, ov_SC03_112_jr_80178D40] - [0x5d584, data, tail] @@ -110,10 +111,12 @@ segments: - [0x8328c, data, tail4] - [0x83290, .rodata, ov_SC03_112_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x832ac, data, tail5] + - [0x83304, .rodata, ov_SC03_112_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x83324, data, tail6] - [0x833a4, .rodata, ov_SC03_112_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x833b8, data, tail6] + - [0x833b8, data, tail7] - [0x83560, .rodata, ov_SC03_112_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x836d8, data, tail7] + - [0x836d8, data, tail8] - [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 3a9363bad..c6bbbc7dd 100644 --- a/config/splat.ov_SC03_113.yaml +++ b/config/splat.ov_SC03_113.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC03_113_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_113_after] - [0x32cd4, c, ov_SC03_113_jr_8015AE2C] + - [0x42a14, c, ov_SC03_113_jr_8016AB6C] - [0x4b364, c, ov_SC03_113_jr_801734BC] - [0x50be8, c, ov_SC03_113_jr_80178D40] - [0x5ac34, data, tail] @@ -110,10 +111,12 @@ segments: - [0x7bf14, data, tail4] - [0x7bf18, .rodata, ov_SC03_113_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7bf34, data, tail5] + - [0x7bf8c, .rodata, ov_SC03_113_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x7bfac, data, tail6] - [0x7c02c, .rodata, ov_SC03_113_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7c040, data, tail6] + - [0x7c040, data, tail7] - [0x7c1e8, .rodata, ov_SC03_113_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7c360, data, tail7] + - [0x7c360, data, tail8] - [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 6f349bed8..e4d7ca294 100644 --- a/config/splat.ov_SC03_114.yaml +++ b/config/splat.ov_SC03_114.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC03_114_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_114_after] - [0x32cd4, c, ov_SC03_114_jr_8015AE2C] + - [0x42a14, c, ov_SC03_114_jr_8016AB6C] - [0x4b364, c, ov_SC03_114_jr_801734BC] - [0x50be8, c, ov_SC03_114_jr_80178D40] - [0x5689c, data, tail] @@ -110,10 +111,12 @@ segments: - [0x7fc20, data, tail4] - [0x7fc24, .rodata, ov_SC03_114_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7fc40, data, tail5] + - [0x7fc98, .rodata, ov_SC03_114_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x7fcb8, data, tail6] - [0x7fd38, .rodata, ov_SC03_114_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7fd4c, data, tail6] + - [0x7fd4c, data, tail7] - [0x7fef4, .rodata, ov_SC03_114_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8006c, data, tail7] + - [0x8006c, data, tail8] - [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 556add05e..05831c6f4 100644 --- a/config/splat.ov_SC03_115.yaml +++ b/config/splat.ov_SC03_115.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC03_115_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_115_after] - [0x32cd4, c, ov_SC03_115_jr_8015AE2C] + - [0x42a14, c, ov_SC03_115_jr_8016AB6C] - [0x4b364, c, ov_SC03_115_jr_801734BC] - [0x50be8, c, ov_SC03_115_jr_80178D40] - [0x58308, data, tail] @@ -110,10 +111,12 @@ segments: - [0x6b594, data, tail4] - [0x6b598, .rodata, ov_SC03_115_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6b5b4, data, tail5] + - [0x6b60c, .rodata, ov_SC03_115_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6b62c, data, tail6] - [0x6b6ac, .rodata, ov_SC03_115_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6b6c0, data, tail6] + - [0x6b6c0, data, tail7] - [0x6b868, .rodata, ov_SC03_115_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6b9e0, data, tail7] + - [0x6b9e0, data, tail8] - [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 85ce3ac4d..d994debd6 100644 --- a/config/splat.ov_SC03_116.yaml +++ b/config/splat.ov_SC03_116.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC03_116_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_116_after] - [0x32cd4, c, ov_SC03_116_jr_8015AE2C] + - [0x42a14, c, ov_SC03_116_jr_8016AB6C] - [0x4b364, c, ov_SC03_116_jr_801734BC] - [0x50be8, c, ov_SC03_116_jr_80178D40] - [0x5a70c, data, tail] @@ -110,10 +111,12 @@ segments: - [0x6e130, data, tail4] - [0x6e134, .rodata, ov_SC03_116_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6e150, data, tail5] + - [0x6e1a8, .rodata, ov_SC03_116_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6e1c8, data, tail6] - [0x6e248, .rodata, ov_SC03_116_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6e25c, data, tail6] + - [0x6e25c, data, tail7] - [0x6e404, .rodata, ov_SC03_116_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6e57c, data, tail7] + - [0x6e57c, data, tail8] - [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 a3bd37cad..30e0339b1 100644 --- a/config/splat.ov_SC03_117.yaml +++ b/config/splat.ov_SC03_117.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC03_117_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_117_after] - [0x32cd4, c, ov_SC03_117_jr_8015AE2C] + - [0x42a14, c, ov_SC03_117_jr_8016AB6C] - [0x4b364, c, ov_SC03_117_jr_801734BC] - [0x50be8, c, ov_SC03_117_jr_80178D40] - [0x5c718, data, tail] @@ -110,10 +111,12 @@ segments: - [0xa47d0, data, tail4] - [0xa47d4, .rodata, ov_SC03_117_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa47f0, data, tail5] + - [0xa4848, .rodata, ov_SC03_117_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa4868, data, tail6] - [0xa48e8, .rodata, ov_SC03_117_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa48fc, data, tail6] + - [0xa48fc, data, tail7] - [0xa4aa4, .rodata, ov_SC03_117_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa4c1c, data, tail7] + - [0xa4c1c, data, tail8] - [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 66e7ae2d2..59a5546ba 100644 --- a/config/splat.ov_SC03_118.yaml +++ b/config/splat.ov_SC03_118.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC03_118_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_118_after] - [0x32cd4, c, ov_SC03_118_jr_8015AE2C] + - [0x42a14, c, ov_SC03_118_jr_8016AB6C] - [0x4b364, c, ov_SC03_118_jr_801734BC] - [0x50be8, c, ov_SC03_118_jr_80178D40] - [0x617c4, data, tail] @@ -110,10 +111,12 @@ segments: - [0xaa72c, data, tail4] - [0xaa730, .rodata, ov_SC03_118_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xaa74c, data, tail5] + - [0xaa7a4, .rodata, ov_SC03_118_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xaa7c4, data, tail6] - [0xaa844, .rodata, ov_SC03_118_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaa858, data, tail6] + - [0xaa858, data, tail7] - [0xaaa00, .rodata, ov_SC03_118_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaab78, data, tail7] + - [0xaab78, data, tail8] - [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 52cd6c26c..cdcb0416c 100644 --- a/config/splat.ov_SC03_119.yaml +++ b/config/splat.ov_SC03_119.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC03_119_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_119_after] - [0x32cd4, c, ov_SC03_119_jr_8015AE2C] + - [0x42a14, c, ov_SC03_119_jr_8016AB6C] - [0x4b364, c, ov_SC03_119_jr_801734BC] - [0x50be8, c, ov_SC03_119_jr_80178D40] - [0x617c4, data, tail] @@ -110,10 +111,12 @@ segments: - [0xaa72c, data, tail4] - [0xaa730, .rodata, ov_SC03_119_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xaa74c, data, tail5] + - [0xaa7a4, .rodata, ov_SC03_119_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xaa7c4, data, tail6] - [0xaa844, .rodata, ov_SC03_119_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaa858, data, tail6] + - [0xaa858, data, tail7] - [0xaaa00, .rodata, ov_SC03_119_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaab78, data, tail7] + - [0xaab78, data, tail8] - [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 20f7cb610..841e202aa 100644 --- a/config/splat.ov_SC03_121.yaml +++ b/config/splat.ov_SC03_121.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC03_121_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_121_after] - [0x32cd4, c, ov_SC03_121_jr_8015AE2C] + - [0x42a14, c, ov_SC03_121_jr_8016AB6C] - [0x4b364, c, ov_SC03_121_jr_801734BC] - [0x50be8, c, ov_SC03_121_jr_80178D40] - [0x59fe0, data, tail] @@ -110,10 +111,12 @@ segments: - [0x85234, data, tail4] - [0x85238, .rodata, ov_SC03_121_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x85254, data, tail5] + - [0x852ac, .rodata, ov_SC03_121_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x852cc, data, tail6] - [0x8534c, .rodata, ov_SC03_121_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x85360, data, tail6] + - [0x85360, data, tail7] - [0x85508, .rodata, ov_SC03_121_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x85680, data, tail7] + - [0x85680, data, tail8] - [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 00ca6efac..b85a1eca2 100644 --- a/config/splat.ov_SC03_124.yaml +++ b/config/splat.ov_SC03_124.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC03_124_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_124_after] - [0x32cd4, c, ov_SC03_124_jr_8015AE2C] + - [0x42a14, c, ov_SC03_124_jr_8016AB6C] - [0x4b364, c, ov_SC03_124_jr_801734BC] - [0x50be8, c, ov_SC03_124_jr_80178D40] - [0x6276c, data, tail] @@ -110,10 +111,12 @@ segments: - [0xb7988, data, tail4] - [0xb798c, .rodata, ov_SC03_124_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xb79a8, data, tail5] + - [0xb7a00, .rodata, ov_SC03_124_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xb7a20, data, tail6] - [0xb7aa0, .rodata, ov_SC03_124_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb7ab4, data, tail6] + - [0xb7ab4, data, tail7] - [0xb7c5c, .rodata, ov_SC03_124_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb7dd4, data, tail7] + - [0xb7dd4, data, tail8] - [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 69527891a..fe2703c7c 100644 --- a/config/splat.ov_SC03_125.yaml +++ b/config/splat.ov_SC03_125.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC03_125_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_125_after] - [0x32cd4, c, ov_SC03_125_jr_8015AE2C] + - [0x42a14, c, ov_SC03_125_jr_8016AB6C] - [0x4b364, c, ov_SC03_125_jr_801734BC] - [0x50be8, c, ov_SC03_125_jr_80178D40] - [0x5bbdc, data, tail] @@ -110,10 +111,12 @@ segments: - [0x9a674, data, tail4] - [0x9a678, .rodata, ov_SC03_125_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9a694, data, tail5] + - [0x9a6ec, .rodata, ov_SC03_125_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9a70c, data, tail6] - [0x9a78c, .rodata, ov_SC03_125_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9a7a0, data, tail6] + - [0x9a7a0, data, tail7] - [0x9a948, .rodata, ov_SC03_125_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9aac0, data, tail7] + - [0x9aac0, data, tail8] - [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 50cecf822..6a86ca8b7 100644 --- a/config/splat.ov_SC03_126.yaml +++ b/config/splat.ov_SC03_126.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC03_126_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC03_126_after] - [0x32cd4, c, ov_SC03_126_jr_8015AE2C] + - [0x42a14, c, ov_SC03_126_jr_8016AB6C] - [0x4b364, c, ov_SC03_126_jr_801734BC] - [0x50be8, c, ov_SC03_126_jr_80178D40] - [0x570d4, data, tail] @@ -110,10 +111,12 @@ segments: - [0x65f60, data, tail4] - [0x65f64, .rodata, ov_SC03_126_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x65f80, data, tail5] + - [0x65fd8, .rodata, ov_SC03_126_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x65ff8, data, tail6] - [0x66078, .rodata, ov_SC03_126_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6608c, data, tail6] + - [0x6608c, data, tail7] - [0x66234, .rodata, ov_SC03_126_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x663ac, data, tail7] + - [0x663ac, data, tail8] - [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 c0dd8cef6..fcec01cb8 100644 --- a/config/splat.ov_SC04_000.yaml +++ b/config/splat.ov_SC04_000.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC04_000_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC04_000_after] - [0x32cd4, c, ov_SC04_000_jr_8015AE2C] + - [0x42a14, c, ov_SC04_000_jr_8016AB6C] - [0x4b364, c, ov_SC04_000_jr_801734BC] - [0x50be8, c, ov_SC04_000_jr_80178D40] - [0x5b0e0, data, tail] @@ -110,10 +111,12 @@ segments: - [0x7ffdc, data, tail4] - [0x7ffe0, .rodata, ov_SC04_000_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7fffc, data, tail5] + - [0x80054, .rodata, ov_SC04_000_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x80074, data, tail6] - [0x800f4, .rodata, ov_SC04_000_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x80108, data, tail6] + - [0x80108, data, tail7] - [0x802b0, .rodata, ov_SC04_000_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x80428, data, tail7] + - [0x80428, data, tail8] - [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 d0695564c..d3f348c60 100644 --- a/config/splat.ov_SC04_002.yaml +++ b/config/splat.ov_SC04_002.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC04_002_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC04_002_after] - [0x32cd4, c, ov_SC04_002_jr_8015AE2C] + - [0x42a14, c, ov_SC04_002_jr_8016AB6C] - [0x4b364, c, ov_SC04_002_jr_801734BC] - [0x50be8, c, ov_SC04_002_jr_80178D40] - [0x6024c, data, tail] @@ -110,10 +111,12 @@ segments: - [0x9732c, data, tail4] - [0x97330, .rodata, ov_SC04_002_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9734c, data, tail5] + - [0x973a4, .rodata, ov_SC04_002_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x973c4, data, tail6] - [0x97444, .rodata, ov_SC04_002_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x97458, data, tail6] + - [0x97458, data, tail7] - [0x97600, .rodata, ov_SC04_002_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x97778, data, tail7] + - [0x97778, data, tail8] - [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 1d7bf7ae1..b665bb626 100644 --- a/config/splat.ov_SC04_003.yaml +++ b/config/splat.ov_SC04_003.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC04_003_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC04_003_after] - [0x32cd4, c, ov_SC04_003_jr_8015AE2C] + - [0x42a14, c, ov_SC04_003_jr_8016AB6C] - [0x4b364, c, ov_SC04_003_jr_801734BC] - [0x50be8, c, ov_SC04_003_jr_80178D40] - [0x59fe8, data, tail] @@ -110,10 +111,12 @@ segments: - [0x71fa8, data, tail4] - [0x71fac, .rodata, ov_SC04_003_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x71fc8, data, tail5] + - [0x72020, .rodata, ov_SC04_003_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x72040, data, tail6] - [0x720c0, .rodata, ov_SC04_003_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x720d4, data, tail6] + - [0x720d4, data, tail7] - [0x7227c, .rodata, ov_SC04_003_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x723f4, data, tail7] + - [0x723f4, data, tail8] - [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 4a5d1daca..aa849ba9e 100644 --- a/config/splat.ov_SC04_004.yaml +++ b/config/splat.ov_SC04_004.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC04_004_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC04_004_after] - [0x32cd4, c, ov_SC04_004_jr_8015AE2C] + - [0x42a14, c, ov_SC04_004_jr_8016AB6C] - [0x4b364, c, ov_SC04_004_jr_801734BC] - [0x50be8, c, ov_SC04_004_jr_80178D40] - [0x5c51c, data, tail] @@ -110,10 +111,12 @@ segments: - [0x89da4, data, tail4] - [0x89da8, .rodata, ov_SC04_004_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x89dc4, data, tail5] + - [0x89e1c, .rodata, ov_SC04_004_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x89e3c, data, tail6] - [0x89ebc, .rodata, ov_SC04_004_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x89ed0, data, tail6] + - [0x89ed0, data, tail7] - [0x8a078, .rodata, ov_SC04_004_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8a1f0, data, tail7] + - [0x8a1f0, data, tail8] - [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 e1e63312f..724cd1303 100644 --- a/config/splat.ov_SC04_005.yaml +++ b/config/splat.ov_SC04_005.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC04_005_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC04_005_after] - [0x32cd4, c, ov_SC04_005_jr_8015AE2C] + - [0x42a14, c, ov_SC04_005_jr_8016AB6C] - [0x4b364, c, ov_SC04_005_jr_801734BC] - [0x50be8, c, ov_SC04_005_jr_80178D40] - [0x5f950, data, tail] @@ -110,10 +111,12 @@ segments: - [0x97f68, data, tail4] - [0x97f6c, .rodata, ov_SC04_005_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x97f88, data, tail5] + - [0x97fe0, .rodata, ov_SC04_005_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x98000, data, tail6] - [0x98080, .rodata, ov_SC04_005_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x98094, data, tail6] + - [0x98094, data, tail7] - [0x9823c, .rodata, ov_SC04_005_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x983b4, data, tail7] + - [0x983b4, data, tail8] - [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 1b388112e..2dd693d47 100644 --- a/config/splat.ov_SC04_006.yaml +++ b/config/splat.ov_SC04_006.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC04_006_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC04_006_after] - [0x32cd4, c, ov_SC04_006_jr_8015AE2C] + - [0x42a14, c, ov_SC04_006_jr_8016AB6C] - [0x4b364, c, ov_SC04_006_jr_801734BC] - [0x50be8, c, ov_SC04_006_jr_80178D40] - [0x57a30, data, tail] @@ -110,10 +111,12 @@ segments: - [0x74210, data, tail4] - [0x74214, .rodata, ov_SC04_006_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x74230, data, tail5] + - [0x74288, .rodata, ov_SC04_006_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x742a8, data, tail6] - [0x74328, .rodata, ov_SC04_006_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7433c, data, tail6] + - [0x7433c, data, tail7] - [0x744e4, .rodata, ov_SC04_006_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7465c, data, tail7] + - [0x7465c, data, tail8] - [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 347b3d5eb..a62d5ac8a 100644 --- a/config/splat.ov_SC04_007.yaml +++ b/config/splat.ov_SC04_007.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC04_007_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC04_007_after] - [0x32cd4, c, ov_SC04_007_jr_8015AE2C] + - [0x42a14, c, ov_SC04_007_jr_8016AB6C] - [0x4b364, c, ov_SC04_007_jr_801734BC] - [0x50be8, c, ov_SC04_007_jr_80178D40] - [0x5d9e8, data, tail] @@ -110,10 +111,12 @@ segments: - [0x8b7cc, data, tail4] - [0x8b7d0, .rodata, ov_SC04_007_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8b7ec, data, tail5] + - [0x8b844, .rodata, ov_SC04_007_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8b864, data, tail6] - [0x8b8e4, .rodata, ov_SC04_007_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8b8f8, data, tail6] + - [0x8b8f8, data, tail7] - [0x8baa0, .rodata, ov_SC04_007_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8bc18, data, tail7] + - [0x8bc18, data, tail8] - [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_008.yaml b/config/splat.ov_SC04_008.yaml index 57f27eb2e..7db615eba 100644 --- a/config/splat.ov_SC04_008.yaml +++ b/config/splat.ov_SC04_008.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC04_008_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC04_008_after] - [0x32cd4, c, ov_SC04_008_jr_8015AE2C] + - [0x42a14, c, ov_SC04_008_jr_8016AB6C] - [0x4b364, c, ov_SC04_008_jr_801734BC] - [0x50be8, c, ov_SC04_008_jr_80178D40] - [0x56920, data, tail] @@ -108,10 +109,12 @@ segments: - [0x68230, data, tail3] - [0x684b8, .rodata, ov_SC04_008_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x684d4, data, tail4] + - [0x6852c, .rodata, ov_SC04_008_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6854c, data, tail5] - [0x685cc, .rodata, ov_SC04_008_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x685e0, data, tail5] + - [0x685e0, data, tail6] - [0x68788, .rodata, ov_SC04_008_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x68900, data, tail6] + - [0x68900, data, tail7] - [0x6B364, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x6B367] # 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 9e5a62b5b..468183bff 100644 --- a/config/splat.ov_SC04_009.yaml +++ b/config/splat.ov_SC04_009.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC04_009_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC04_009_after] - [0x32cd4, c, ov_SC04_009_jr_8015AE2C] + - [0x42a14, c, ov_SC04_009_jr_8016AB6C] - [0x4b364, c, ov_SC04_009_jr_801734BC] - [0x50be8, c, ov_SC04_009_jr_80178D40] - [0x5694c, data, tail] @@ -110,10 +111,12 @@ segments: - [0x6e6c8, data, tail4] - [0x6e6cc, .rodata, ov_SC04_009_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6e6e8, data, tail5] + - [0x6e740, .rodata, ov_SC04_009_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6e760, data, tail6] - [0x6e7e0, .rodata, ov_SC04_009_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6e7f4, data, tail6] + - [0x6e7f4, data, tail7] - [0x6e99c, .rodata, ov_SC04_009_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6eb14, data, tail7] + - [0x6eb14, data, tail8] - [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 ccb2b9a82..0466b4c0a 100644 --- a/config/splat.ov_SC04_010.yaml +++ b/config/splat.ov_SC04_010.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC04_010_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC04_010_after] - [0x32cd4, c, ov_SC04_010_jr_8015AE2C] + - [0x42a14, c, ov_SC04_010_jr_8016AB6C] - [0x4b364, c, ov_SC04_010_jr_801734BC] - [0x50be8, c, ov_SC04_010_jr_80178D40] - [0x55ff8, data, tail] @@ -110,10 +111,12 @@ segments: - [0x65b54, data, tail4] - [0x65b58, .rodata, ov_SC04_010_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x65b74, data, tail5] + - [0x65bcc, .rodata, ov_SC04_010_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x65bec, data, tail6] - [0x65c6c, .rodata, ov_SC04_010_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65c80, data, tail6] + - [0x65c80, data, tail7] - [0x65e28, .rodata, ov_SC04_010_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65fa0, data, tail7] + - [0x65fa0, data, tail8] - [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 d29e8accd..a55677ef9 100644 --- a/config/splat.ov_SC04_011.yaml +++ b/config/splat.ov_SC04_011.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC04_011_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC04_011_after] - [0x32cd4, c, ov_SC04_011_jr_8015AE2C] + - [0x42a14, c, ov_SC04_011_jr_8016AB6C] - [0x4b364, c, ov_SC04_011_jr_801734BC] - [0x50be8, c, ov_SC04_011_jr_80178D40] - [0x68288, data, tail] @@ -110,10 +111,12 @@ segments: - [0xc50f0, data, tail4] - [0xc50f4, .rodata, ov_SC04_011_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc5110, data, tail5] + - [0xc5168, .rodata, ov_SC04_011_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc5188, data, tail6] - [0xc5208, .rodata, ov_SC04_011_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc521c, data, tail6] + - [0xc521c, data, tail7] - [0xc53c4, .rodata, ov_SC04_011_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc553c, data, tail7] + - [0xc553c, data, tail8] - [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 6782ae91b..25dd818c8 100644 --- a/config/splat.ov_SC04_012.yaml +++ b/config/splat.ov_SC04_012.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC04_012_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC04_012_after] - [0x32cd4, c, ov_SC04_012_jr_8015AE2C] + - [0x42a14, c, ov_SC04_012_jr_8016AB6C] - [0x4b364, c, ov_SC04_012_jr_801734BC] - [0x50be8, c, ov_SC04_012_jr_80178D40] - [0x5645c, data, tail] @@ -110,10 +111,12 @@ segments: - [0x68234, data, tail4] - [0x68238, .rodata, ov_SC04_012_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x68254, data, tail5] + - [0x682ac, .rodata, ov_SC04_012_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x682cc, data, tail6] - [0x6834c, .rodata, ov_SC04_012_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x68360, data, tail6] + - [0x68360, data, tail7] - [0x68508, .rodata, ov_SC04_012_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x68680, data, tail7] + - [0x68680, data, tail8] - [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 88dccc64c..66fa34b3e 100644 --- a/config/splat.ov_SC04_015.yaml +++ b/config/splat.ov_SC04_015.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC04_015_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC04_015_after] - [0x32cd4, c, ov_SC04_015_jr_8015AE2C] + - [0x42a14, c, ov_SC04_015_jr_8016AB6C] - [0x4b364, c, ov_SC04_015_jr_801734BC] - [0x50be8, c, ov_SC04_015_jr_80178D40] - [0x5c38c, data, tail] @@ -110,10 +111,12 @@ segments: - [0x9eecc, data, tail4] - [0x9eed0, .rodata, ov_SC04_015_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9eeec, data, tail5] + - [0x9ef44, .rodata, ov_SC04_015_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9ef64, data, tail6] - [0x9efe4, .rodata, ov_SC04_015_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9eff8, data, tail6] + - [0x9eff8, data, tail7] - [0x9f1a0, .rodata, ov_SC04_015_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9f318, data, tail7] + - [0x9f318, data, tail8] - [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 3742afd52..939f3fa93 100644 --- a/config/splat.ov_SC04_016.yaml +++ b/config/splat.ov_SC04_016.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC04_016_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC04_016_after] - [0x32cd4, c, ov_SC04_016_jr_8015AE2C] + - [0x42a14, c, ov_SC04_016_jr_8016AB6C] - [0x4b364, c, ov_SC04_016_jr_801734BC] - [0x50be8, c, ov_SC04_016_jr_80178D40] - [0x57e58, data, tail] @@ -110,10 +111,12 @@ segments: - [0x7d084, data, tail4] - [0x7d088, .rodata, ov_SC04_016_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7d0a4, data, tail5] + - [0x7d0fc, .rodata, ov_SC04_016_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x7d11c, data, tail6] - [0x7d19c, .rodata, ov_SC04_016_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7d1b0, data, tail6] + - [0x7d1b0, data, tail7] - [0x7d358, .rodata, ov_SC04_016_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7d4d0, data, tail7] + - [0x7d4d0, data, tail8] - [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 da13bbd9b..bf9c83591 100644 --- a/config/splat.ov_SC04_018.yaml +++ b/config/splat.ov_SC04_018.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC04_018_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC04_018_after] - [0x32cd4, c, ov_SC04_018_jr_8015AE2C] + - [0x42a14, c, ov_SC04_018_jr_8016AB6C] - [0x4b364, c, ov_SC04_018_jr_801734BC] - [0x50be8, c, ov_SC04_018_jr_80178D40] - [0x64dd0, data, tail] @@ -110,10 +111,12 @@ segments: - [0xbce9c, data, tail4] - [0xbcea0, .rodata, ov_SC04_018_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbcebc, data, tail5] + - [0xbcf14, .rodata, ov_SC04_018_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xbcf34, data, tail6] - [0xbcfb4, .rodata, ov_SC04_018_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbcfc8, data, tail6] + - [0xbcfc8, data, tail7] - [0xbd170, .rodata, ov_SC04_018_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbd2e8, data, tail7] + - [0xbd2e8, data, tail8] - [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 8f6c641fd..920dd24fe 100644 --- a/config/splat.ov_SC04_019.yaml +++ b/config/splat.ov_SC04_019.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC04_019_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC04_019_after] - [0x32cd4, c, ov_SC04_019_jr_8015AE2C] + - [0x42a14, c, ov_SC04_019_jr_8016AB6C] - [0x4b364, c, ov_SC04_019_jr_801734BC] - [0x50be8, c, ov_SC04_019_jr_80178D40] - [0x64dd0, data, tail] @@ -110,10 +111,12 @@ segments: - [0xbce9c, data, tail4] - [0xbcea0, .rodata, ov_SC04_019_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbcebc, data, tail5] + - [0xbcf14, .rodata, ov_SC04_019_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xbcf34, data, tail6] - [0xbcfb4, .rodata, ov_SC04_019_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbcfc8, data, tail6] + - [0xbcfc8, data, tail7] - [0xbd170, .rodata, ov_SC04_019_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbd2e8, data, tail7] + - [0xbd2e8, data, tail8] - [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 013ccff8d..17c1d8eb7 100644 --- a/config/splat.ov_SC04_020.yaml +++ b/config/splat.ov_SC04_020.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC04_020_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC04_020_after] - [0x32cd4, c, ov_SC04_020_jr_8015AE2C] + - [0x42a14, c, ov_SC04_020_jr_8016AB6C] - [0x4b364, c, ov_SC04_020_jr_801734BC] - [0x50be8, c, ov_SC04_020_jr_80178D40] - [0x5b1a8, data, tail] @@ -110,10 +111,12 @@ segments: - [0x928c4, data, tail4] - [0x928c8, .rodata, ov_SC04_020_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x928e4, data, tail5] + - [0x9293c, .rodata, ov_SC04_020_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9295c, data, tail6] - [0x929dc, .rodata, ov_SC04_020_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x929f0, data, tail6] + - [0x929f0, data, tail7] - [0x92b98, .rodata, ov_SC04_020_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x92d10, data, tail7] + - [0x92d10, data, tail8] - [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 291373b18..2de3141de 100644 --- a/config/splat.ov_SC04_021.yaml +++ b/config/splat.ov_SC04_021.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC04_021_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC04_021_after] - [0x32cd4, c, ov_SC04_021_jr_8015AE2C] + - [0x42a14, c, ov_SC04_021_jr_8016AB6C] - [0x4b364, c, ov_SC04_021_jr_801734BC] - [0x50be8, c, ov_SC04_021_jr_80178D40] - [0x570d4, data, tail] @@ -110,10 +111,12 @@ segments: - [0x65f60, data, tail4] - [0x65f64, .rodata, ov_SC04_021_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x65f80, data, tail5] + - [0x65fd8, .rodata, ov_SC04_021_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x65ff8, data, tail6] - [0x66078, .rodata, ov_SC04_021_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6608c, data, tail6] + - [0x6608c, data, tail7] - [0x66234, .rodata, ov_SC04_021_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x663ac, data, tail7] + - [0x663ac, data, tail8] - [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 fd0d77cf2..602dda61d 100644 --- a/config/splat.ov_SC05_000.yaml +++ b/config/splat.ov_SC05_000.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC05_000_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC05_000_after] - [0x32cd4, c, ov_SC05_000_jr_8015AE2C] + - [0x42a14, c, ov_SC05_000_jr_8016AB6C] - [0x4b364, c, ov_SC05_000_jr_801734BC] - [0x50be8, c, ov_SC05_000_jr_80178D40] - [0x560e8, data, tail] @@ -110,10 +111,12 @@ segments: - [0x710b0, data, tail4] - [0x710b4, .rodata, ov_SC05_000_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x710d0, data, tail5] + - [0x71128, .rodata, ov_SC05_000_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x71148, data, tail6] - [0x711c8, .rodata, ov_SC05_000_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x711dc, data, tail6] + - [0x711dc, data, tail7] - [0x71384, .rodata, ov_SC05_000_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x714fc, data, tail7] + - [0x714fc, data, tail8] - [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 bd495398a..ed2c18b81 100644 --- a/config/splat.ov_SC05_001.yaml +++ b/config/splat.ov_SC05_001.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC05_001_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC05_001_after] - [0x32cd4, c, ov_SC05_001_jr_8015AE2C] + - [0x42a14, c, ov_SC05_001_jr_8016AB6C] - [0x4b364, c, ov_SC05_001_jr_801734BC] - [0x50be8, c, ov_SC05_001_jr_80178D40] - [0x5d8c4, data, tail] @@ -110,10 +111,12 @@ segments: - [0x8c064, data, tail4] - [0x8c068, .rodata, ov_SC05_001_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8c084, data, tail5] + - [0x8c0dc, .rodata, ov_SC05_001_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8c0fc, data, tail6] - [0x8c17c, .rodata, ov_SC05_001_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8c190, data, tail6] + - [0x8c190, data, tail7] - [0x8c338, .rodata, ov_SC05_001_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8c4b0, data, tail7] + - [0x8c4b0, data, tail8] - [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 d19aeeab8..21f386ba2 100644 --- a/config/splat.ov_SC05_002.yaml +++ b/config/splat.ov_SC05_002.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC05_002_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC05_002_after] - [0x32cd4, c, ov_SC05_002_jr_8015AE2C] + - [0x42a14, c, ov_SC05_002_jr_8016AB6C] - [0x4b364, c, ov_SC05_002_jr_801734BC] - [0x50be8, c, ov_SC05_002_jr_80178D40] - [0x58084, data, tail] @@ -110,10 +111,12 @@ segments: - [0x76410, data, tail4] - [0x76414, .rodata, ov_SC05_002_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x76430, data, tail5] + - [0x76488, .rodata, ov_SC05_002_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x764a8, data, tail6] - [0x76528, .rodata, ov_SC05_002_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7653c, data, tail6] + - [0x7653c, data, tail7] - [0x766e4, .rodata, ov_SC05_002_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7685c, data, tail7] + - [0x7685c, data, tail8] - [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 b26f4178e..d99ced62b 100644 --- a/config/splat.ov_SC05_003.yaml +++ b/config/splat.ov_SC05_003.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC05_003_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC05_003_after] - [0x32cd4, c, ov_SC05_003_jr_8015AE2C] + - [0x42a14, c, ov_SC05_003_jr_8016AB6C] - [0x4b364, c, ov_SC05_003_jr_801734BC] - [0x50be8, c, ov_SC05_003_jr_80178D40] - [0x5a3bc, data, tail] @@ -110,10 +111,12 @@ segments: - [0x82f0c, data, tail4] - [0x82f10, .rodata, ov_SC05_003_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x82f2c, data, tail5] + - [0x82f84, .rodata, ov_SC05_003_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x82fa4, data, tail6] - [0x83024, .rodata, ov_SC05_003_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x83038, data, tail6] + - [0x83038, data, tail7] - [0x831e0, .rodata, ov_SC05_003_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x83358, data, tail7] + - [0x83358, data, tail8] - [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 9671cb60a..c2e7ae33f 100644 --- a/config/splat.ov_SC05_004.yaml +++ b/config/splat.ov_SC05_004.yaml @@ -97,6 +97,7 @@ segments: - [0x1CA44, c, ov_SC05_004_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC05_004_after] - [0x32cd4, c, ov_SC05_004_jr_8015AE2C] + - [0x42a14, c, ov_SC05_004_jr_8016AB6C] - [0x4b364, c, ov_SC05_004_jr_801734BC] - [0x50be8, c, ov_SC05_004_jr_80178D40] - [0x594c8, data, tail] @@ -106,10 +107,12 @@ segments: - [0x75500, data, tail3] - [0x75504, .rodata, ov_SC05_004_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x75520, data, tail4] + - [0x75578, .rodata, ov_SC05_004_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x75598, data, tail5] - [0x75618, .rodata, ov_SC05_004_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7562c, data, tail5] + - [0x7562c, data, tail6] - [0x757d4, .rodata, ov_SC05_004_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7594c, data, tail6] + - [0x7594c, data, tail7] - [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 9eff91b33..b46d46819 100644 --- a/config/splat.ov_SC05_005.yaml +++ b/config/splat.ov_SC05_005.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC05_005_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC05_005_after] - [0x32cd4, c, ov_SC05_005_jr_8015AE2C] + - [0x42a14, c, ov_SC05_005_jr_8016AB6C] - [0x4b364, c, ov_SC05_005_jr_801734BC] - [0x50be8, c, ov_SC05_005_jr_80178D40] - [0x5a29c, data, tail] @@ -110,10 +111,12 @@ segments: - [0x881e8, data, tail4] - [0x881ec, .rodata, ov_SC05_005_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x88208, data, tail5] + - [0x88260, .rodata, ov_SC05_005_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x88280, data, tail6] - [0x88300, .rodata, ov_SC05_005_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x88314, data, tail6] + - [0x88314, data, tail7] - [0x884bc, .rodata, ov_SC05_005_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x88634, data, tail7] + - [0x88634, data, tail8] - [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 3948f7259..a67d3ae5e 100644 --- a/config/splat.ov_SC05_006.yaml +++ b/config/splat.ov_SC05_006.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC05_006_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC05_006_after] - [0x32cd4, c, ov_SC05_006_jr_8015AE2C] + - [0x42a14, c, ov_SC05_006_jr_8016AB6C] - [0x4b364, c, ov_SC05_006_jr_801734BC] - [0x50be8, c, ov_SC05_006_jr_80178D40] - [0x572bc, data, tail] @@ -110,10 +111,12 @@ segments: - [0x66338, data, tail4] - [0x6633c, .rodata, ov_SC05_006_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x66358, data, tail5] + - [0x663b0, .rodata, ov_SC05_006_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x663d0, data, tail6] - [0x66450, .rodata, ov_SC05_006_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x66464, data, tail6] + - [0x66464, data, tail7] - [0x6660c, .rodata, ov_SC05_006_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x66784, data, tail7] + - [0x66784, data, tail8] - [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 74f2c1d72..fba9edde2 100644 --- a/config/splat.ov_SC05_007.yaml +++ b/config/splat.ov_SC05_007.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC05_007_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC05_007_after] - [0x32cd4, c, ov_SC05_007_jr_8015AE2C] + - [0x42a14, c, ov_SC05_007_jr_8016AB6C] - [0x4b364, c, ov_SC05_007_jr_801734BC] - [0x50be8, c, ov_SC05_007_jr_80178D40] - [0x588b8, data, tail] @@ -110,10 +111,12 @@ segments: - [0x73310, data, tail4] - [0x73314, .rodata, ov_SC05_007_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x73330, data, tail5] + - [0x73388, .rodata, ov_SC05_007_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x733a8, data, tail6] - [0x73428, .rodata, ov_SC05_007_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7343c, data, tail6] + - [0x7343c, data, tail7] - [0x735e4, .rodata, ov_SC05_007_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7375c, data, tail7] + - [0x7375c, data, tail8] - [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 3707ee4b0..a06c955bd 100644 --- a/config/splat.ov_SC05_008.yaml +++ b/config/splat.ov_SC05_008.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC05_008_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC05_008_after] - [0x32cd4, c, ov_SC05_008_jr_8015AE2C] + - [0x42a14, c, ov_SC05_008_jr_8016AB6C] - [0x4b364, c, ov_SC05_008_jr_801734BC] - [0x50be8, c, ov_SC05_008_jr_80178D40] - [0x5a810, data, tail] @@ -110,10 +111,12 @@ segments: - [0x77644, data, tail4] - [0x77648, .rodata, ov_SC05_008_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x77664, data, tail5] + - [0x776bc, .rodata, ov_SC05_008_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x776dc, data, tail6] - [0x7775c, .rodata, ov_SC05_008_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77770, data, tail6] + - [0x77770, data, tail7] - [0x77918, .rodata, ov_SC05_008_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77a90, data, tail7] + - [0x77a90, data, tail8] - [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_009.yaml b/config/splat.ov_SC05_009.yaml index 277afc4fa..c9583322c 100644 --- a/config/splat.ov_SC05_009.yaml +++ b/config/splat.ov_SC05_009.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC05_009_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC05_009_after] - [0x32cd4, c, ov_SC05_009_jr_8015AE2C] + - [0x42a14, c, ov_SC05_009_jr_8016AB6C] - [0x4b364, c, ov_SC05_009_jr_801734BC] - [0x50be8, c, ov_SC05_009_jr_80178D40] - [0x56920, data, tail] @@ -108,10 +109,12 @@ segments: - [0x6cdd4, data, tail3] - [0x6d05c, .rodata, ov_SC05_009_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6d078, data, tail4] + - [0x6d0d0, .rodata, ov_SC05_009_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6d0f0, data, tail5] - [0x6d170, .rodata, ov_SC05_009_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6d184, data, tail5] + - [0x6d184, data, tail6] - [0x6d32c, .rodata, ov_SC05_009_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6d4a4, data, tail6] + - [0x6d4a4, data, tail7] - [0x6EAEC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x6EAEF] # 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 ee287abea..4f47d6cb0 100644 --- a/config/splat.ov_SC05_010.yaml +++ b/config/splat.ov_SC05_010.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC05_010_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC05_010_after] - [0x32cd4, c, ov_SC05_010_jr_8015AE2C] + - [0x42a14, c, ov_SC05_010_jr_8016AB6C] - [0x4b364, c, ov_SC05_010_jr_801734BC] - [0x50be8, c, ov_SC05_010_jr_80178D40] - [0x607fc, data, tail] @@ -110,10 +111,12 @@ segments: - [0x9d28c, data, tail4] - [0x9d290, .rodata, ov_SC05_010_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9d2ac, data, tail5] + - [0x9d304, .rodata, ov_SC05_010_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9d324, data, tail6] - [0x9d3a4, .rodata, ov_SC05_010_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9d3b8, data, tail6] + - [0x9d3b8, data, tail7] - [0x9d560, .rodata, ov_SC05_010_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9d6d8, data, tail7] + - [0x9d6d8, data, tail8] - [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 93b6661d4..677f43d6e 100644 --- a/config/splat.ov_SC05_011.yaml +++ b/config/splat.ov_SC05_011.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC05_011_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC05_011_after] - [0x32cd4, c, ov_SC05_011_jr_8015AE2C] + - [0x42a14, c, ov_SC05_011_jr_8016AB6C] - [0x4b364, c, ov_SC05_011_jr_801734BC] - [0x50be8, c, ov_SC05_011_jr_80178D40] - [0x55b74, data, tail] @@ -110,10 +111,12 @@ segments: - [0x735f0, data, tail4] - [0x735f4, .rodata, ov_SC05_011_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x73610, data, tail5] + - [0x73668, .rodata, ov_SC05_011_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x73688, data, tail6] - [0x73708, .rodata, ov_SC05_011_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7371c, data, tail6] + - [0x7371c, data, tail7] - [0x738c4, .rodata, ov_SC05_011_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x73a3c, data, tail7] + - [0x73a3c, data, tail8] - [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 c55bcbe86..8649096d7 100644 --- a/config/splat.ov_SC05_017.yaml +++ b/config/splat.ov_SC05_017.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC05_017_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC05_017_after] - [0x32cd4, c, ov_SC05_017_jr_8015AE2C] + - [0x42a14, c, ov_SC05_017_jr_8016AB6C] - [0x4b364, c, ov_SC05_017_jr_801734BC] - [0x50be8, c, ov_SC05_017_jr_80178D40] - [0x64d94, data, tail] @@ -110,10 +111,12 @@ segments: - [0xc2cd8, data, tail4] - [0xc2cdc, .rodata, ov_SC05_017_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc2cf8, data, tail5] + - [0xc2d50, .rodata, ov_SC05_017_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc2d70, data, tail6] - [0xc2df0, .rodata, ov_SC05_017_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc2e04, data, tail6] + - [0xc2e04, data, tail7] - [0xc2fac, .rodata, ov_SC05_017_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc3124, data, tail7] + - [0xc3124, data, tail8] - [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 ec3eafd6d..faba90d2e 100644 --- a/config/splat.ov_SC05_018.yaml +++ b/config/splat.ov_SC05_018.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC05_018_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC05_018_after] - [0x32cd4, c, ov_SC05_018_jr_8015AE2C] + - [0x42a14, c, ov_SC05_018_jr_8016AB6C] - [0x4b364, c, ov_SC05_018_jr_801734BC] - [0x50be8, c, ov_SC05_018_jr_80178D40] - [0x5e790, data, tail] @@ -110,10 +111,12 @@ segments: - [0xbc84c, data, tail4] - [0xbc850, .rodata, ov_SC05_018_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbc86c, data, tail5] + - [0xbc8c4, .rodata, ov_SC05_018_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xbc8e4, data, tail6] - [0xbc964, .rodata, ov_SC05_018_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbc978, data, tail6] + - [0xbc978, data, tail7] - [0xbcb20, .rodata, ov_SC05_018_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbcc98, data, tail7] + - [0xbcc98, data, tail8] - [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 a35425f2f..ffc91da0b 100644 --- a/config/splat.ov_SC05_019.yaml +++ b/config/splat.ov_SC05_019.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC05_019_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC05_019_after] - [0x32cd4, c, ov_SC05_019_jr_8015AE2C] + - [0x42a14, c, ov_SC05_019_jr_8016AB6C] - [0x4b364, c, ov_SC05_019_jr_801734BC] - [0x50be8, c, ov_SC05_019_jr_80178D40] - [0x570d4, data, tail] @@ -110,10 +111,12 @@ segments: - [0x65f60, data, tail4] - [0x65f64, .rodata, ov_SC05_019_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x65f80, data, tail5] + - [0x65fd8, .rodata, ov_SC05_019_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x65ff8, data, tail6] - [0x66078, .rodata, ov_SC05_019_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6608c, data, tail6] + - [0x6608c, data, tail7] - [0x66234, .rodata, ov_SC05_019_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x663ac, data, tail7] + - [0x663ac, data, tail8] - [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 057e83f8d..418514d5c 100644 --- a/config/splat.ov_SC06_000.yaml +++ b/config/splat.ov_SC06_000.yaml @@ -97,6 +97,7 @@ segments: - [0x1CA44, c, ov_SC06_000_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC06_000_after] - [0x32cd4, c, ov_SC06_000_jr_8015AE2C] + - [0x42a14, c, ov_SC06_000_jr_8016AB6C] - [0x4b364, c, ov_SC06_000_jr_801734BC] - [0x50be8, c, ov_SC06_000_jr_80178D40] - [0x600e4, data, tail] @@ -106,10 +107,12 @@ segments: - [0x84bd8, data, tail3] - [0x84bdc, .rodata, ov_SC06_000_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x84bf8, data, tail4] + - [0x84c50, .rodata, ov_SC06_000_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x84c70, data, tail5] - [0x84cf0, .rodata, ov_SC06_000_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x84d04, data, tail5] + - [0x84d04, data, tail6] - [0x84eac, .rodata, ov_SC06_000_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x85024, data, tail6] + - [0x85024, data, tail7] - [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 d269bb8ff..48e377fb7 100644 --- a/config/splat.ov_SC06_006.yaml +++ b/config/splat.ov_SC06_006.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC06_006_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC06_006_after] - [0x32cd4, c, ov_SC06_006_jr_8015AE2C] + - [0x42a14, c, ov_SC06_006_jr_8016AB6C] - [0x4b364, c, ov_SC06_006_jr_801734BC] - [0x50be8, c, ov_SC06_006_jr_80178D40] - [0x59c08, data, tail] @@ -110,10 +111,12 @@ segments: - [0xce4e0, data, tail4] - [0xce4e4, .rodata, ov_SC06_006_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xce500, data, tail5] + - [0xce558, .rodata, ov_SC06_006_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xce578, data, tail6] - [0xce5f8, .rodata, ov_SC06_006_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xce60c, data, tail6] + - [0xce60c, data, tail7] - [0xce7b4, .rodata, ov_SC06_006_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xce92c, data, tail7] + - [0xce92c, data, tail8] - [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 7abaaa4e5..a5260799c 100644 --- a/config/splat.ov_SC06_008.yaml +++ b/config/splat.ov_SC06_008.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC06_008_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC06_008_after] - [0x32cd4, c, ov_SC06_008_jr_8015AE2C] + - [0x42a14, c, ov_SC06_008_jr_8016AB6C] - [0x4b364, c, ov_SC06_008_jr_801734BC] - [0x50be8, c, ov_SC06_008_jr_80178D40] - [0x5d670, data, tail] @@ -110,10 +111,12 @@ segments: - [0x805b8, data, tail4] - [0x805bc, .rodata, ov_SC06_008_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x805d8, data, tail5] + - [0x80630, .rodata, ov_SC06_008_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x80650, data, tail6] - [0x806d0, .rodata, ov_SC06_008_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x806e4, data, tail6] + - [0x806e4, data, tail7] - [0x8088c, .rodata, ov_SC06_008_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x80a04, data, tail7] + - [0x80a04, data, tail8] - [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 3fdde4a43..c3c9205d8 100644 --- a/config/splat.ov_SC06_010.yaml +++ b/config/splat.ov_SC06_010.yaml @@ -97,6 +97,7 @@ segments: - [0x1CA44, c, ov_SC06_010_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC06_010_after] - [0x32cd4, c, ov_SC06_010_jr_8015AE2C] + - [0x42a14, c, ov_SC06_010_jr_8016AB6C] - [0x4b364, c, ov_SC06_010_jr_801734BC] - [0x50be8, c, ov_SC06_010_jr_80178D40] - [0x5e84c, data, tail] @@ -106,10 +107,12 @@ segments: - [0x8860c, data, tail3] - [0x88610, .rodata, ov_SC06_010_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8862c, data, tail4] + - [0x88684, .rodata, ov_SC06_010_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x886a4, data, tail5] - [0x88724, .rodata, ov_SC06_010_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x88738, data, tail5] + - [0x88738, data, tail6] - [0x888e0, .rodata, ov_SC06_010_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x88a58, data, tail6] + - [0x88a58, data, tail7] - [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 d882f01a9..377724bc6 100644 --- a/config/splat.ov_SC06_011.yaml +++ b/config/splat.ov_SC06_011.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC06_011_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC06_011_after] - [0x32cd4, c, ov_SC06_011_jr_8015AE2C] + - [0x42a14, c, ov_SC06_011_jr_8016AB6C] - [0x4b364, c, ov_SC06_011_jr_801734BC] - [0x50be8, c, ov_SC06_011_jr_80178D40] - [0x582ac, data, tail] @@ -110,10 +111,12 @@ segments: - [0x8216c, data, tail4] - [0x82170, .rodata, ov_SC06_011_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8218c, data, tail5] + - [0x821e4, .rodata, ov_SC06_011_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x82204, data, tail6] - [0x82284, .rodata, ov_SC06_011_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x82298, data, tail6] + - [0x82298, data, tail7] - [0x82440, .rodata, ov_SC06_011_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x825b8, data, tail7] + - [0x825b8, data, tail8] - [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 3176732ec..121a7f9c3 100644 --- a/config/splat.ov_SC06_013.yaml +++ b/config/splat.ov_SC06_013.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC06_013_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC06_013_after] - [0x32cd4, c, ov_SC06_013_jr_8015AE2C] + - [0x42a14, c, ov_SC06_013_jr_8016AB6C] - [0x4b364, c, ov_SC06_013_jr_801734BC] - [0x50be8, c, ov_SC06_013_jr_80178D40] - [0x56a28, data, tail] @@ -110,10 +111,12 @@ segments: - [0x71040, data, tail4] - [0x71044, .rodata, ov_SC06_013_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x71060, data, tail5] + - [0x710b8, .rodata, ov_SC06_013_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x710d8, data, tail6] - [0x71158, .rodata, ov_SC06_013_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7116c, data, tail6] + - [0x7116c, data, tail7] - [0x71314, .rodata, ov_SC06_013_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7148c, data, tail7] + - [0x7148c, data, tail8] - [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 f0bbb92f4..cad892345 100644 --- a/config/splat.ov_SC06_014.yaml +++ b/config/splat.ov_SC06_014.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC06_014_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC06_014_after] - [0x32cd4, c, ov_SC06_014_jr_8015AE2C] + - [0x42a14, c, ov_SC06_014_jr_8016AB6C] - [0x4b364, c, ov_SC06_014_jr_801734BC] - [0x50be8, c, ov_SC06_014_jr_80178D40] - [0x57d8c, data, tail] @@ -110,10 +111,12 @@ segments: - [0x77a30, data, tail4] - [0x77a34, .rodata, ov_SC06_014_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x77a50, data, tail5] + - [0x77aa8, .rodata, ov_SC06_014_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x77ac8, data, tail6] - [0x77b48, .rodata, ov_SC06_014_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77b5c, data, tail6] + - [0x77b5c, data, tail7] - [0x77d04, .rodata, ov_SC06_014_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77e7c, data, tail7] + - [0x77e7c, data, tail8] - [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 e80b5272c..dd88648f9 100644 --- a/config/splat.ov_SC06_015.yaml +++ b/config/splat.ov_SC06_015.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC06_015_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC06_015_after] - [0x32cd4, c, ov_SC06_015_jr_8015AE2C] + - [0x42a14, c, ov_SC06_015_jr_8016AB6C] - [0x4b364, c, ov_SC06_015_jr_801734BC] - [0x50be8, c, ov_SC06_015_jr_80178D40] - [0x568e4, data, tail] @@ -110,10 +111,12 @@ segments: - [0x6ae10, data, tail4] - [0x6ae14, .rodata, ov_SC06_015_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6ae30, data, tail5] + - [0x6ae88, .rodata, ov_SC06_015_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6aea8, data, tail6] - [0x6af28, .rodata, ov_SC06_015_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6af3c, data, tail6] + - [0x6af3c, data, tail7] - [0x6b0e4, .rodata, ov_SC06_015_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6b25c, data, tail7] + - [0x6b25c, data, tail8] - [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 7a59b2627..28446e801 100644 --- a/config/splat.ov_SC06_016.yaml +++ b/config/splat.ov_SC06_016.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC06_016_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC06_016_after] - [0x32cd4, c, ov_SC06_016_jr_8015AE2C] + - [0x42a14, c, ov_SC06_016_jr_8016AB6C] - [0x4b364, c, ov_SC06_016_jr_801734BC] - [0x50be8, c, ov_SC06_016_jr_80178D40] - [0x5ccf4, data, tail] @@ -110,10 +111,12 @@ segments: - [0x75a58, data, tail4] - [0x75a5c, .rodata, ov_SC06_016_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x75a78, data, tail5] + - [0x75ad0, .rodata, ov_SC06_016_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x75af0, data, tail6] - [0x75b70, .rodata, ov_SC06_016_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x75b84, data, tail6] + - [0x75b84, data, tail7] - [0x75d2c, .rodata, ov_SC06_016_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x75ea4, data, tail7] + - [0x75ea4, data, tail8] - [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 3c71bf6ed..10c02b1a0 100644 --- a/config/splat.ov_SC06_018.yaml +++ b/config/splat.ov_SC06_018.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC06_018_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC06_018_after] - [0x32cd4, c, ov_SC06_018_jr_8015AE2C] + - [0x42a14, c, ov_SC06_018_jr_8016AB6C] - [0x4b364, c, ov_SC06_018_jr_801734BC] - [0x50be8, c, ov_SC06_018_jr_80178D40] - [0x6b430, data, tail] @@ -110,10 +111,12 @@ segments: - [0xab2e8, data, tail4] - [0xab2ec, .rodata, ov_SC06_018_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xab308, data, tail5] + - [0xab360, .rodata, ov_SC06_018_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xab380, data, tail6] - [0xab400, .rodata, ov_SC06_018_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xab414, data, tail6] + - [0xab414, data, tail7] - [0xab5bc, .rodata, ov_SC06_018_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xab734, data, tail7] + - [0xab734, data, tail8] - [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 84b55f4d8..ffa9c1393 100644 --- a/config/splat.ov_SC06_020.yaml +++ b/config/splat.ov_SC06_020.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC06_020_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC06_020_after] - [0x32cd4, c, ov_SC06_020_jr_8015AE2C] + - [0x42a14, c, ov_SC06_020_jr_8016AB6C] - [0x4b364, c, ov_SC06_020_jr_801734BC] - [0x50be8, c, ov_SC06_020_jr_80178D40] - [0x5ceb8, data, tail] @@ -110,10 +111,12 @@ segments: - [0x90bd0, data, tail4] - [0x90bd4, .rodata, ov_SC06_020_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x90bf0, data, tail5] + - [0x90c48, .rodata, ov_SC06_020_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x90c68, data, tail6] - [0x90ce8, .rodata, ov_SC06_020_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x90cfc, data, tail6] + - [0x90cfc, data, tail7] - [0x90ea4, .rodata, ov_SC06_020_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9101c, data, tail7] + - [0x9101c, data, tail8] - [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 6d6ec00a6..b4671e1df 100644 --- a/config/splat.ov_SC06_022.yaml +++ b/config/splat.ov_SC06_022.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC06_022_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC06_022_after] - [0x32cd4, c, ov_SC06_022_jr_8015AE2C] + - [0x42a14, c, ov_SC06_022_jr_8016AB6C] - [0x4b364, c, ov_SC06_022_jr_801734BC] - [0x50be8, c, ov_SC06_022_jr_80178D40] - [0x65174, data, tail] @@ -110,10 +111,12 @@ segments: - [0xb83e0, data, tail4] - [0xb83e4, .rodata, ov_SC06_022_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xb8400, data, tail5] + - [0xb8458, .rodata, ov_SC06_022_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xb8478, data, tail6] - [0xb84f8, .rodata, ov_SC06_022_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb850c, data, tail6] + - [0xb850c, data, tail7] - [0xb86b4, .rodata, ov_SC06_022_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb882c, data, tail7] + - [0xb882c, data, tail8] - [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 5e723ad16..f7ce2afb2 100644 --- a/config/splat.ov_SC06_024.yaml +++ b/config/splat.ov_SC06_024.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC06_024_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC06_024_after] - [0x32cd4, c, ov_SC06_024_jr_8015AE2C] + - [0x42a14, c, ov_SC06_024_jr_8016AB6C] - [0x4b364, c, ov_SC06_024_jr_801734BC] - [0x50be8, c, ov_SC06_024_jr_80178D40] - [0x6764c, data, tail] @@ -110,10 +111,12 @@ segments: - [0xb7524, data, tail4] - [0xb7528, .rodata, ov_SC06_024_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xb7544, data, tail5] + - [0xb759c, .rodata, ov_SC06_024_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xb75bc, data, tail6] - [0xb763c, .rodata, ov_SC06_024_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb7650, data, tail6] + - [0xb7650, data, tail7] - [0xb77f8, .rodata, ov_SC06_024_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb7970, data, tail7] + - [0xb7970, data, tail8] - [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 5f82f53e7..ea5239b33 100644 --- a/config/splat.ov_SC06_025.yaml +++ b/config/splat.ov_SC06_025.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC06_025_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC06_025_after] - [0x32cd4, c, ov_SC06_025_jr_8015AE2C] + - [0x42a14, c, ov_SC06_025_jr_8016AB6C] - [0x4b364, c, ov_SC06_025_jr_801734BC] - [0x50be8, c, ov_SC06_025_jr_80178D40] - [0x5caf0, data, tail] @@ -110,10 +111,12 @@ segments: - [0x87844, data, tail4] - [0x87848, .rodata, ov_SC06_025_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x87864, data, tail5] + - [0x878bc, .rodata, ov_SC06_025_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x878dc, data, tail6] - [0x8795c, .rodata, ov_SC06_025_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x87970, data, tail6] + - [0x87970, data, tail7] - [0x87b18, .rodata, ov_SC06_025_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x87c90, data, tail7] + - [0x87c90, data, tail8] - [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 4270affb7..aed29f862 100644 --- a/config/splat.ov_SC06_027.yaml +++ b/config/splat.ov_SC06_027.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC06_027_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC06_027_after] - [0x32cd4, c, ov_SC06_027_jr_8015AE2C] + - [0x42a14, c, ov_SC06_027_jr_8016AB6C] - [0x4b364, c, ov_SC06_027_jr_801734BC] - [0x50be8, c, ov_SC06_027_jr_80178D40] - [0x55e30, data, tail] @@ -110,10 +111,12 @@ segments: - [0x73880, data, tail4] - [0x73884, .rodata, ov_SC06_027_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x738a0, data, tail5] + - [0x738f8, .rodata, ov_SC06_027_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x73918, data, tail6] - [0x73998, .rodata, ov_SC06_027_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x739ac, data, tail6] + - [0x739ac, data, tail7] - [0x73b54, .rodata, ov_SC06_027_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x73ccc, data, tail7] + - [0x73ccc, data, tail8] - [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 d93befe5a..9cee7f98c 100644 --- a/config/splat.ov_SC06_029.yaml +++ b/config/splat.ov_SC06_029.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC06_029_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC06_029_after] - [0x32cd4, c, ov_SC06_029_jr_8015AE2C] + - [0x42a14, c, ov_SC06_029_jr_8016AB6C] - [0x4b364, c, ov_SC06_029_jr_801734BC] - [0x50be8, c, ov_SC06_029_jr_80178D40] - [0x643c0, data, tail] @@ -110,10 +111,12 @@ segments: - [0xb2efc, data, tail4] - [0xb2f00, .rodata, ov_SC06_029_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xb2f1c, data, tail5] + - [0xb2f74, .rodata, ov_SC06_029_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xb2f94, data, tail6] - [0xb3014, .rodata, ov_SC06_029_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb3028, data, tail6] + - [0xb3028, data, tail7] - [0xb31d0, .rodata, ov_SC06_029_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb3348, data, tail7] + - [0xb3348, data, tail8] - [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 14c2e6834..8ef423bfd 100644 --- a/config/splat.ov_SC06_030.yaml +++ b/config/splat.ov_SC06_030.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC06_030_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC06_030_after] - [0x32cd4, c, ov_SC06_030_jr_8015AE2C] + - [0x42a14, c, ov_SC06_030_jr_8016AB6C] - [0x4b364, c, ov_SC06_030_jr_801734BC] - [0x50be8, c, ov_SC06_030_jr_80178D40] - [0x59cb4, data, tail] @@ -110,10 +111,12 @@ segments: - [0x90260, data, tail4] - [0x90264, .rodata, ov_SC06_030_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x90280, data, tail5] + - [0x902d8, .rodata, ov_SC06_030_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x902f8, data, tail6] - [0x90378, .rodata, ov_SC06_030_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9038c, data, tail6] + - [0x9038c, data, tail7] - [0x90534, .rodata, ov_SC06_030_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x906ac, data, tail7] + - [0x906ac, data, tail8] - [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 fa986ab93..73e5c8364 100644 --- a/config/splat.ov_SC06_032.yaml +++ b/config/splat.ov_SC06_032.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC06_032_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC06_032_after] - [0x32cd4, c, ov_SC06_032_jr_8015AE2C] + - [0x42a14, c, ov_SC06_032_jr_8016AB6C] - [0x4b364, c, ov_SC06_032_jr_801734BC] - [0x50be8, c, ov_SC06_032_jr_80178D40] - [0x6b180, data, tail] @@ -110,10 +111,12 @@ segments: - [0xa68bc, data, tail4] - [0xa68c0, .rodata, ov_SC06_032_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa68dc, data, tail5] + - [0xa6934, .rodata, ov_SC06_032_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa6954, data, tail6] - [0xa69d4, .rodata, ov_SC06_032_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa69e8, data, tail6] + - [0xa69e8, data, tail7] - [0xa6b90, .rodata, ov_SC06_032_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa6d08, data, tail7] + - [0xa6d08, data, tail8] - [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 38607a9d6..bdca75a6b 100644 --- a/config/splat.ov_SC06_033.yaml +++ b/config/splat.ov_SC06_033.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC06_033_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC06_033_after] - [0x32cd4, c, ov_SC06_033_jr_8015AE2C] + - [0x42a14, c, ov_SC06_033_jr_8016AB6C] - [0x4b364, c, ov_SC06_033_jr_801734BC] - [0x50be8, c, ov_SC06_033_jr_80178D40] - [0x69690, data, tail] @@ -110,10 +111,12 @@ segments: - [0xa6970, data, tail4] - [0xa6974, .rodata, ov_SC06_033_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa6990, data, tail5] + - [0xa69e8, .rodata, ov_SC06_033_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa6a08, data, tail6] - [0xa6a88, .rodata, ov_SC06_033_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa6a9c, data, tail6] + - [0xa6a9c, data, tail7] - [0xa6c44, .rodata, ov_SC06_033_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa6dbc, data, tail7] + - [0xa6dbc, data, tail8] - [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 cced79ca1..b6d6ccf60 100644 --- a/config/splat.ov_SC07_000.yaml +++ b/config/splat.ov_SC07_000.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC07_000_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC07_000_after] - [0x32cd4, c, ov_SC07_000_jr_8015AE2C] + - [0x42a14, c, ov_SC07_000_jr_8016AB6C] - [0x4b364, c, ov_SC07_000_jr_801734BC] - [0x50be8, c, ov_SC07_000_jr_80178D40] - [0x5a4d8, data, tail] @@ -110,10 +111,12 @@ segments: - [0xa5fcc, data, tail4] - [0xa5fd0, .rodata, ov_SC07_000_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa5fec, data, tail5] + - [0xa6044, .rodata, ov_SC07_000_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa6064, data, tail6] - [0xa60e4, .rodata, ov_SC07_000_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa60f8, data, tail6] + - [0xa60f8, data, tail7] - [0xa62a0, .rodata, ov_SC07_000_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa6418, data, tail7] + - [0xa6418, data, tail8] - [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 03b0e0f05..458e8521b 100644 --- a/config/splat.ov_SC07_001.yaml +++ b/config/splat.ov_SC07_001.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC07_001_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC07_001_after] - [0x32cd4, c, ov_SC07_001_jr_8015AE2C] + - [0x42a14, c, ov_SC07_001_jr_8016AB6C] - [0x4b364, c, ov_SC07_001_jr_801734BC] - [0x50be8, c, ov_SC07_001_jr_80178D40] - [0x59388, data, tail] @@ -110,10 +111,12 @@ segments: - [0x81168, data, tail4] - [0x8116c, .rodata, ov_SC07_001_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x81188, data, tail5] + - [0x811e0, .rodata, ov_SC07_001_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x81200, data, tail6] - [0x81280, .rodata, ov_SC07_001_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x81294, data, tail6] + - [0x81294, data, tail7] - [0x8143c, .rodata, ov_SC07_001_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x815b4, data, tail7] + - [0x815b4, data, tail8] - [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 5c26cdaa4..7fd4adc1b 100644 --- a/config/splat.ov_SC07_002.yaml +++ b/config/splat.ov_SC07_002.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC07_002_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC07_002_after] - [0x32cd4, c, ov_SC07_002_jr_8015AE2C] + - [0x42a14, c, ov_SC07_002_jr_8016AB6C] - [0x4b364, c, ov_SC07_002_jr_801734BC] - [0x50be8, c, ov_SC07_002_jr_80178D40] - [0x5e644, data, tail] @@ -110,10 +111,12 @@ segments: - [0x71b50, data, tail4] - [0x71b54, .rodata, ov_SC07_002_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x71b70, data, tail5] + - [0x71bc8, .rodata, ov_SC07_002_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x71be8, data, tail6] - [0x71c68, .rodata, ov_SC07_002_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x71c7c, data, tail6] + - [0x71c7c, data, tail7] - [0x71e24, .rodata, ov_SC07_002_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x71f9c, data, tail7] + - [0x71f9c, data, tail8] - [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 39886f276..969f652eb 100644 --- a/config/splat.ov_SC07_008.yaml +++ b/config/splat.ov_SC07_008.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC07_008_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC07_008_after] - [0x32cd4, c, ov_SC07_008_jr_8015AE2C] + - [0x42a14, c, ov_SC07_008_jr_8016AB6C] - [0x4b364, c, ov_SC07_008_jr_801734BC] - [0x50be8, c, ov_SC07_008_jr_80178D40] - [0x5515c, data, tail] @@ -110,10 +111,12 @@ segments: - [0x6cba0, data, tail4] - [0x6cba4, .rodata, ov_SC07_008_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6cbc0, data, tail5] + - [0x6cc18, .rodata, ov_SC07_008_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6cc38, data, tail6] - [0x6ccb8, .rodata, ov_SC07_008_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6cccc, data, tail6] + - [0x6cccc, data, tail7] - [0x6ce74, .rodata, ov_SC07_008_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6cfec, data, tail7] + - [0x6cfec, data, tail8] - [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 66cc4a53f..152d7d8d2 100644 --- a/config/splat.ov_SC07_009.yaml +++ b/config/splat.ov_SC07_009.yaml @@ -99,6 +99,7 @@ segments: - [0x1CA44, c, ov_SC07_009_o0b] # -O0 whale func_80144B9C (0x1CA44..0x1D64C) - [0x1d64c, c, ov_SC07_009_after] - [0x32cd4, c, ov_SC07_009_jr_8015AE2C] + - [0x42a14, c, ov_SC07_009_jr_8016AB6C] - [0x4b364, c, ov_SC07_009_jr_801734BC] - [0x50be8, c, ov_SC07_009_jr_80178D40] - [0x55c00, data, tail] @@ -110,10 +111,12 @@ segments: - [0x7a22c, data, tail4] - [0x7a230, .rodata, ov_SC07_009_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7a24c, data, tail5] + - [0x7a2a4, .rodata, ov_SC07_009_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x7a2c4, data, tail6] - [0x7a344, .rodata, ov_SC07_009_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7a358, data, tail6] + - [0x7a358, data, tail7] - [0x7a500, .rodata, ov_SC07_009_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7a678, data, tail7] + - [0x7a678, data, tail8] - [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_jr_8015AE2C.c b/src/ov_SC01_000/ov_SC01_000_jr_8015AE2C.c index 7608b1d21..03afc4a04 100644 --- a/src/ov_SC01_000/ov_SC01_000_jr_8015AE2C.c +++ b/src/ov_SC01_000/ov_SC01_000_jr_8015AE2C.c @@ -5188,1785 +5188,3 @@ extern void (*D_80181D74[])(void); void func_8016AB30(void *a0) { D_80181D74[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80181DF0[])(void); - -void func_8016B4BC(void *a0) { - D_80181DF0[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801A49E0; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801A49E0); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80181DE4[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80181DE4; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80181E28[]; -extern unsigned short D_80181E30[]; -extern unsigned short D_80181E38[]; -extern unsigned char D_801A49E8[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801A49E8 + param_2 * 0x40); - puVar3 = D_80181E28[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80181E30[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80181E38[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801A49E0; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801A49E0, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80181E40[])(void); - -void func_8016BBA4(void *a0) { - D_80181E40[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801A4B1C; - extern u8 D_801A4B1D; - extern u8 D_801A4B1E; - extern M2C_UNK D_801A4B20; - extern u8 D_801A4B21; - extern u8 D_801A4B22; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801A4B1C) = 0x20; - D_801A4B1D = 0x20; - D_801A4B1E = 0; - (*(u8 *)&D_801A4B20) = 0xc0; - D_801A4B21 = 0xc0; - D_801A4B22 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801A4B1C; -extern M2C_UNK D_801A4B20; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801A4B1C, &D_801A4B20, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801A4B1D; - extern u8 D_801A4B1E; - extern u8 D_801A4B21; - extern u8 D_801A4B22; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801A4B1C); - if (*p1 != 0) *p1 -= 4; - if (D_801A4B1D != 0) D_801A4B1D -= 4; - if (D_801A4B1E != 0) D_801A4B1E -= 4; - p2 = &(*(u8 *)&D_801A4B20); - if (*p2 != 0) *p2 -= 4; - if (D_801A4B21 != 0) D_801A4B21 -= 4; - if (D_801A4B22 != 0) D_801A4B22 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801A4B1C), &(*(int *)&D_801A4B20), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801A4AA8; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801A4AA8); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80181E50; - extern s32 D_80181E58; - extern s32 D_80181E60; - extern s32 D_80181E68; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80181E50, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80181E58, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80181E60, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80181E68, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80181E70[])(void); - -void func_8016C14C(void *a0) { - D_80181E70[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801A4B24[]; -extern u8 D_801A4B2C[]; -extern u8 D_801A4ADC[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801A4B24, D_801A4B2C, D_801A4ADC); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801A4B38[]; - extern u8 D_801A4BF8; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801A4B38[1] = 0xff; - D_801A4B38[2] = 0x10; - D_801A4B38[0] = 0x10; - D_801A4B38[6] = 0; - D_801A4B38[5] = 0; - D_801A4B38[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801A4B38, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801A4BF8, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801A4B38); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8015AE2C", func_8016C998); - - -extern void (*D_80181E78[])(void); - -void func_8016CB84(void *a0) { - D_80181E78[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801A4BF8[]; - - - Blk_8016CF04_8016CF04 *p = &D_801A4BF8[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80181E94[])(void); - -void func_8016D19C(void *a0) { - D_80181E94[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80181E9C[])(void); - -void func_8016D428(void *a0) { - D_80181E9C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80181F04[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80181F04[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80181EA8; -extern u8 D_80181EB4; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80181EA8, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80181EB4); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80181F38[])(void); - -void func_8016DEA4(void *a0) { - D_80181F38[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80181F40[])(void); - -void func_8016DF20(void *a0) { - D_80181F40[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80181F94[])(void); - -void func_8016E5B8(void *a0) { - D_80181F94[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80181F54[4]; - extern s32 D_80181F74; - extern s32 D_80181F7C; - extern s32 D_80181F84; - extern s32 D_80181F8C; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80181F54[0], pp, &tmp); - RotTransSV(&D_80181F54[1], &prim.v[1], &tmp); - RotTransSV(&D_80181F54[2], &prim.v[2], &tmp); - RotTransSV(&D_80181F54[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80181F74; - prim.f1 = D_80181F7C; - prim.f2 = D_80181F84; - prim.f3 = D_80181F8C; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80181FD4[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80181FD4[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80181FC8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80181FC8[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80181FB8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80181FB8[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80181FC8[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80181FC8[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80181FC8[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80181FE4; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80181FE4; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_8018205C[])(void); - -void func_8016F6E0(void *a0) { - D_8018205C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80182064[])(void); - -void func_8016F798(void *a0) { - D_80182064[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_8018206C[])(void); - -void func_8016F834(void *a0) { - D_8018206C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80182074[])(void); - -void func_8016F8E4(void *a0) { - D_80182074[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_8018207C[])(void); - -void func_8016F9C4(void *a0) { - D_8018207C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80182084[])(void); - -void func_8016FA84(void *a0) { - D_80182084[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80182090[])(void); - -void func_8016FB7C(void *a0) { - D_80182090[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_8018209C[])(void); - -void func_8016FC90(void *a0) { - D_8018209C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_801820A8[])(void); - -void func_8016FDB4(void *a0) { - D_801820A8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_801820B8[])(void); - -void func_8016FF30(void *a0) { - D_801820B8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_801820C8[])(void); - -void func_8016FFDC(void *a0) { - D_801820C8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_801820D0[])(void); - -void func_80170150(void *a0) { - D_801820D0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_801820D8[])(void); - -void func_80170240(void *a0) { - D_801820D8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_801820E0[])(void); - -void func_801702FC(void *a0) { - D_801820E0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_801820E8[])(void); - -void func_801703E0(void *a0) { - D_801820E8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_801820F0[])(void); - -void func_801704B0(void *a0) { - D_801820F0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_801820F8[])(void); - -void func_80170548(void *a0) { - D_801820F8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - - -extern void (*D_80182100[])(void); - -void func_801705F8(void *a0) { - D_80182100[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80182108[])(void); - -void func_801706AC(void *a0) { - D_80182108[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80182110[])(void); - -void func_80170748(void *a0) { - D_80182110[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80182118[])(void); - -void func_80170810(void *a0) { - D_80182118[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80182120[])(void); - -void func_80170AD8(void *a0) { - D_80182120[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80182128[])(void); - -void func_80170BD8(void *a0) { - D_80182128[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80182130[])(void); - -void func_80170C74(void *a0) { - D_80182130[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80182138[])(void); - -void func_80170D68(void *a0) { - D_80182138[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80182140[])(void); - -void func_80170E34(void *a0) { - D_80182140[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80182148[])(void); - -void func_80170EFC(void *a0) { - D_80182148[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80182150[])(void); - -void func_80170FB0(void *a0) { - D_80182150[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80182158[])(void); - -void func_80171064(void *a0) { - D_80182158[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80182160[])(void); - -void func_80171120(void *a0) { - D_80182160[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80182168[])(void); - -void func_801711C0(void *a0) { - D_80182168[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80182170[])(void); - -void func_80171260(void *a0) { - D_80182170[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80182178[])(void); - -void func_801714E4(void *a0) { - D_80182178[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8015AE2C", func_80172C50); - - -extern void (*D_801821BC[])(void); - -void func_80172CA0(void *a0) { - D_801821BC[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80182180; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80182180); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC01_000/ov_SC01_000_jr_8016AB6C.c b/src/ov_SC01_000/ov_SC01_000_jr_8016AB6C.c new file mode 100644 index 000000000..98e6ed3c8 --- /dev/null +++ b/src/ov_SC01_000/ov_SC01_000_jr_8016AB6C.c @@ -0,0 +1,3951 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80181140; +extern u8 D_801810B0; +extern u8 D_8018108C; +extern u8 D_80181068; +extern u8 D_8018111C; +extern u8 D_801810F8; +extern u8 D_801810D4; +extern u8 D_80181044; +extern void func_80145934(void); +extern u8 D_801811D0; +extern u8 D_801811AC; +extern u8 D_80181188; +extern u8 D_80181164; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801805C8[]; +extern unsigned char D_801805F8[]; +extern unsigned char D_80180648[]; +extern unsigned char D_80180678[]; +extern unsigned char D_801806A8[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801806F8[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801807C0[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80180848[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80180850; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801A4570; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801A4574; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80180880; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80180928[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018094C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018093C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80180960[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018096C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018097C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80180994[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80180984; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801809A8[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801809C4[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801809B4; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801809D8[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801809EC[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80180A00; +extern void (*D_80180A28[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80180A08; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80180A74[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80180A78[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80180EDC[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80180EEC[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801A45A8; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80180F14[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80180EF4; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80180F04; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80180F54[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80180F5C[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80180F28; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80180F68[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80180F38; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801A45B0; +extern s32 D_801A45BC; +extern s32 D_801A45C0; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80180FA4[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80180F78[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801A45B8; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_801811F4[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80181014[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80181298[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_801813EC[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80181208; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_801813F4[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80181218; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80181238; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_801813FC[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80181424[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80181430[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_801812A4[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_801814D4; +extern void func_8015D380(s32 a0); +extern unsigned char D_801805B8[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_801814E8[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80181524[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_8018156C; +extern u16 D_8018156E; +extern u16 D_80181570; +extern s32 D_80181574; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_8018157C; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80181288; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80181600[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_801816B0[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_801816E0[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80181744; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801A45C8[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80181768[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801A4620[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_801817B0[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_801817A0; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801A3E54[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_801817B8[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_8018180C[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_801817D4; +extern s16 D_80181808; +extern s16 D_80181806; +extern s16 D_80181804; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80181818[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801A4680; +extern u8 D_801A4681; +extern u8 D_801A4682; +extern u8 D_801A4683; +extern u8 D_801A4684; +extern u8 D_801A4685; +extern u8 D_801A4686; +extern u8 D_801A4687; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80181828[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801A46C0; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_8018186C[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_801818E8[]; +extern u8 func_80165658(s32 arg0, s32 arg1); +extern s32 D_80181908[]; +extern u8 D_80181984[]; +extern s32 func_801656D0(s32 arg0, s32 arg1); +extern u8 D_801819A4[]; +extern u8 func_801656E8(s32 arg0, s32 arg1); +extern u8 D_801819C4[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80181A60[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80181ADC[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801A3E64; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80181AE8[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80181AF0[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80181BB8[])(void); +extern void func_80166618(void *a0); +extern void (*D_80181BC8[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80181BD8[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80181BE4[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80181B44[]; +extern u8 D_80181B58[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80181BFC[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80181C04[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80181C0C[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80181C14[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80181C1C[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80181C24[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80181C2C[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80181CE0[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80181CE8[])(void); +extern void func_80169F00(void *a0); +extern char D_80181C98[]; +extern char D_80181C58[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80181D20[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80181D2C[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80181D74[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80181D34[]; + extern u8 D_80181D44[]; + extern u8 D_801A4990[]; + extern u8 D_801A49B8[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80181D34, D_801A4990) + 3; + func_8001CE28(obj, D_801A4990); + } else { + var_s3 = func_80024054(D_80181D44, D_801A49B8) + 9; + func_8001CE28(obj, D_801A49B8); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80181DF0[])(void); + +void func_8016B4BC(void *a0) { + D_80181DF0[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801A49E0; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801A49E0); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80181DE4[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80181DE4; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80181E28[]; +extern unsigned short D_80181E30[]; +extern unsigned short D_80181E38[]; +extern unsigned char D_801A49E8[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801A49E8 + param_2 * 0x40); + puVar3 = D_80181E28[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80181E30[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80181E38[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801A49E0; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801A49E0, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80181E40[])(void); + +void func_8016BBA4(void *a0) { + D_80181E40[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801A4B1C; + extern u8 D_801A4B1D; + extern u8 D_801A4B1E; + extern M2C_UNK D_801A4B20; + extern u8 D_801A4B21; + extern u8 D_801A4B22; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801A4B1C) = 0x20; + D_801A4B1D = 0x20; + D_801A4B1E = 0; + (*(u8 *)&D_801A4B20) = 0xc0; + D_801A4B21 = 0xc0; + D_801A4B22 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801A4B1C; +extern M2C_UNK D_801A4B20; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801A4B1C, &D_801A4B20, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801A4B1D; + extern u8 D_801A4B1E; + extern u8 D_801A4B21; + extern u8 D_801A4B22; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801A4B1C); + if (*p1 != 0) *p1 -= 4; + if (D_801A4B1D != 0) D_801A4B1D -= 4; + if (D_801A4B1E != 0) D_801A4B1E -= 4; + p2 = &(*(u8 *)&D_801A4B20); + if (*p2 != 0) *p2 -= 4; + if (D_801A4B21 != 0) D_801A4B21 -= 4; + if (D_801A4B22 != 0) D_801A4B22 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801A4B1C), &(*(int *)&D_801A4B20), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801A4AA8; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801A4AA8); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80181E50; + extern s32 D_80181E58; + extern s32 D_80181E60; + extern s32 D_80181E68; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80181E50, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80181E58, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80181E60, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80181E68, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80181E70[])(void); + +void func_8016C14C(void *a0) { + D_80181E70[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801A4B24[]; +extern u8 D_801A4B2C[]; +extern u8 D_801A4ADC[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801A4B24, D_801A4B2C, D_801A4ADC); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801A4B38[]; + extern u8 D_801A4BF8; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801A4B38[1] = 0xff; + D_801A4B38[2] = 0x10; + D_801A4B38[0] = 0x10; + D_801A4B38[6] = 0; + D_801A4B38[5] = 0; + D_801A4B38[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801A4B38, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801A4BF8, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801A4B38); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8016AB6C", func_8016C998); + + +extern void (*D_80181E78[])(void); + +void func_8016CB84(void *a0) { + D_80181E78[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801A4BF8[]; + + + Blk_8016CF04_8016CF04 *p = &D_801A4BF8[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80181E94[])(void); + +void func_8016D19C(void *a0) { + D_80181E94[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80181E9C[])(void); + +void func_8016D428(void *a0) { + D_80181E9C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80181F04[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80181F04[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80181EA8; +extern u8 D_80181EB4; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80181EA8, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80181EB4); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80181F38[])(void); + +void func_8016DEA4(void *a0) { + D_80181F38[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80181F40[])(void); + +void func_8016DF20(void *a0) { + D_80181F40[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80181F94[])(void); + +void func_8016E5B8(void *a0) { + D_80181F94[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80181F54[4]; + extern s32 D_80181F74; + extern s32 D_80181F7C; + extern s32 D_80181F84; + extern s32 D_80181F8C; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80181F54[0], pp, &tmp); + RotTransSV(&D_80181F54[1], &prim.v[1], &tmp); + RotTransSV(&D_80181F54[2], &prim.v[2], &tmp); + RotTransSV(&D_80181F54[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80181F74; + prim.f1 = D_80181F7C; + prim.f2 = D_80181F84; + prim.f3 = D_80181F8C; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80181FD4[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80181FD4[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80181FC8[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80181FC8[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80181FB8[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80181FB8[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80181FC8[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80181FC8[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80181FC8[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80181FE4; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80181FE4; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_8018205C[])(void); + +void func_8016F6E0(void *a0) { + D_8018205C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80182064[])(void); + +void func_8016F798(void *a0) { + D_80182064[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_8018206C[])(void); + +void func_8016F834(void *a0) { + D_8018206C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80182074[])(void); + +void func_8016F8E4(void *a0) { + D_80182074[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_8018207C[])(void); + +void func_8016F9C4(void *a0) { + D_8018207C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80182084[])(void); + +void func_8016FA84(void *a0) { + D_80182084[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80182090[])(void); + +void func_8016FB7C(void *a0) { + D_80182090[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_8018209C[])(void); + +void func_8016FC90(void *a0) { + D_8018209C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_801820A8[])(void); + +void func_8016FDB4(void *a0) { + D_801820A8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_801820B8[])(void); + +void func_8016FF30(void *a0) { + D_801820B8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_801820C8[])(void); + +void func_8016FFDC(void *a0) { + D_801820C8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_801820D0[])(void); + +void func_80170150(void *a0) { + D_801820D0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_801820D8[])(void); + +void func_80170240(void *a0) { + D_801820D8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_801820E0[])(void); + +void func_801702FC(void *a0) { + D_801820E0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_801820E8[])(void); + +void func_801703E0(void *a0) { + D_801820E8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_801820F0[])(void); + +void func_801704B0(void *a0) { + D_801820F0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_801820F8[])(void); + +void func_80170548(void *a0) { + D_801820F8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + + +extern void (*D_80182100[])(void); + +void func_801705F8(void *a0) { + D_80182100[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80182108[])(void); + +void func_801706AC(void *a0) { + D_80182108[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80182110[])(void); + +void func_80170748(void *a0) { + D_80182110[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80182118[])(void); + +void func_80170810(void *a0) { + D_80182118[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80182120[])(void); + +void func_80170AD8(void *a0) { + D_80182120[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80182128[])(void); + +void func_80170BD8(void *a0) { + D_80182128[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80182130[])(void); + +void func_80170C74(void *a0) { + D_80182130[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80182138[])(void); + +void func_80170D68(void *a0) { + D_80182138[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80182140[])(void); + +void func_80170E34(void *a0) { + D_80182140[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80182148[])(void); + +void func_80170EFC(void *a0) { + D_80182148[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80182150[])(void); + +void func_80170FB0(void *a0) { + D_80182150[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80182158[])(void); + +void func_80171064(void *a0) { + D_80182158[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80182160[])(void); + +void func_80171120(void *a0) { + D_80182160[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80182168[])(void); + +void func_801711C0(void *a0) { + D_80182168[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80182170[])(void); + +void func_80171260(void *a0) { + D_80182170[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80182178[])(void); + +void func_801714E4(void *a0) { + D_80182178[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8016AB6C", func_80172C50); + + +extern void (*D_801821BC[])(void); + +void func_80172CA0(void *a0) { + D_801821BC[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80182180; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80182180); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC01_001/ov_SC01_001_jr_8015AE2C.c b/src/ov_SC01_001/ov_SC01_001_jr_8015AE2C.c index ef139d325..d8c7afd23 100644 --- a/src/ov_SC01_001/ov_SC01_001_jr_8015AE2C.c +++ b/src/ov_SC01_001/ov_SC01_001_jr_8015AE2C.c @@ -5188,1785 +5188,3 @@ extern void (*D_801869C4[])(void); void func_8016AB30(void *a0) { D_801869C4[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80186A40[])(void); - -void func_8016B4BC(void *a0) { - D_80186A40[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801ECC70; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801ECC70); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80186A34[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80186A34; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80186A78[]; -extern unsigned short D_80186A80[]; -extern unsigned short D_80186A88[]; -extern unsigned char D_801ECC78[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801ECC78 + param_2 * 0x40); - puVar3 = D_80186A78[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80186A80[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80186A88[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801ECC70; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801ECC70, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80186A90[])(void); - -void func_8016BBA4(void *a0) { - D_80186A90[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801ECDAC; - extern u8 D_801ECDAD; - extern u8 D_801ECDAE; - extern M2C_UNK D_801ECDB0; - extern u8 D_801ECDB1; - extern u8 D_801ECDB2; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801ECDAC) = 0x20; - D_801ECDAD = 0x20; - D_801ECDAE = 0; - (*(u8 *)&D_801ECDB0) = 0xc0; - D_801ECDB1 = 0xc0; - D_801ECDB2 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801ECDAC; -extern M2C_UNK D_801ECDB0; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801ECDAC, &D_801ECDB0, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801ECDAD; - extern u8 D_801ECDAE; - extern u8 D_801ECDB1; - extern u8 D_801ECDB2; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801ECDAC); - if (*p1 != 0) *p1 -= 4; - if (D_801ECDAD != 0) D_801ECDAD -= 4; - if (D_801ECDAE != 0) D_801ECDAE -= 4; - p2 = &(*(u8 *)&D_801ECDB0); - if (*p2 != 0) *p2 -= 4; - if (D_801ECDB1 != 0) D_801ECDB1 -= 4; - if (D_801ECDB2 != 0) D_801ECDB2 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801ECDAC), &(*(int *)&D_801ECDB0), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801ECD38; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801ECD38); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80186AA0; - extern s32 D_80186AA8; - extern s32 D_80186AB0; - extern s32 D_80186AB8; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80186AA0, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80186AA8, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80186AB0, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80186AB8, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80186AC0[])(void); - -void func_8016C14C(void *a0) { - D_80186AC0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801ECDB4[]; -extern u8 D_801ECDBC[]; -extern u8 D_801ECD6C[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801ECDB4, D_801ECDBC, D_801ECD6C); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801ECDC8[]; - extern u8 D_801ECE88; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801ECDC8[1] = 0xff; - D_801ECDC8[2] = 0x10; - D_801ECDC8[0] = 0x10; - D_801ECDC8[6] = 0; - D_801ECDC8[5] = 0; - D_801ECDC8[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801ECDC8, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801ECE88, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801ECDC8); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8015AE2C", func_8016C998); - - -extern void (*D_80186AC8[])(void); - -void func_8016CB84(void *a0) { - D_80186AC8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801ECE88[]; - - - Blk_8016CF04_8016CF04 *p = &D_801ECE88[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80186AE4[])(void); - -void func_8016D19C(void *a0) { - D_80186AE4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80186AEC[])(void); - -void func_8016D428(void *a0) { - D_80186AEC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80186B54[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80186B54[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80186AF8; -extern u8 D_80186B04; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80186AF8, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80186B04); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80186B88[])(void); - -void func_8016DEA4(void *a0) { - D_80186B88[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80186B90[])(void); - -void func_8016DF20(void *a0) { - D_80186B90[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80186BE4[])(void); - -void func_8016E5B8(void *a0) { - D_80186BE4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80186BA4[4]; - extern s32 D_80186BC4; - extern s32 D_80186BCC; - extern s32 D_80186BD4; - extern s32 D_80186BDC; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80186BA4[0], pp, &tmp); - RotTransSV(&D_80186BA4[1], &prim.v[1], &tmp); - RotTransSV(&D_80186BA4[2], &prim.v[2], &tmp); - RotTransSV(&D_80186BA4[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80186BC4; - prim.f1 = D_80186BCC; - prim.f2 = D_80186BD4; - prim.f3 = D_80186BDC; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80186C24[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80186C24[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80186C18[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80186C18[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80186C08[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80186C08[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80186C18[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80186C18[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80186C18[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80186C34; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80186C34; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80186CAC[])(void); - -void func_8016F6E0(void *a0) { - D_80186CAC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80186CB4[])(void); - -void func_8016F798(void *a0) { - D_80186CB4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80186CBC[])(void); - -void func_8016F834(void *a0) { - D_80186CBC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80186CC4[])(void); - -void func_8016F8E4(void *a0) { - D_80186CC4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80186CCC[])(void); - -void func_8016F9C4(void *a0) { - D_80186CCC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80186CD4[])(void); - -void func_8016FA84(void *a0) { - D_80186CD4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80186CE0[])(void); - -void func_8016FB7C(void *a0) { - D_80186CE0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80186CEC[])(void); - -void func_8016FC90(void *a0) { - D_80186CEC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80186CF8[])(void); - -void func_8016FDB4(void *a0) { - D_80186CF8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80186D08[])(void); - -void func_8016FF30(void *a0) { - D_80186D08[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80186D18[])(void); - -void func_8016FFDC(void *a0) { - D_80186D18[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80186D20[])(void); - -void func_80170150(void *a0) { - D_80186D20[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80186D28[])(void); - -void func_80170240(void *a0) { - D_80186D28[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80186D30[])(void); - -void func_801702FC(void *a0) { - D_80186D30[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80186D38[])(void); - -void func_801703E0(void *a0) { - D_80186D38[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80186D40[])(void); - -void func_801704B0(void *a0) { - D_80186D40[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80186D48[])(void); - -void func_80170548(void *a0) { - D_80186D48[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - - -extern void (*D_80186D50[])(void); - -void func_801705F8(void *a0) { - D_80186D50[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80186D58[])(void); - -void func_801706AC(void *a0) { - D_80186D58[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80186D60[])(void); - -void func_80170748(void *a0) { - D_80186D60[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80186D68[])(void); - -void func_80170810(void *a0) { - D_80186D68[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80186D70[])(void); - -void func_80170AD8(void *a0) { - D_80186D70[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80186D78[])(void); - -void func_80170BD8(void *a0) { - D_80186D78[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80186D80[])(void); - -void func_80170C74(void *a0) { - D_80186D80[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80186D88[])(void); - -void func_80170D68(void *a0) { - D_80186D88[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80186D90[])(void); - -void func_80170E34(void *a0) { - D_80186D90[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80186D98[])(void); - -void func_80170EFC(void *a0) { - D_80186D98[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80186DA0[])(void); - -void func_80170FB0(void *a0) { - D_80186DA0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80186DA8[])(void); - -void func_80171064(void *a0) { - D_80186DA8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80186DB0[])(void); - -void func_80171120(void *a0) { - D_80186DB0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80186DB8[])(void); - -void func_801711C0(void *a0) { - D_80186DB8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80186DC0[])(void); - -void func_80171260(void *a0) { - D_80186DC0[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80186DC8[])(void); - -void func_801714E4(void *a0) { - D_80186DC8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8015AE2C", func_80172C50); - - -extern void (*D_80186E0C[])(void); - -void func_80172CA0(void *a0) { - D_80186E0C[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80186DD0; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80186DD0); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC01_001/ov_SC01_001_jr_8016AB6C.c b/src/ov_SC01_001/ov_SC01_001_jr_8016AB6C.c new file mode 100644 index 000000000..a4d61e710 --- /dev/null +++ b/src/ov_SC01_001/ov_SC01_001_jr_8016AB6C.c @@ -0,0 +1,3949 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80185D90; +extern u8 D_80185D00; +extern u8 D_80185CDC; +extern u8 D_80185CB8; +extern u8 D_80185D6C; +extern u8 D_80185D48; +extern u8 D_80185D24; +extern u8 D_80185C94; +extern void func_80145934(void); +extern u8 D_80185E20; +extern u8 D_80185DFC; +extern u8 D_80185DD8; +extern u8 D_80185DB4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80185218[]; +extern unsigned char D_80185248[]; +extern unsigned char D_80185298[]; +extern unsigned char D_801852C8[]; +extern unsigned char D_801852F8[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80185348[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80185410[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80185498[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801854A0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801EC800; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801EC804; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801854D0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80185578[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018559C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018558C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801855B0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801855BC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801855CC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801855E4[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801855D4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801855F8[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80185614[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80185604; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80185628[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018563C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80185650; +extern void (*D_80185678[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80185658; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801856C4[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801856C8[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80185B2C[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80185B3C[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801EC838; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80185B64[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80185B44; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80185B54; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80185BA4[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80185BAC[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80185B78; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80185BB8[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80185B88; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801EC840; +extern s32 D_801EC84C; +extern s32 D_801EC850; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80185BF4[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80185BC8[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801EC848; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80185E44[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80185C64[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80185EE8[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018603C[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80185E58; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80186044[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80185E68; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80185E88; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_8018604C[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80186074[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80186080[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80185EF4[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80186124; +extern void func_8015D380(s32 a0); +extern unsigned char D_80185208[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80186138[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80186174[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_801861BC; +extern u16 D_801861BE; +extern u16 D_801861C0; +extern s32 D_801861C4; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_801861CC; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80185ED8; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80186250[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80186300[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80186330[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80186394; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801EC858[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_801863B8[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801EC8B0[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80186400[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_801863F0; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801EBF2C[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80186408[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_8018645C[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80186424; +extern s16 D_80186458; +extern s16 D_80186456; +extern s16 D_80186454; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80186468[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801EC910; +extern u8 D_801EC911; +extern u8 D_801EC912; +extern u8 D_801EC913; +extern u8 D_801EC914; +extern u8 D_801EC915; +extern u8 D_801EC916; +extern u8 D_801EC917; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80186478[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801EC950; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_801864BC[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80186538[]; +extern s32 D_80186558[]; +extern u8 D_801865D4[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_801865F4[]; +extern u8 D_80186614[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_801866B0[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_8018672C[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801EBF3C; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80186738[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80186740[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80186808[])(void); +extern void func_80166618(void *a0); +extern void (*D_80186818[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80186828[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80186834[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80186794[]; +extern u8 D_801867A8[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_8018684C[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80186854[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_8018685C[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80186864[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_8018686C[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80186874[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_8018687C[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80186930[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80186938[])(void); +extern void func_80169F00(void *a0); +extern char D_801868E8[]; +extern char D_801868A8[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80186970[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_8018697C[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_801869C4[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80186984[]; + extern u8 D_80186994[]; + extern u8 D_801ECC20[]; + extern u8 D_801ECC48[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80186984, D_801ECC20) + 3; + func_8001CE28(obj, D_801ECC20); + } else { + var_s3 = func_80024054(D_80186994, D_801ECC48) + 9; + func_8001CE28(obj, D_801ECC48); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80186A40[])(void); + +void func_8016B4BC(void *a0) { + D_80186A40[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801ECC70; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801ECC70); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80186A34[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80186A34; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80186A78[]; +extern unsigned short D_80186A80[]; +extern unsigned short D_80186A88[]; +extern unsigned char D_801ECC78[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801ECC78 + param_2 * 0x40); + puVar3 = D_80186A78[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80186A80[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80186A88[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801ECC70; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801ECC70, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80186A90[])(void); + +void func_8016BBA4(void *a0) { + D_80186A90[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801ECDAC; + extern u8 D_801ECDAD; + extern u8 D_801ECDAE; + extern M2C_UNK D_801ECDB0; + extern u8 D_801ECDB1; + extern u8 D_801ECDB2; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801ECDAC) = 0x20; + D_801ECDAD = 0x20; + D_801ECDAE = 0; + (*(u8 *)&D_801ECDB0) = 0xc0; + D_801ECDB1 = 0xc0; + D_801ECDB2 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801ECDAC; +extern M2C_UNK D_801ECDB0; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801ECDAC, &D_801ECDB0, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801ECDAD; + extern u8 D_801ECDAE; + extern u8 D_801ECDB1; + extern u8 D_801ECDB2; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801ECDAC); + if (*p1 != 0) *p1 -= 4; + if (D_801ECDAD != 0) D_801ECDAD -= 4; + if (D_801ECDAE != 0) D_801ECDAE -= 4; + p2 = &(*(u8 *)&D_801ECDB0); + if (*p2 != 0) *p2 -= 4; + if (D_801ECDB1 != 0) D_801ECDB1 -= 4; + if (D_801ECDB2 != 0) D_801ECDB2 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801ECDAC), &(*(int *)&D_801ECDB0), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801ECD38; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801ECD38); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80186AA0; + extern s32 D_80186AA8; + extern s32 D_80186AB0; + extern s32 D_80186AB8; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80186AA0, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80186AA8, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80186AB0, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80186AB8, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80186AC0[])(void); + +void func_8016C14C(void *a0) { + D_80186AC0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801ECDB4[]; +extern u8 D_801ECDBC[]; +extern u8 D_801ECD6C[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801ECDB4, D_801ECDBC, D_801ECD6C); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801ECDC8[]; + extern u8 D_801ECE88; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801ECDC8[1] = 0xff; + D_801ECDC8[2] = 0x10; + D_801ECDC8[0] = 0x10; + D_801ECDC8[6] = 0; + D_801ECDC8[5] = 0; + D_801ECDC8[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801ECDC8, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801ECE88, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801ECDC8); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8016AB6C", func_8016C998); + + +extern void (*D_80186AC8[])(void); + +void func_8016CB84(void *a0) { + D_80186AC8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801ECE88[]; + + + Blk_8016CF04_8016CF04 *p = &D_801ECE88[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80186AE4[])(void); + +void func_8016D19C(void *a0) { + D_80186AE4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80186AEC[])(void); + +void func_8016D428(void *a0) { + D_80186AEC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80186B54[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80186B54[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80186AF8; +extern u8 D_80186B04; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80186AF8, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80186B04); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80186B88[])(void); + +void func_8016DEA4(void *a0) { + D_80186B88[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80186B90[])(void); + +void func_8016DF20(void *a0) { + D_80186B90[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80186BE4[])(void); + +void func_8016E5B8(void *a0) { + D_80186BE4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80186BA4[4]; + extern s32 D_80186BC4; + extern s32 D_80186BCC; + extern s32 D_80186BD4; + extern s32 D_80186BDC; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80186BA4[0], pp, &tmp); + RotTransSV(&D_80186BA4[1], &prim.v[1], &tmp); + RotTransSV(&D_80186BA4[2], &prim.v[2], &tmp); + RotTransSV(&D_80186BA4[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80186BC4; + prim.f1 = D_80186BCC; + prim.f2 = D_80186BD4; + prim.f3 = D_80186BDC; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80186C24[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80186C24[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80186C18[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80186C18[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80186C08[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80186C08[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80186C18[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80186C18[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80186C18[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80186C34; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80186C34; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80186CAC[])(void); + +void func_8016F6E0(void *a0) { + D_80186CAC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80186CB4[])(void); + +void func_8016F798(void *a0) { + D_80186CB4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80186CBC[])(void); + +void func_8016F834(void *a0) { + D_80186CBC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80186CC4[])(void); + +void func_8016F8E4(void *a0) { + D_80186CC4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80186CCC[])(void); + +void func_8016F9C4(void *a0) { + D_80186CCC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80186CD4[])(void); + +void func_8016FA84(void *a0) { + D_80186CD4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80186CE0[])(void); + +void func_8016FB7C(void *a0) { + D_80186CE0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80186CEC[])(void); + +void func_8016FC90(void *a0) { + D_80186CEC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80186CF8[])(void); + +void func_8016FDB4(void *a0) { + D_80186CF8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80186D08[])(void); + +void func_8016FF30(void *a0) { + D_80186D08[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80186D18[])(void); + +void func_8016FFDC(void *a0) { + D_80186D18[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80186D20[])(void); + +void func_80170150(void *a0) { + D_80186D20[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80186D28[])(void); + +void func_80170240(void *a0) { + D_80186D28[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80186D30[])(void); + +void func_801702FC(void *a0) { + D_80186D30[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80186D38[])(void); + +void func_801703E0(void *a0) { + D_80186D38[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80186D40[])(void); + +void func_801704B0(void *a0) { + D_80186D40[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80186D48[])(void); + +void func_80170548(void *a0) { + D_80186D48[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + + +extern void (*D_80186D50[])(void); + +void func_801705F8(void *a0) { + D_80186D50[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80186D58[])(void); + +void func_801706AC(void *a0) { + D_80186D58[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80186D60[])(void); + +void func_80170748(void *a0) { + D_80186D60[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80186D68[])(void); + +void func_80170810(void *a0) { + D_80186D68[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80186D70[])(void); + +void func_80170AD8(void *a0) { + D_80186D70[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80186D78[])(void); + +void func_80170BD8(void *a0) { + D_80186D78[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80186D80[])(void); + +void func_80170C74(void *a0) { + D_80186D80[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80186D88[])(void); + +void func_80170D68(void *a0) { + D_80186D88[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80186D90[])(void); + +void func_80170E34(void *a0) { + D_80186D90[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80186D98[])(void); + +void func_80170EFC(void *a0) { + D_80186D98[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80186DA0[])(void); + +void func_80170FB0(void *a0) { + D_80186DA0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80186DA8[])(void); + +void func_80171064(void *a0) { + D_80186DA8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80186DB0[])(void); + +void func_80171120(void *a0) { + D_80186DB0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80186DB8[])(void); + +void func_801711C0(void *a0) { + D_80186DB8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80186DC0[])(void); + +void func_80171260(void *a0) { + D_80186DC0[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80186DC8[])(void); + +void func_801714E4(void *a0) { + D_80186DC8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8016AB6C", func_80172C50); + + +extern void (*D_80186E0C[])(void); + +void func_80172CA0(void *a0) { + D_80186E0C[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80186DD0; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80186DD0); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC01_004/ov_SC01_004_jr_8015AE2C.c b/src/ov_SC01_004/ov_SC01_004_jr_8015AE2C.c index 567fbfcb3..ab15b8761 100644 --- a/src/ov_SC01_004/ov_SC01_004_jr_8015AE2C.c +++ b/src/ov_SC01_004/ov_SC01_004_jr_8015AE2C.c @@ -5190,1785 +5190,3 @@ extern void (*D_80182388[])(void); void func_8016AB30(void *a0) { D_80182388[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80182404[])(void); - -void func_8016B4BC(void *a0) { - D_80182404[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_8018F3D8; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_8018F3D8); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_801823F8[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_801823F8; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_8018243C[]; -extern unsigned short D_80182444[]; -extern unsigned short D_8018244C[]; -extern unsigned char D_8018F3E0[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_8018F3E0 + param_2 * 0x40); - puVar3 = D_8018243C[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80182444[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_8018244C[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_8018F3D8; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_8018F3D8, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80182454[])(void); - -void func_8016BBA4(void *a0) { - D_80182454[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_8018F514; - extern u8 D_8018F515; - extern u8 D_8018F516; - extern M2C_UNK D_8018F518; - extern u8 D_8018F519; - extern u8 D_8018F51A; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_8018F514) = 0x20; - D_8018F515 = 0x20; - D_8018F516 = 0; - (*(u8 *)&D_8018F518) = 0xc0; - D_8018F519 = 0xc0; - D_8018F51A = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_8018F514; -extern M2C_UNK D_8018F518; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_8018F514, &D_8018F518, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_8018F515; - extern u8 D_8018F516; - extern u8 D_8018F519; - extern u8 D_8018F51A; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_8018F514); - if (*p1 != 0) *p1 -= 4; - if (D_8018F515 != 0) D_8018F515 -= 4; - if (D_8018F516 != 0) D_8018F516 -= 4; - p2 = &(*(u8 *)&D_8018F518); - if (*p2 != 0) *p2 -= 4; - if (D_8018F519 != 0) D_8018F519 -= 4; - if (D_8018F51A != 0) D_8018F51A -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_8018F514), &(*(int *)&D_8018F518), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_8018F4A0; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_8018F4A0); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80182464; - extern s32 D_8018246C; - extern s32 D_80182474; - extern s32 D_8018247C; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80182464, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_8018246C, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80182474, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_8018247C, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80182484[])(void); - -void func_8016C14C(void *a0) { - D_80182484[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_8018F51C[]; -extern u8 D_8018F524[]; -extern u8 D_8018F4D4[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_8018F51C, D_8018F524, D_8018F4D4); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_8018F530[]; - extern u8 D_8018F5F0; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_8018F530[1] = 0xff; - D_8018F530[2] = 0x10; - D_8018F530[0] = 0x10; - D_8018F530[6] = 0; - D_8018F530[5] = 0; - D_8018F530[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_8018F530, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_8018F5F0, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_8018F530); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8015AE2C", func_8016C998); - - -extern void (*D_8018248C[])(void); - -void func_8016CB84(void *a0) { - D_8018248C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_8018F5F0[]; - - - Blk_8016CF04_8016CF04 *p = &D_8018F5F0[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_801824A8[])(void); - -void func_8016D19C(void *a0) { - D_801824A8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_801824B0[])(void); - -void func_8016D428(void *a0) { - D_801824B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80182518[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80182518[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_801824BC; -extern u8 D_801824C8; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801824BC, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801824C8); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8015AE2C", func_8016DC20); - - -extern void (*D_8018254C[])(void); - -void func_8016DEA4(void *a0) { - D_8018254C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80182554[])(void); - -void func_8016DF20(void *a0) { - D_80182554[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_801825A8[])(void); - -void func_8016E5B8(void *a0) { - D_801825A8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80182568[4]; - extern s32 D_80182588; - extern s32 D_80182590; - extern s32 D_80182598; - extern s32 D_801825A0; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80182568[0], pp, &tmp); - RotTransSV(&D_80182568[1], &prim.v[1], &tmp); - RotTransSV(&D_80182568[2], &prim.v[2], &tmp); - RotTransSV(&D_80182568[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80182588; - prim.f1 = D_80182590; - prim.f2 = D_80182598; - prim.f3 = D_801825A0; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_801825E8[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_801825E8[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_801825DC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_801825DC[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_801825CC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_801825CC[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801825DC[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_801825DC[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_801825DC[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_801825F8; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_801825F8; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80182670[])(void); - -void func_8016F6E0(void *a0) { - D_80182670[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80182678[])(void); - -void func_8016F798(void *a0) { - D_80182678[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80182680[])(void); - -void func_8016F834(void *a0) { - D_80182680[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80182688[])(void); - -void func_8016F8E4(void *a0) { - D_80182688[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80182690[])(void); - -void func_8016F9C4(void *a0) { - D_80182690[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80182698[])(void); - -void func_8016FA84(void *a0) { - D_80182698[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_801826A4[])(void); - -void func_8016FB7C(void *a0) { - D_801826A4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_801826B0[])(void); - -void func_8016FC90(void *a0) { - D_801826B0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_801826BC[])(void); - -void func_8016FDB4(void *a0) { - D_801826BC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_801826CC[])(void); - -void func_8016FF30(void *a0) { - D_801826CC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_801826DC[])(void); - -void func_8016FFDC(void *a0) { - D_801826DC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_801826E4[])(void); - -void func_80170150(void *a0) { - D_801826E4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_801826EC[])(void); - -void func_80170240(void *a0) { - D_801826EC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_801826F4[])(void); - -void func_801702FC(void *a0) { - D_801826F4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_801826FC[])(void); - -void func_801703E0(void *a0) { - D_801826FC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80182704[])(void); - -void func_801704B0(void *a0) { - D_80182704[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_8018270C[])(void); - -void func_80170548(void *a0) { - D_8018270C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - - -extern void (*D_80182714[])(void); - -void func_801705F8(void *a0) { - D_80182714[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_8018271C[])(void); - -void func_801706AC(void *a0) { - D_8018271C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80182724[])(void); - -void func_80170748(void *a0) { - D_80182724[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_8018272C[])(void); - -void func_80170810(void *a0) { - D_8018272C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80182734[])(void); - -void func_80170AD8(void *a0) { - D_80182734[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_8018273C[])(void); - -void func_80170BD8(void *a0) { - D_8018273C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80182744[])(void); - -void func_80170C74(void *a0) { - D_80182744[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8015AE2C", func_80170CF0); - - -extern void (*D_8018274C[])(void); - -void func_80170D68(void *a0) { - D_8018274C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80182754[])(void); - -void func_80170E34(void *a0) { - D_80182754[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_8018275C[])(void); - -void func_80170EFC(void *a0) { - D_8018275C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80182764[])(void); - -void func_80170FB0(void *a0) { - D_80182764[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_8018276C[])(void); - -void func_80171064(void *a0) { - D_8018276C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80182774[])(void); - -void func_80171120(void *a0) { - D_80182774[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_8018277C[])(void); - -void func_801711C0(void *a0) { - D_8018277C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80182784[])(void); - -void func_80171260(void *a0) { - D_80182784[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_8018278C[])(void); - -void func_801714E4(void *a0) { - D_8018278C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8015AE2C", func_80172C50); - - -extern void (*D_801827D0[])(void); - -void func_80172CA0(void *a0) { - D_801827D0[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80182794; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80182794); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC01_004/ov_SC01_004_jr_8016AB6C.c b/src/ov_SC01_004/ov_SC01_004_jr_8016AB6C.c new file mode 100644 index 000000000..d8a803948 --- /dev/null +++ b/src/ov_SC01_004/ov_SC01_004_jr_8016AB6C.c @@ -0,0 +1,3949 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80181754; +extern u8 D_801816C4; +extern u8 D_801816A0; +extern u8 D_8018167C; +extern u8 D_80181730; +extern u8 D_8018170C; +extern u8 D_801816E8; +extern u8 D_80181658; +extern void func_80145934(void); +extern u8 D_801817E4; +extern u8 D_801817C0; +extern u8 D_8018179C; +extern u8 D_80181778; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80180BDC[]; +extern unsigned char D_80180C0C[]; +extern unsigned char D_80180C5C[]; +extern unsigned char D_80180C8C[]; +extern unsigned char D_80180CBC[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80180D0C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80180DD4[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80180E5C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80180E64; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8018EF68; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8018EF6C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80180E94; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80180F3C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80180F60[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80180F50; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80180F74[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80180F80[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80180F90[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80180FA8[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80180F98; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80180FBC[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80180FD8[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80180FC8; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80180FEC[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80181000[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80181014; +extern void (*D_8018103C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018101C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80181088[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018108C[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_801814F0[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80181500[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_8018EFA0; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80181528[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80181508; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80181518; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80181568[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80181570[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018153C; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018157C[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018154C; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_8018EFA8; +extern s32 D_8018EFB4; +extern s32 D_8018EFB8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801815B8[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018158C[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_8018EFB0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80181808[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80181628[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_801818AC[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80181A00[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018181C; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80181A08[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018182C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018184C; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80181A10[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80181A38[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80181A44[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_801818B8[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80181AE8; +extern void func_8015D380(s32 a0); +extern unsigned char D_80180BCC[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80181AFC[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80181B38[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80181B80; +extern u16 D_80181B82; +extern u16 D_80181B84; +extern s32 D_80181B88; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80181B90; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_8018189C; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80181C14[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80181CC4[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80181CF4[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80181D58; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_8018EFC0[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80181D7C[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_8018F018[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80181DC4[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80181DB4; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_8018E30C[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80181DCC[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80181E20[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80181DE8; +extern s16 D_80181E1C; +extern s16 D_80181E1A; +extern s16 D_80181E18; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80181E2C[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_8018F078; +extern u8 D_8018F079; +extern u8 D_8018F07A; +extern u8 D_8018F07B; +extern u8 D_8018F07C; +extern u8 D_8018F07D; +extern u8 D_8018F07E; +extern u8 D_8018F07F; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80181E3C[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_8018F0B8; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80181E80[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80181EFC[]; +extern s32 D_80181F1C[]; +extern u8 D_80181F98[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80181FB8[]; +extern u8 D_80181FD8[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80182074[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_801820F0[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_8018E31C; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_801820FC[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80182104[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_801821CC[])(void); +extern void func_80166618(void *a0); +extern void (*D_801821DC[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_801821EC[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_801821F8[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80182158[]; +extern u8 D_8018216C[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80182210[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80182218[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80182220[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80182228[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80182230[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80182238[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80182240[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_801822F4[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_801822FC[])(void); +extern void func_80169F00(void *a0); +extern char D_801822AC[]; +extern char D_8018226C[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80182334[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80182340[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80182388[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80182348[]; + extern u8 D_80182358[]; + extern u8 D_8018F388[]; + extern u8 D_8018F3B0[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80182348, D_8018F388) + 3; + func_8001CE28(obj, D_8018F388); + } else { + var_s3 = func_80024054(D_80182358, D_8018F3B0) + 9; + func_8001CE28(obj, D_8018F3B0); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80182404[])(void); + +void func_8016B4BC(void *a0) { + D_80182404[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_8018F3D8; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_8018F3D8); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_801823F8[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_801823F8; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_8018243C[]; +extern unsigned short D_80182444[]; +extern unsigned short D_8018244C[]; +extern unsigned char D_8018F3E0[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_8018F3E0 + param_2 * 0x40); + puVar3 = D_8018243C[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80182444[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_8018244C[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_8018F3D8; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_8018F3D8, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80182454[])(void); + +void func_8016BBA4(void *a0) { + D_80182454[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_8018F514; + extern u8 D_8018F515; + extern u8 D_8018F516; + extern M2C_UNK D_8018F518; + extern u8 D_8018F519; + extern u8 D_8018F51A; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_8018F514) = 0x20; + D_8018F515 = 0x20; + D_8018F516 = 0; + (*(u8 *)&D_8018F518) = 0xc0; + D_8018F519 = 0xc0; + D_8018F51A = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_8018F514; +extern M2C_UNK D_8018F518; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_8018F514, &D_8018F518, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_8018F515; + extern u8 D_8018F516; + extern u8 D_8018F519; + extern u8 D_8018F51A; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_8018F514); + if (*p1 != 0) *p1 -= 4; + if (D_8018F515 != 0) D_8018F515 -= 4; + if (D_8018F516 != 0) D_8018F516 -= 4; + p2 = &(*(u8 *)&D_8018F518); + if (*p2 != 0) *p2 -= 4; + if (D_8018F519 != 0) D_8018F519 -= 4; + if (D_8018F51A != 0) D_8018F51A -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_8018F514), &(*(int *)&D_8018F518), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_8018F4A0; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_8018F4A0); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80182464; + extern s32 D_8018246C; + extern s32 D_80182474; + extern s32 D_8018247C; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80182464, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_8018246C, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80182474, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_8018247C, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80182484[])(void); + +void func_8016C14C(void *a0) { + D_80182484[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_8018F51C[]; +extern u8 D_8018F524[]; +extern u8 D_8018F4D4[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_8018F51C, D_8018F524, D_8018F4D4); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_8018F530[]; + extern u8 D_8018F5F0; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_8018F530[1] = 0xff; + D_8018F530[2] = 0x10; + D_8018F530[0] = 0x10; + D_8018F530[6] = 0; + D_8018F530[5] = 0; + D_8018F530[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_8018F530, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_8018F5F0, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_8018F530); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8016AB6C", func_8016C998); + + +extern void (*D_8018248C[])(void); + +void func_8016CB84(void *a0) { + D_8018248C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_8018F5F0[]; + + + Blk_8016CF04_8016CF04 *p = &D_8018F5F0[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_801824A8[])(void); + +void func_8016D19C(void *a0) { + D_801824A8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_801824B0[])(void); + +void func_8016D428(void *a0) { + D_801824B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80182518[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80182518[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_801824BC; +extern u8 D_801824C8; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801824BC, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801824C8); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8016AB6C", func_8016DC20); + + +extern void (*D_8018254C[])(void); + +void func_8016DEA4(void *a0) { + D_8018254C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80182554[])(void); + +void func_8016DF20(void *a0) { + D_80182554[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_801825A8[])(void); + +void func_8016E5B8(void *a0) { + D_801825A8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80182568[4]; + extern s32 D_80182588; + extern s32 D_80182590; + extern s32 D_80182598; + extern s32 D_801825A0; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80182568[0], pp, &tmp); + RotTransSV(&D_80182568[1], &prim.v[1], &tmp); + RotTransSV(&D_80182568[2], &prim.v[2], &tmp); + RotTransSV(&D_80182568[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80182588; + prim.f1 = D_80182590; + prim.f2 = D_80182598; + prim.f3 = D_801825A0; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_801825E8[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_801825E8[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_801825DC[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_801825DC[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_801825CC[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_801825CC[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801825DC[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_801825DC[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_801825DC[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_801825F8; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_801825F8; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80182670[])(void); + +void func_8016F6E0(void *a0) { + D_80182670[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80182678[])(void); + +void func_8016F798(void *a0) { + D_80182678[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80182680[])(void); + +void func_8016F834(void *a0) { + D_80182680[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80182688[])(void); + +void func_8016F8E4(void *a0) { + D_80182688[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80182690[])(void); + +void func_8016F9C4(void *a0) { + D_80182690[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80182698[])(void); + +void func_8016FA84(void *a0) { + D_80182698[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_801826A4[])(void); + +void func_8016FB7C(void *a0) { + D_801826A4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_801826B0[])(void); + +void func_8016FC90(void *a0) { + D_801826B0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_801826BC[])(void); + +void func_8016FDB4(void *a0) { + D_801826BC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_801826CC[])(void); + +void func_8016FF30(void *a0) { + D_801826CC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_801826DC[])(void); + +void func_8016FFDC(void *a0) { + D_801826DC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_801826E4[])(void); + +void func_80170150(void *a0) { + D_801826E4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_801826EC[])(void); + +void func_80170240(void *a0) { + D_801826EC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_801826F4[])(void); + +void func_801702FC(void *a0) { + D_801826F4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_801826FC[])(void); + +void func_801703E0(void *a0) { + D_801826FC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80182704[])(void); + +void func_801704B0(void *a0) { + D_80182704[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_8018270C[])(void); + +void func_80170548(void *a0) { + D_8018270C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + + +extern void (*D_80182714[])(void); + +void func_801705F8(void *a0) { + D_80182714[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_8018271C[])(void); + +void func_801706AC(void *a0) { + D_8018271C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80182724[])(void); + +void func_80170748(void *a0) { + D_80182724[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_8018272C[])(void); + +void func_80170810(void *a0) { + D_8018272C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80182734[])(void); + +void func_80170AD8(void *a0) { + D_80182734[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_8018273C[])(void); + +void func_80170BD8(void *a0) { + D_8018273C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80182744[])(void); + +void func_80170C74(void *a0) { + D_80182744[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8016AB6C", func_80170CF0); + + +extern void (*D_8018274C[])(void); + +void func_80170D68(void *a0) { + D_8018274C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80182754[])(void); + +void func_80170E34(void *a0) { + D_80182754[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_8018275C[])(void); + +void func_80170EFC(void *a0) { + D_8018275C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80182764[])(void); + +void func_80170FB0(void *a0) { + D_80182764[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_8018276C[])(void); + +void func_80171064(void *a0) { + D_8018276C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80182774[])(void); + +void func_80171120(void *a0) { + D_80182774[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_8018277C[])(void); + +void func_801711C0(void *a0) { + D_8018277C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80182784[])(void); + +void func_80171260(void *a0) { + D_80182784[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_8018278C[])(void); + +void func_801714E4(void *a0) { + D_8018278C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8016AB6C", func_80172C50); + + +extern void (*D_801827D0[])(void); + +void func_80172CA0(void *a0) { + D_801827D0[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80182794; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80182794); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC01_005/ov_SC01_005_jr_8015AE2C.c b/src/ov_SC01_005/ov_SC01_005_jr_8015AE2C.c index de6d002ab..edd955283 100644 --- a/src/ov_SC01_005/ov_SC01_005_jr_8015AE2C.c +++ b/src/ov_SC01_005/ov_SC01_005_jr_8015AE2C.c @@ -5191,1784 +5191,3 @@ extern void (*D_8018551C[])(void); void func_8016AB30(void *a0) { D_8018551C[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80185598[])(void); - -void func_8016B4BC(void *a0) { - D_80185598[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801CCB38; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801CCB38); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_8018558C[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_8018558C; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_801855D0[]; -extern unsigned short D_801855D8[]; -extern unsigned short D_801855E0[]; -extern unsigned char D_801CCB40[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801CCB40 + param_2 * 0x40); - puVar3 = D_801855D0[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_801855D8[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_801855E0[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801CCB38; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801CCB38, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_801855E8[])(void); - -void func_8016BBA4(void *a0) { - D_801855E8[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801CCC74; - extern u8 D_801CCC75; - extern u8 D_801CCC76; - extern M2C_UNK D_801CCC78; - extern u8 D_801CCC79; - extern u8 D_801CCC7A; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801CCC74) = 0x20; - D_801CCC75 = 0x20; - D_801CCC76 = 0; - (*(u8 *)&D_801CCC78) = 0xc0; - D_801CCC79 = 0xc0; - D_801CCC7A = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801CCC74; -extern M2C_UNK D_801CCC78; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801CCC74, &D_801CCC78, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801CCC75; - extern u8 D_801CCC76; - extern u8 D_801CCC79; - extern u8 D_801CCC7A; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801CCC74); - if (*p1 != 0) *p1 -= 4; - if (D_801CCC75 != 0) D_801CCC75 -= 4; - if (D_801CCC76 != 0) D_801CCC76 -= 4; - p2 = &(*(u8 *)&D_801CCC78); - if (*p2 != 0) *p2 -= 4; - if (D_801CCC79 != 0) D_801CCC79 -= 4; - if (D_801CCC7A != 0) D_801CCC7A -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801CCC74), &(*(int *)&D_801CCC78), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801CCC00; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801CCC00); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_801855F8; - extern s32 D_80185600; - extern s32 D_80185608; - extern s32 D_80185610; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_801855F8, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80185600, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80185608, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80185610, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80185618[])(void); - -void func_8016C14C(void *a0) { - D_80185618[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801CCC7C[]; -extern u8 D_801CCC84[]; -extern u8 D_801CCC34[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801CCC7C, D_801CCC84, D_801CCC34); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801CCC90[]; - extern u8 D_801CCD50; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801CCC90[1] = 0xff; - D_801CCC90[2] = 0x10; - D_801CCC90[0] = 0x10; - D_801CCC90[6] = 0; - D_801CCC90[5] = 0; - D_801CCC90[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801CCC90, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801CCD50, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801CCC90); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8015AE2C", func_8016C998); - - -extern void (*D_80185620[])(void); - -void func_8016CB84(void *a0) { - D_80185620[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801CCD50[]; - - - Blk_8016CF04_8016CF04 *p = &D_801CCD50[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_8018563C[])(void); - -void func_8016D19C(void *a0) { - D_8018563C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80185644[])(void); - -void func_8016D428(void *a0) { - D_80185644[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_801856AC[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_801856AC[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80185650; -extern u8 D_8018565C; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80185650, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018565C); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8015AE2C", func_8016DC20); - - -extern void (*D_801856E0[])(void); - -void func_8016DEA4(void *a0) { - D_801856E0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_801856E8[])(void); - -void func_8016DF20(void *a0) { - D_801856E8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_8018573C[])(void); - -void func_8016E5B8(void *a0) { - D_8018573C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_801856FC[4]; - extern s32 D_8018571C; - extern s32 D_80185724; - extern s32 D_8018572C; - extern s32 D_80185734; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_801856FC[0], pp, &tmp); - RotTransSV(&D_801856FC[1], &prim.v[1], &tmp); - RotTransSV(&D_801856FC[2], &prim.v[2], &tmp); - RotTransSV(&D_801856FC[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_8018571C; - prim.f1 = D_80185724; - prim.f2 = D_8018572C; - prim.f3 = D_80185734; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_8018577C[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_8018577C[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80185770[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80185770[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80185760[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80185760[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80185770[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80185770[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80185770[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_8018578C; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_8018578C; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80185804[])(void); - -void func_8016F6E0(void *a0) { - D_80185804[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_8018580C[])(void); - -void func_8016F798(void *a0) { - D_8018580C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80185814[])(void); - -void func_8016F834(void *a0) { - D_80185814[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_8018581C[])(void); - -void func_8016F8E4(void *a0) { - D_8018581C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80185824[])(void); - -void func_8016F9C4(void *a0) { - D_80185824[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_8018582C[])(void); - -void func_8016FA84(void *a0) { - D_8018582C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80185838[])(void); - -void func_8016FB7C(void *a0) { - D_80185838[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80185844[])(void); - -void func_8016FC90(void *a0) { - D_80185844[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80185850[])(void); - -void func_8016FDB4(void *a0) { - D_80185850[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80185860[])(void); - -void func_8016FF30(void *a0) { - D_80185860[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80185870[])(void); - -void func_8016FFDC(void *a0) { - D_80185870[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80185878[])(void); - -void func_80170150(void *a0) { - D_80185878[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80185880[])(void); - -void func_80170240(void *a0) { - D_80185880[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80185888[])(void); - -void func_801702FC(void *a0) { - D_80185888[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80185890[])(void); - -void func_801703E0(void *a0) { - D_80185890[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80185898[])(void); - -void func_801704B0(void *a0) { - D_80185898[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_801858A0[])(void); - -void func_80170548(void *a0) { - D_801858A0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_801858A8[])(void); - -void func_801705F8(void *a0) { - D_801858A8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_801858B0[])(void); - -void func_801706AC(void *a0) { - D_801858B0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_801858B8[])(void); - -void func_80170748(void *a0) { - D_801858B8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_801858C0[])(void); - -void func_80170810(void *a0) { - D_801858C0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_801858C8[])(void); - -void func_80170AD8(void *a0) { - D_801858C8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_801858D0[])(void); - -void func_80170BD8(void *a0) { - D_801858D0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_801858D8[])(void); - -void func_80170C74(void *a0) { - D_801858D8[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8015AE2C", func_80170CF0); - - -extern void (*D_801858E0[])(void); - -void func_80170D68(void *a0) { - D_801858E0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_801858E8[])(void); - -void func_80170E34(void *a0) { - D_801858E8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_801858F0[])(void); - -void func_80170EFC(void *a0) { - D_801858F0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_801858F8[])(void); - -void func_80170FB0(void *a0) { - D_801858F8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80185900[])(void); - -void func_80171064(void *a0) { - D_80185900[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80185908[])(void); - -void func_80171120(void *a0) { - D_80185908[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80185910[])(void); - -void func_801711C0(void *a0) { - D_80185910[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80185918[])(void); - -void func_80171260(void *a0) { - D_80185918[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80185920[])(void); - -void func_801714E4(void *a0) { - D_80185920[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8015AE2C", func_80172C50); - - -extern void (*D_80185964[])(void); - -void func_80172CA0(void *a0) { - D_80185964[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80185928; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80185928); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC01_005/ov_SC01_005_jr_8016AB6C.c b/src/ov_SC01_005/ov_SC01_005_jr_8016AB6C.c new file mode 100644 index 000000000..ad4068aa2 --- /dev/null +++ b/src/ov_SC01_005/ov_SC01_005_jr_8016AB6C.c @@ -0,0 +1,3949 @@ +#include "common.h" +#include "../shared/engine_core.h" +#include "../shared/ov_setters.h" /* dedup share across the SC01/005 ≡ 006 pair (cookbook §11) */ + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801848E8; +extern u8 D_80184858; +extern u8 D_80184834; +extern u8 D_80184810; +extern u8 D_801848C4; +extern u8 D_801848A0; +extern u8 D_8018487C; +extern u8 D_801847EC; +extern void func_80145934(void); +extern u8 D_80184978; +extern u8 D_80184954; +extern u8 D_80184930; +extern u8 D_8018490C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80183D70[]; +extern unsigned char D_80183DA0[]; +extern unsigned char D_80183DF0[]; +extern unsigned char D_80183E20[]; +extern unsigned char D_80183E50[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80183EA0[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80183F68[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80183FF0[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80183FF8; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801CC6C8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801CC6CC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80184028; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801840D0[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801840F4[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801840E4; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80184108[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80184114[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80184124[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018413C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018412C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80184150[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018416C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018415C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80184180[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80184194[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801841A8; +extern void (*D_801841D0[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801841B0; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018421C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80184220[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80184684[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80184694[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801CC700; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_801846BC[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018469C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_801846AC; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801846FC[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80184704[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_801846D0; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80184710[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_801846E0; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801CC708; +extern s32 D_801CC714; +extern s32 D_801CC718; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018474C[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80184720[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801CC710; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018499C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_801847BC[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80184A40[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80184B94[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_801849B0; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80184B9C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_801849C0; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801849E0; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80184BA4[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80184BCC[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80184BD8[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80184A4C[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80184C7C; +extern void func_8015D380(s32 a0); +extern unsigned char D_80183D60[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80184C90[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80184CCC[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80184D14; +extern u16 D_80184D16; +extern u16 D_80184D18; +extern s32 D_80184D1C; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80184D24; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80184A30; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80184DA8[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80184E58[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80184E88[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80184EEC; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801CC720[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80184F10[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801CC778[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80184F58[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80184F48; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801CBA6C[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80184F60[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80184FB4[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80184F7C; +extern s16 D_80184FB0; +extern s16 D_80184FAE; +extern s16 D_80184FAC; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80184FC0[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801CC7D8; +extern u8 D_801CC7D9; +extern u8 D_801CC7DA; +extern u8 D_801CC7DB; +extern u8 D_801CC7DC; +extern u8 D_801CC7DD; +extern u8 D_801CC7DE; +extern u8 D_801CC7DF; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80184FD0[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801CC818; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80185014[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80185090[]; +extern s32 D_801850B0[]; +extern u8 D_8018512C[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_8018514C[]; +extern u8 D_8018516C[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80185208[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80185284[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801CBA7C; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80185290[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80185298[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80185360[])(void); +extern void func_80166618(void *a0); +extern void (*D_80185370[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80185380[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_8018538C[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_801852EC[]; +extern u8 D_80185300[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_801853A4[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_801853AC[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_801853B4[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_801853BC[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_801853C4[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_801853CC[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_801853D4[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80185488[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80185490[])(void); +extern void func_80169F00(void *a0); +extern char D_80185440[]; +extern char D_80185400[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_801854C8[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_801854D4[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_8018551C[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_801854DC[]; + extern u8 D_801854EC[]; + extern u8 D_801CCAE8[]; + extern u8 D_801CCB10[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_801854DC, D_801CCAE8) + 3; + func_8001CE28(obj, D_801CCAE8); + } else { + var_s3 = func_80024054(D_801854EC, D_801CCB10) + 9; + func_8001CE28(obj, D_801CCB10); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80185598[])(void); + +void func_8016B4BC(void *a0) { + D_80185598[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801CCB38; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801CCB38); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_8018558C[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_8018558C; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_801855D0[]; +extern unsigned short D_801855D8[]; +extern unsigned short D_801855E0[]; +extern unsigned char D_801CCB40[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801CCB40 + param_2 * 0x40); + puVar3 = D_801855D0[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_801855D8[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_801855E0[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801CCB38; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801CCB38, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_801855E8[])(void); + +void func_8016BBA4(void *a0) { + D_801855E8[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801CCC74; + extern u8 D_801CCC75; + extern u8 D_801CCC76; + extern M2C_UNK D_801CCC78; + extern u8 D_801CCC79; + extern u8 D_801CCC7A; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801CCC74) = 0x20; + D_801CCC75 = 0x20; + D_801CCC76 = 0; + (*(u8 *)&D_801CCC78) = 0xc0; + D_801CCC79 = 0xc0; + D_801CCC7A = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801CCC74; +extern M2C_UNK D_801CCC78; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801CCC74, &D_801CCC78, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801CCC75; + extern u8 D_801CCC76; + extern u8 D_801CCC79; + extern u8 D_801CCC7A; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801CCC74); + if (*p1 != 0) *p1 -= 4; + if (D_801CCC75 != 0) D_801CCC75 -= 4; + if (D_801CCC76 != 0) D_801CCC76 -= 4; + p2 = &(*(u8 *)&D_801CCC78); + if (*p2 != 0) *p2 -= 4; + if (D_801CCC79 != 0) D_801CCC79 -= 4; + if (D_801CCC7A != 0) D_801CCC7A -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801CCC74), &(*(int *)&D_801CCC78), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801CCC00; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801CCC00); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_801855F8; + extern s32 D_80185600; + extern s32 D_80185608; + extern s32 D_80185610; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_801855F8, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80185600, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80185608, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80185610, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80185618[])(void); + +void func_8016C14C(void *a0) { + D_80185618[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801CCC7C[]; +extern u8 D_801CCC84[]; +extern u8 D_801CCC34[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801CCC7C, D_801CCC84, D_801CCC34); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801CCC90[]; + extern u8 D_801CCD50; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801CCC90[1] = 0xff; + D_801CCC90[2] = 0x10; + D_801CCC90[0] = 0x10; + D_801CCC90[6] = 0; + D_801CCC90[5] = 0; + D_801CCC90[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801CCC90, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801CCD50, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801CCC90); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8016AB6C", func_8016C998); + + +extern void (*D_80185620[])(void); + +void func_8016CB84(void *a0) { + D_80185620[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801CCD50[]; + + + Blk_8016CF04_8016CF04 *p = &D_801CCD50[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_8018563C[])(void); + +void func_8016D19C(void *a0) { + D_8018563C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80185644[])(void); + +void func_8016D428(void *a0) { + D_80185644[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_801856AC[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_801856AC[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80185650; +extern u8 D_8018565C; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80185650, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018565C); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8016AB6C", func_8016DC20); + + +extern void (*D_801856E0[])(void); + +void func_8016DEA4(void *a0) { + D_801856E0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_801856E8[])(void); + +void func_8016DF20(void *a0) { + D_801856E8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_8018573C[])(void); + +void func_8016E5B8(void *a0) { + D_8018573C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_801856FC[4]; + extern s32 D_8018571C; + extern s32 D_80185724; + extern s32 D_8018572C; + extern s32 D_80185734; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_801856FC[0], pp, &tmp); + RotTransSV(&D_801856FC[1], &prim.v[1], &tmp); + RotTransSV(&D_801856FC[2], &prim.v[2], &tmp); + RotTransSV(&D_801856FC[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_8018571C; + prim.f1 = D_80185724; + prim.f2 = D_8018572C; + prim.f3 = D_80185734; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_8018577C[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_8018577C[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80185770[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80185770[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80185760[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80185760[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80185770[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80185770[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80185770[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_8018578C; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_8018578C; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80185804[])(void); + +void func_8016F6E0(void *a0) { + D_80185804[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_8018580C[])(void); + +void func_8016F798(void *a0) { + D_8018580C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80185814[])(void); + +void func_8016F834(void *a0) { + D_80185814[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_8018581C[])(void); + +void func_8016F8E4(void *a0) { + D_8018581C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80185824[])(void); + +void func_8016F9C4(void *a0) { + D_80185824[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_8018582C[])(void); + +void func_8016FA84(void *a0) { + D_8018582C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80185838[])(void); + +void func_8016FB7C(void *a0) { + D_80185838[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80185844[])(void); + +void func_8016FC90(void *a0) { + D_80185844[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80185850[])(void); + +void func_8016FDB4(void *a0) { + D_80185850[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80185860[])(void); + +void func_8016FF30(void *a0) { + D_80185860[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80185870[])(void); + +void func_8016FFDC(void *a0) { + D_80185870[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80185878[])(void); + +void func_80170150(void *a0) { + D_80185878[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80185880[])(void); + +void func_80170240(void *a0) { + D_80185880[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80185888[])(void); + +void func_801702FC(void *a0) { + D_80185888[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80185890[])(void); + +void func_801703E0(void *a0) { + D_80185890[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80185898[])(void); + +void func_801704B0(void *a0) { + D_80185898[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_801858A0[])(void); + +void func_80170548(void *a0) { + D_801858A0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_801858A8[])(void); + +void func_801705F8(void *a0) { + D_801858A8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_801858B0[])(void); + +void func_801706AC(void *a0) { + D_801858B0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_801858B8[])(void); + +void func_80170748(void *a0) { + D_801858B8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_801858C0[])(void); + +void func_80170810(void *a0) { + D_801858C0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_801858C8[])(void); + +void func_80170AD8(void *a0) { + D_801858C8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_801858D0[])(void); + +void func_80170BD8(void *a0) { + D_801858D0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_801858D8[])(void); + +void func_80170C74(void *a0) { + D_801858D8[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8016AB6C", func_80170CF0); + + +extern void (*D_801858E0[])(void); + +void func_80170D68(void *a0) { + D_801858E0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_801858E8[])(void); + +void func_80170E34(void *a0) { + D_801858E8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_801858F0[])(void); + +void func_80170EFC(void *a0) { + D_801858F0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_801858F8[])(void); + +void func_80170FB0(void *a0) { + D_801858F8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80185900[])(void); + +void func_80171064(void *a0) { + D_80185900[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80185908[])(void); + +void func_80171120(void *a0) { + D_80185908[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80185910[])(void); + +void func_801711C0(void *a0) { + D_80185910[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80185918[])(void); + +void func_80171260(void *a0) { + D_80185918[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80185920[])(void); + +void func_801714E4(void *a0) { + D_80185920[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8016AB6C", func_80172C50); + + +extern void (*D_80185964[])(void); + +void func_80172CA0(void *a0) { + D_80185964[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80185928; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80185928); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC01_006/ov_SC01_006_jr_8015AE2C.c b/src/ov_SC01_006/ov_SC01_006_jr_8015AE2C.c index bdba52035..914f387f6 100644 --- a/src/ov_SC01_006/ov_SC01_006_jr_8015AE2C.c +++ b/src/ov_SC01_006/ov_SC01_006_jr_8015AE2C.c @@ -5191,1784 +5191,3 @@ extern void (*D_8018551C[])(void); void func_8016AB30(void *a0) { D_8018551C[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80185598[])(void); - -void func_8016B4BC(void *a0) { - D_80185598[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801CCB38; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801CCB38); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_8018558C[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_8018558C; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_801855D0[]; -extern unsigned short D_801855D8[]; -extern unsigned short D_801855E0[]; -extern unsigned char D_801CCB40[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801CCB40 + param_2 * 0x40); - puVar3 = D_801855D0[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_801855D8[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_801855E0[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801CCB38; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801CCB38, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_801855E8[])(void); - -void func_8016BBA4(void *a0) { - D_801855E8[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801CCC74; - extern u8 D_801CCC75; - extern u8 D_801CCC76; - extern M2C_UNK D_801CCC78; - extern u8 D_801CCC79; - extern u8 D_801CCC7A; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801CCC74) = 0x20; - D_801CCC75 = 0x20; - D_801CCC76 = 0; - (*(u8 *)&D_801CCC78) = 0xc0; - D_801CCC79 = 0xc0; - D_801CCC7A = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801CCC74; -extern M2C_UNK D_801CCC78; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801CCC74, &D_801CCC78, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801CCC75; - extern u8 D_801CCC76; - extern u8 D_801CCC79; - extern u8 D_801CCC7A; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801CCC74); - if (*p1 != 0) *p1 -= 4; - if (D_801CCC75 != 0) D_801CCC75 -= 4; - if (D_801CCC76 != 0) D_801CCC76 -= 4; - p2 = &(*(u8 *)&D_801CCC78); - if (*p2 != 0) *p2 -= 4; - if (D_801CCC79 != 0) D_801CCC79 -= 4; - if (D_801CCC7A != 0) D_801CCC7A -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801CCC74), &(*(int *)&D_801CCC78), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801CCC00; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801CCC00); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_801855F8; - extern s32 D_80185600; - extern s32 D_80185608; - extern s32 D_80185610; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_801855F8, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80185600, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80185608, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80185610, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80185618[])(void); - -void func_8016C14C(void *a0) { - D_80185618[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801CCC7C[]; -extern u8 D_801CCC84[]; -extern u8 D_801CCC34[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801CCC7C, D_801CCC84, D_801CCC34); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801CCC90[]; - extern u8 D_801CCD50; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801CCC90[1] = 0xff; - D_801CCC90[2] = 0x10; - D_801CCC90[0] = 0x10; - D_801CCC90[6] = 0; - D_801CCC90[5] = 0; - D_801CCC90[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801CCC90, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801CCD50, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801CCC90); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8015AE2C", func_8016C998); - - -extern void (*D_80185620[])(void); - -void func_8016CB84(void *a0) { - D_80185620[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801CCD50[]; - - - Blk_8016CF04_8016CF04 *p = &D_801CCD50[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_8018563C[])(void); - -void func_8016D19C(void *a0) { - D_8018563C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80185644[])(void); - -void func_8016D428(void *a0) { - D_80185644[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_801856AC[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_801856AC[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80185650; -extern u8 D_8018565C; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80185650, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018565C); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8015AE2C", func_8016DC20); - - -extern void (*D_801856E0[])(void); - -void func_8016DEA4(void *a0) { - D_801856E0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_801856E8[])(void); - -void func_8016DF20(void *a0) { - D_801856E8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_8018573C[])(void); - -void func_8016E5B8(void *a0) { - D_8018573C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_801856FC[4]; - extern s32 D_8018571C; - extern s32 D_80185724; - extern s32 D_8018572C; - extern s32 D_80185734; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_801856FC[0], pp, &tmp); - RotTransSV(&D_801856FC[1], &prim.v[1], &tmp); - RotTransSV(&D_801856FC[2], &prim.v[2], &tmp); - RotTransSV(&D_801856FC[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_8018571C; - prim.f1 = D_80185724; - prim.f2 = D_8018572C; - prim.f3 = D_80185734; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_8018577C[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_8018577C[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80185770[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80185770[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80185760[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80185760[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80185770[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80185770[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80185770[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_8018578C; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_8018578C; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80185804[])(void); - -void func_8016F6E0(void *a0) { - D_80185804[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_8018580C[])(void); - -void func_8016F798(void *a0) { - D_8018580C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80185814[])(void); - -void func_8016F834(void *a0) { - D_80185814[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_8018581C[])(void); - -void func_8016F8E4(void *a0) { - D_8018581C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80185824[])(void); - -void func_8016F9C4(void *a0) { - D_80185824[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_8018582C[])(void); - -void func_8016FA84(void *a0) { - D_8018582C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80185838[])(void); - -void func_8016FB7C(void *a0) { - D_80185838[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80185844[])(void); - -void func_8016FC90(void *a0) { - D_80185844[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80185850[])(void); - -void func_8016FDB4(void *a0) { - D_80185850[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80185860[])(void); - -void func_8016FF30(void *a0) { - D_80185860[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80185870[])(void); - -void func_8016FFDC(void *a0) { - D_80185870[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80185878[])(void); - -void func_80170150(void *a0) { - D_80185878[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80185880[])(void); - -void func_80170240(void *a0) { - D_80185880[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80185888[])(void); - -void func_801702FC(void *a0) { - D_80185888[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80185890[])(void); - -void func_801703E0(void *a0) { - D_80185890[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80185898[])(void); - -void func_801704B0(void *a0) { - D_80185898[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_801858A0[])(void); - -void func_80170548(void *a0) { - D_801858A0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_801858A8[])(void); - -void func_801705F8(void *a0) { - D_801858A8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_801858B0[])(void); - -void func_801706AC(void *a0) { - D_801858B0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_801858B8[])(void); - -void func_80170748(void *a0) { - D_801858B8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_801858C0[])(void); - -void func_80170810(void *a0) { - D_801858C0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_801858C8[])(void); - -void func_80170AD8(void *a0) { - D_801858C8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_801858D0[])(void); - -void func_80170BD8(void *a0) { - D_801858D0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_801858D8[])(void); - -void func_80170C74(void *a0) { - D_801858D8[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8015AE2C", func_80170CF0); - - -extern void (*D_801858E0[])(void); - -void func_80170D68(void *a0) { - D_801858E0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_801858E8[])(void); - -void func_80170E34(void *a0) { - D_801858E8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_801858F0[])(void); - -void func_80170EFC(void *a0) { - D_801858F0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_801858F8[])(void); - -void func_80170FB0(void *a0) { - D_801858F8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80185900[])(void); - -void func_80171064(void *a0) { - D_80185900[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80185908[])(void); - -void func_80171120(void *a0) { - D_80185908[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80185910[])(void); - -void func_801711C0(void *a0) { - D_80185910[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80185918[])(void); - -void func_80171260(void *a0) { - D_80185918[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80185920[])(void); - -void func_801714E4(void *a0) { - D_80185920[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8015AE2C", func_80172C50); - - -extern void (*D_80185964[])(void); - -void func_80172CA0(void *a0) { - D_80185964[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80185928; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80185928); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC01_006/ov_SC01_006_jr_8016AB6C.c b/src/ov_SC01_006/ov_SC01_006_jr_8016AB6C.c new file mode 100644 index 000000000..3ed1dc7b2 --- /dev/null +++ b/src/ov_SC01_006/ov_SC01_006_jr_8016AB6C.c @@ -0,0 +1,3949 @@ +#include "common.h" +#include "../shared/engine_core.h" +#include "../shared/ov_setters.h" /* dedup share across the SC01/005 ≡ 006 pair (cookbook §11) */ + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801848E8; +extern u8 D_80184858; +extern u8 D_80184834; +extern u8 D_80184810; +extern u8 D_801848C4; +extern u8 D_801848A0; +extern u8 D_8018487C; +extern u8 D_801847EC; +extern void func_80145934(void); +extern u8 D_80184978; +extern u8 D_80184954; +extern u8 D_80184930; +extern u8 D_8018490C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80183D70[]; +extern unsigned char D_80183DA0[]; +extern unsigned char D_80183DF0[]; +extern unsigned char D_80183E20[]; +extern unsigned char D_80183E50[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80183EA0[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80183F68[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80183FF0[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80183FF8; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801CC6C8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801CC6CC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80184028; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801840D0[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801840F4[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801840E4; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80184108[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80184114[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80184124[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018413C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018412C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80184150[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018416C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018415C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80184180[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80184194[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801841A8; +extern void (*D_801841D0[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801841B0; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018421C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80184220[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80184684[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80184694[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801CC700; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_801846BC[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018469C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_801846AC; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801846FC[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80184704[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_801846D0; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80184710[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_801846E0; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801CC708; +extern s32 D_801CC714; +extern s32 D_801CC718; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018474C[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80184720[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801CC710; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018499C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_801847BC[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80184A40[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80184B94[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_801849B0; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80184B9C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_801849C0; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801849E0; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80184BA4[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80184BCC[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80184BD8[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80184A4C[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80184C7C; +extern void func_8015D380(s32 a0); +extern unsigned char D_80183D60[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80184C90[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80184CCC[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80184D14; +extern u16 D_80184D16; +extern u16 D_80184D18; +extern s32 D_80184D1C; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80184D24; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80184A30; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80184DA8[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80184E58[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80184E88[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80184EEC; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801CC720[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80184F10[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801CC778[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80184F58[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80184F48; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801CBA6C[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80184F60[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80184FB4[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80184F7C; +extern s16 D_80184FB0; +extern s16 D_80184FAE; +extern s16 D_80184FAC; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80184FC0[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801CC7D8; +extern u8 D_801CC7D9; +extern u8 D_801CC7DA; +extern u8 D_801CC7DB; +extern u8 D_801CC7DC; +extern u8 D_801CC7DD; +extern u8 D_801CC7DE; +extern u8 D_801CC7DF; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80184FD0[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801CC818; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80185014[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80185090[]; +extern s32 D_801850B0[]; +extern u8 D_8018512C[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_8018514C[]; +extern u8 D_8018516C[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80185208[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80185284[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801CBA7C; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80185290[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80185298[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80185360[])(void); +extern void func_80166618(void *a0); +extern void (*D_80185370[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80185380[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_8018538C[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_801852EC[]; +extern u8 D_80185300[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_801853A4[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_801853AC[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_801853B4[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_801853BC[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_801853C4[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_801853CC[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_801853D4[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80185488[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80185490[])(void); +extern void func_80169F00(void *a0); +extern char D_80185440[]; +extern char D_80185400[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_801854C8[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_801854D4[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_8018551C[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_801854DC[]; + extern u8 D_801854EC[]; + extern u8 D_801CCAE8[]; + extern u8 D_801CCB10[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_801854DC, D_801CCAE8) + 3; + func_8001CE28(obj, D_801CCAE8); + } else { + var_s3 = func_80024054(D_801854EC, D_801CCB10) + 9; + func_8001CE28(obj, D_801CCB10); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80185598[])(void); + +void func_8016B4BC(void *a0) { + D_80185598[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801CCB38; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801CCB38); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_8018558C[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_8018558C; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_801855D0[]; +extern unsigned short D_801855D8[]; +extern unsigned short D_801855E0[]; +extern unsigned char D_801CCB40[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801CCB40 + param_2 * 0x40); + puVar3 = D_801855D0[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_801855D8[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_801855E0[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801CCB38; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801CCB38, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_801855E8[])(void); + +void func_8016BBA4(void *a0) { + D_801855E8[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801CCC74; + extern u8 D_801CCC75; + extern u8 D_801CCC76; + extern M2C_UNK D_801CCC78; + extern u8 D_801CCC79; + extern u8 D_801CCC7A; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801CCC74) = 0x20; + D_801CCC75 = 0x20; + D_801CCC76 = 0; + (*(u8 *)&D_801CCC78) = 0xc0; + D_801CCC79 = 0xc0; + D_801CCC7A = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801CCC74; +extern M2C_UNK D_801CCC78; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801CCC74, &D_801CCC78, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801CCC75; + extern u8 D_801CCC76; + extern u8 D_801CCC79; + extern u8 D_801CCC7A; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801CCC74); + if (*p1 != 0) *p1 -= 4; + if (D_801CCC75 != 0) D_801CCC75 -= 4; + if (D_801CCC76 != 0) D_801CCC76 -= 4; + p2 = &(*(u8 *)&D_801CCC78); + if (*p2 != 0) *p2 -= 4; + if (D_801CCC79 != 0) D_801CCC79 -= 4; + if (D_801CCC7A != 0) D_801CCC7A -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801CCC74), &(*(int *)&D_801CCC78), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801CCC00; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801CCC00); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_801855F8; + extern s32 D_80185600; + extern s32 D_80185608; + extern s32 D_80185610; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_801855F8, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80185600, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80185608, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80185610, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80185618[])(void); + +void func_8016C14C(void *a0) { + D_80185618[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801CCC7C[]; +extern u8 D_801CCC84[]; +extern u8 D_801CCC34[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801CCC7C, D_801CCC84, D_801CCC34); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801CCC90[]; + extern u8 D_801CCD50; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801CCC90[1] = 0xff; + D_801CCC90[2] = 0x10; + D_801CCC90[0] = 0x10; + D_801CCC90[6] = 0; + D_801CCC90[5] = 0; + D_801CCC90[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801CCC90, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801CCD50, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801CCC90); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8016AB6C", func_8016C998); + + +extern void (*D_80185620[])(void); + +void func_8016CB84(void *a0) { + D_80185620[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801CCD50[]; + + + Blk_8016CF04_8016CF04 *p = &D_801CCD50[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_8018563C[])(void); + +void func_8016D19C(void *a0) { + D_8018563C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80185644[])(void); + +void func_8016D428(void *a0) { + D_80185644[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_801856AC[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_801856AC[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80185650; +extern u8 D_8018565C; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80185650, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018565C); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8016AB6C", func_8016DC20); + + +extern void (*D_801856E0[])(void); + +void func_8016DEA4(void *a0) { + D_801856E0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_801856E8[])(void); + +void func_8016DF20(void *a0) { + D_801856E8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_8018573C[])(void); + +void func_8016E5B8(void *a0) { + D_8018573C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_801856FC[4]; + extern s32 D_8018571C; + extern s32 D_80185724; + extern s32 D_8018572C; + extern s32 D_80185734; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_801856FC[0], pp, &tmp); + RotTransSV(&D_801856FC[1], &prim.v[1], &tmp); + RotTransSV(&D_801856FC[2], &prim.v[2], &tmp); + RotTransSV(&D_801856FC[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_8018571C; + prim.f1 = D_80185724; + prim.f2 = D_8018572C; + prim.f3 = D_80185734; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_8018577C[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_8018577C[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80185770[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80185770[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80185760[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80185760[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80185770[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80185770[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80185770[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_8018578C; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_8018578C; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80185804[])(void); + +void func_8016F6E0(void *a0) { + D_80185804[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_8018580C[])(void); + +void func_8016F798(void *a0) { + D_8018580C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80185814[])(void); + +void func_8016F834(void *a0) { + D_80185814[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_8018581C[])(void); + +void func_8016F8E4(void *a0) { + D_8018581C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80185824[])(void); + +void func_8016F9C4(void *a0) { + D_80185824[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_8018582C[])(void); + +void func_8016FA84(void *a0) { + D_8018582C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80185838[])(void); + +void func_8016FB7C(void *a0) { + D_80185838[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80185844[])(void); + +void func_8016FC90(void *a0) { + D_80185844[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80185850[])(void); + +void func_8016FDB4(void *a0) { + D_80185850[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80185860[])(void); + +void func_8016FF30(void *a0) { + D_80185860[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80185870[])(void); + +void func_8016FFDC(void *a0) { + D_80185870[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80185878[])(void); + +void func_80170150(void *a0) { + D_80185878[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80185880[])(void); + +void func_80170240(void *a0) { + D_80185880[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80185888[])(void); + +void func_801702FC(void *a0) { + D_80185888[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80185890[])(void); + +void func_801703E0(void *a0) { + D_80185890[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80185898[])(void); + +void func_801704B0(void *a0) { + D_80185898[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_801858A0[])(void); + +void func_80170548(void *a0) { + D_801858A0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_801858A8[])(void); + +void func_801705F8(void *a0) { + D_801858A8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_801858B0[])(void); + +void func_801706AC(void *a0) { + D_801858B0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_801858B8[])(void); + +void func_80170748(void *a0) { + D_801858B8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_801858C0[])(void); + +void func_80170810(void *a0) { + D_801858C0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_801858C8[])(void); + +void func_80170AD8(void *a0) { + D_801858C8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_801858D0[])(void); + +void func_80170BD8(void *a0) { + D_801858D0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_801858D8[])(void); + +void func_80170C74(void *a0) { + D_801858D8[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8016AB6C", func_80170CF0); + + +extern void (*D_801858E0[])(void); + +void func_80170D68(void *a0) { + D_801858E0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_801858E8[])(void); + +void func_80170E34(void *a0) { + D_801858E8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_801858F0[])(void); + +void func_80170EFC(void *a0) { + D_801858F0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_801858F8[])(void); + +void func_80170FB0(void *a0) { + D_801858F8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80185900[])(void); + +void func_80171064(void *a0) { + D_80185900[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80185908[])(void); + +void func_80171120(void *a0) { + D_80185908[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80185910[])(void); + +void func_801711C0(void *a0) { + D_80185910[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80185918[])(void); + +void func_80171260(void *a0) { + D_80185918[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80185920[])(void); + +void func_801714E4(void *a0) { + D_80185920[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8016AB6C", func_80172C50); + + +extern void (*D_80185964[])(void); + +void func_80172CA0(void *a0) { + D_80185964[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80185928; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80185928); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC01_008/ov_SC01_008_jr_8015AE2C.c b/src/ov_SC01_008/ov_SC01_008_jr_8015AE2C.c index 22eef0b6b..a6b55b527 100644 --- a/src/ov_SC01_008/ov_SC01_008_jr_8015AE2C.c +++ b/src/ov_SC01_008/ov_SC01_008_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_801828FC[])(void); void func_8016AB30(void *a0) { D_801828FC[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80182978[])(void); - -void func_8016B4BC(void *a0) { - D_80182978[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801A25E8; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801A25E8); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_8018296C[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_8018296C; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_801829B0[]; -extern unsigned short D_801829B8[]; -extern unsigned short D_801829C0[]; -extern unsigned char D_801A25F0[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801A25F0 + param_2 * 0x40); - puVar3 = D_801829B0[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_801829B8[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_801829C0[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801A25E8; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801A25E8, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_801829C8[])(void); - -void func_8016BBA4(void *a0) { - D_801829C8[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801A2724; - extern u8 D_801A2725; - extern u8 D_801A2726; - extern M2C_UNK D_801A2728; - extern u8 D_801A2729; - extern u8 D_801A272A; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801A2724) = 0x20; - D_801A2725 = 0x20; - D_801A2726 = 0; - (*(u8 *)&D_801A2728) = 0xc0; - D_801A2729 = 0xc0; - D_801A272A = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801A2724; -extern M2C_UNK D_801A2728; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801A2724, &D_801A2728, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801A2725; - extern u8 D_801A2726; - extern u8 D_801A2729; - extern u8 D_801A272A; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801A2724); - if (*p1 != 0) *p1 -= 4; - if (D_801A2725 != 0) D_801A2725 -= 4; - if (D_801A2726 != 0) D_801A2726 -= 4; - p2 = &(*(u8 *)&D_801A2728); - if (*p2 != 0) *p2 -= 4; - if (D_801A2729 != 0) D_801A2729 -= 4; - if (D_801A272A != 0) D_801A272A -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801A2724), &(*(int *)&D_801A2728), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801A26B0; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801A26B0); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_801829D8; - extern s32 D_801829E0; - extern s32 D_801829E8; - extern s32 D_801829F0; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_801829D8, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_801829E0, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_801829E8, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_801829F0, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_801829F8[])(void); - -void func_8016C14C(void *a0) { - D_801829F8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801A272C[]; -extern u8 D_801A2734[]; -extern u8 D_801A26E4[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801A272C, D_801A2734, D_801A26E4); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801A2740[]; - extern u8 D_801A2800; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801A2740[1] = 0xff; - D_801A2740[2] = 0x10; - D_801A2740[0] = 0x10; - D_801A2740[6] = 0; - D_801A2740[5] = 0; - D_801A2740[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801A2740, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801A2800, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801A2740); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8015AE2C", func_8016C998); - - -extern void (*D_80182A00[])(void); - -void func_8016CB84(void *a0) { - D_80182A00[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801A2800[]; - - - Blk_8016CF04_8016CF04 *p = &D_801A2800[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80182A1C[])(void); - -void func_8016D19C(void *a0) { - D_80182A1C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80182A24[])(void); - -void func_8016D428(void *a0) { - D_80182A24[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80182A8C[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80182A8C[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80182A30; -extern u8 D_80182A3C; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80182A30, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80182A3C); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80182AC0[])(void); - -void func_8016DEA4(void *a0) { - D_80182AC0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80182AC8[])(void); - -void func_8016DF20(void *a0) { - D_80182AC8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80182B1C[])(void); - -void func_8016E5B8(void *a0) { - D_80182B1C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80182ADC[4]; - extern s32 D_80182AFC; - extern s32 D_80182B04; - extern s32 D_80182B0C; - extern s32 D_80182B14; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80182ADC[0], pp, &tmp); - RotTransSV(&D_80182ADC[1], &prim.v[1], &tmp); - RotTransSV(&D_80182ADC[2], &prim.v[2], &tmp); - RotTransSV(&D_80182ADC[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80182AFC; - prim.f1 = D_80182B04; - prim.f2 = D_80182B0C; - prim.f3 = D_80182B14; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80182B5C[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80182B5C[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80182B50[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80182B50[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80182B40[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80182B40[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80182B50[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80182B50[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80182B50[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80182B6C; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80182B6C; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80182BE4[])(void); - -void func_8016F6E0(void *a0) { - D_80182BE4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80182BEC[])(void); - -void func_8016F798(void *a0) { - D_80182BEC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80182BF4[])(void); - -void func_8016F834(void *a0) { - D_80182BF4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80182BFC[])(void); - -void func_8016F8E4(void *a0) { - D_80182BFC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80182C04[])(void); - -void func_8016F9C4(void *a0) { - D_80182C04[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80182C0C[])(void); - -void func_8016FA84(void *a0) { - D_80182C0C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80182C18[])(void); - -void func_8016FB7C(void *a0) { - D_80182C18[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80182C24[])(void); - -void func_8016FC90(void *a0) { - D_80182C24[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80182C30[])(void); - -void func_8016FDB4(void *a0) { - D_80182C30[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80182C40[])(void); - -void func_8016FF30(void *a0) { - D_80182C40[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80182C50[])(void); - -void func_8016FFDC(void *a0) { - D_80182C50[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80182C58[])(void); - -void func_80170150(void *a0) { - D_80182C58[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80182C60[])(void); - -void func_80170240(void *a0) { - D_80182C60[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80182C68[])(void); - -void func_801702FC(void *a0) { - D_80182C68[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80182C70[])(void); - -void func_801703E0(void *a0) { - D_80182C70[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80182C78[])(void); - -void func_801704B0(void *a0) { - D_80182C78[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80182C80[])(void); - -void func_80170548(void *a0) { - D_80182C80[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80182C88[])(void); - -void func_801705F8(void *a0) { - D_80182C88[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80182C90[])(void); - -void func_801706AC(void *a0) { - D_80182C90[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80182C98[])(void); - -void func_80170748(void *a0) { - D_80182C98[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80182CA0[])(void); - -void func_80170810(void *a0) { - D_80182CA0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80182CA8[])(void); - -void func_80170AD8(void *a0) { - D_80182CA8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80182CB0[])(void); - -void func_80170BD8(void *a0) { - D_80182CB0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80182CB8[])(void); - -void func_80170C74(void *a0) { - D_80182CB8[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80182CC0[])(void); - -void func_80170D68(void *a0) { - D_80182CC0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80182CC8[])(void); - -void func_80170E34(void *a0) { - D_80182CC8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80182CD0[])(void); - -void func_80170EFC(void *a0) { - D_80182CD0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80182CD8[])(void); - -void func_80170FB0(void *a0) { - D_80182CD8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80182CE0[])(void); - -void func_80171064(void *a0) { - D_80182CE0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80182CE8[])(void); - -void func_80171120(void *a0) { - D_80182CE8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80182CF0[])(void); - -void func_801711C0(void *a0) { - D_80182CF0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80182CF8[])(void); - -void func_80171260(void *a0) { - D_80182CF8[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80182D00[])(void); - -void func_801714E4(void *a0) { - D_80182D00[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8015AE2C", func_80172C50); - - -extern void (*D_80182D44[])(void); - -void func_80172CA0(void *a0) { - D_80182D44[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80182D08; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80182D08); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC01_008/ov_SC01_008_jr_8016AB6C.c b/src/ov_SC01_008/ov_SC01_008_jr_8016AB6C.c new file mode 100644 index 000000000..f286853b2 --- /dev/null +++ b/src/ov_SC01_008/ov_SC01_008_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80181CC8; +extern u8 D_80181C38; +extern u8 D_80181C14; +extern u8 D_80181BF0; +extern u8 D_80181CA4; +extern u8 D_80181C80; +extern u8 D_80181C5C; +extern u8 D_80181BCC; +extern void func_80145934(void); +extern u8 D_80181D58; +extern u8 D_80181D34; +extern u8 D_80181D10; +extern u8 D_80181CEC; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80181150[]; +extern unsigned char D_80181180[]; +extern unsigned char D_801811D0[]; +extern unsigned char D_80181200[]; +extern unsigned char D_80181230[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80181280[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80181348[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801813D0[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801813D8; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801A2178; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801A217C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80181408; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801814B0[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801814D4[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801814C4; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801814E8[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801814F4[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80181504[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018151C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018150C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80181530[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018154C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018153C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80181560[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80181574[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80181588; +extern void (*D_801815B0[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80181590; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801815FC[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80181600[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80181A64[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80181A74[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801A21B0; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80181A9C[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80181A7C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80181A8C; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80181ADC[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80181AE4[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80181AB0; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80181AF0[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80181AC0; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801A21B8; +extern s32 D_801A21C4; +extern s32 D_801A21C8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80181B2C[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80181B00[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801A21C0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80181D7C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80181B9C[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80181E20[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80181F74[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80181D90; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80181F7C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80181DA0; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80181DC0; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80181F84[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80181FAC[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80181FB8[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80181E2C[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_8018205C; +extern void func_8015D380(s32 a0); +extern unsigned char D_80181140[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80182070[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_801820AC[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_801820F4; +extern u16 D_801820F6; +extern u16 D_801820F8; +extern s32 D_801820FC; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80182104; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80181E10; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80182188[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80182238[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80182268[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_801822CC; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801A21D0[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_801822F0[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801A2228[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80182338[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80182328; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801A151C[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80182340[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80182394[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_8018235C; +extern s16 D_80182390; +extern s16 D_8018238E; +extern s16 D_8018238C; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_801823A0[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801A2288; +extern u8 D_801A2289; +extern u8 D_801A228A; +extern u8 D_801A228B; +extern u8 D_801A228C; +extern u8 D_801A228D; +extern u8 D_801A228E; +extern u8 D_801A228F; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_801823B0[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801A22C8; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_801823F4[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80182470[]; +extern s32 D_80182490[]; +extern u8 D_8018250C[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_8018252C[]; +extern u8 D_8018254C[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_801825E8[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80182664[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801A152C; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80182670[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80182678[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80182740[])(void); +extern void func_80166618(void *a0); +extern void (*D_80182750[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80182760[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_8018276C[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_801826CC[]; +extern u8 D_801826E0[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80182784[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_8018278C[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80182794[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_8018279C[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_801827A4[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_801827AC[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_801827B4[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80182868[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80182870[])(void); +extern void func_80169F00(void *a0); +extern char D_80182820[]; +extern char D_801827E0[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_801828A8[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_801828B4[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_801828FC[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_801828BC[]; + extern u8 D_801828CC[]; + extern u8 D_801A2598[]; + extern u8 D_801A25C0[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_801828BC, D_801A2598) + 3; + func_8001CE28(obj, D_801A2598); + } else { + var_s3 = func_80024054(D_801828CC, D_801A25C0) + 9; + func_8001CE28(obj, D_801A25C0); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80182978[])(void); + +void func_8016B4BC(void *a0) { + D_80182978[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801A25E8; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801A25E8); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_8018296C[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_8018296C; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_801829B0[]; +extern unsigned short D_801829B8[]; +extern unsigned short D_801829C0[]; +extern unsigned char D_801A25F0[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801A25F0 + param_2 * 0x40); + puVar3 = D_801829B0[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_801829B8[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_801829C0[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801A25E8; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801A25E8, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_801829C8[])(void); + +void func_8016BBA4(void *a0) { + D_801829C8[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801A2724; + extern u8 D_801A2725; + extern u8 D_801A2726; + extern M2C_UNK D_801A2728; + extern u8 D_801A2729; + extern u8 D_801A272A; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801A2724) = 0x20; + D_801A2725 = 0x20; + D_801A2726 = 0; + (*(u8 *)&D_801A2728) = 0xc0; + D_801A2729 = 0xc0; + D_801A272A = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801A2724; +extern M2C_UNK D_801A2728; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801A2724, &D_801A2728, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801A2725; + extern u8 D_801A2726; + extern u8 D_801A2729; + extern u8 D_801A272A; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801A2724); + if (*p1 != 0) *p1 -= 4; + if (D_801A2725 != 0) D_801A2725 -= 4; + if (D_801A2726 != 0) D_801A2726 -= 4; + p2 = &(*(u8 *)&D_801A2728); + if (*p2 != 0) *p2 -= 4; + if (D_801A2729 != 0) D_801A2729 -= 4; + if (D_801A272A != 0) D_801A272A -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801A2724), &(*(int *)&D_801A2728), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801A26B0; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801A26B0); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_801829D8; + extern s32 D_801829E0; + extern s32 D_801829E8; + extern s32 D_801829F0; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_801829D8, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_801829E0, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_801829E8, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_801829F0, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_801829F8[])(void); + +void func_8016C14C(void *a0) { + D_801829F8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801A272C[]; +extern u8 D_801A2734[]; +extern u8 D_801A26E4[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801A272C, D_801A2734, D_801A26E4); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801A2740[]; + extern u8 D_801A2800; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801A2740[1] = 0xff; + D_801A2740[2] = 0x10; + D_801A2740[0] = 0x10; + D_801A2740[6] = 0; + D_801A2740[5] = 0; + D_801A2740[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801A2740, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801A2800, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801A2740); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8016AB6C", func_8016C998); + + +extern void (*D_80182A00[])(void); + +void func_8016CB84(void *a0) { + D_80182A00[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801A2800[]; + + + Blk_8016CF04_8016CF04 *p = &D_801A2800[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80182A1C[])(void); + +void func_8016D19C(void *a0) { + D_80182A1C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80182A24[])(void); + +void func_8016D428(void *a0) { + D_80182A24[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80182A8C[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80182A8C[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80182A30; +extern u8 D_80182A3C; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80182A30, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80182A3C); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80182AC0[])(void); + +void func_8016DEA4(void *a0) { + D_80182AC0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80182AC8[])(void); + +void func_8016DF20(void *a0) { + D_80182AC8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80182B1C[])(void); + +void func_8016E5B8(void *a0) { + D_80182B1C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80182ADC[4]; + extern s32 D_80182AFC; + extern s32 D_80182B04; + extern s32 D_80182B0C; + extern s32 D_80182B14; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80182ADC[0], pp, &tmp); + RotTransSV(&D_80182ADC[1], &prim.v[1], &tmp); + RotTransSV(&D_80182ADC[2], &prim.v[2], &tmp); + RotTransSV(&D_80182ADC[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80182AFC; + prim.f1 = D_80182B04; + prim.f2 = D_80182B0C; + prim.f3 = D_80182B14; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80182B5C[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80182B5C[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80182B50[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80182B50[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80182B40[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80182B40[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80182B50[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80182B50[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80182B50[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80182B6C; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80182B6C; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80182BE4[])(void); + +void func_8016F6E0(void *a0) { + D_80182BE4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80182BEC[])(void); + +void func_8016F798(void *a0) { + D_80182BEC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80182BF4[])(void); + +void func_8016F834(void *a0) { + D_80182BF4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80182BFC[])(void); + +void func_8016F8E4(void *a0) { + D_80182BFC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80182C04[])(void); + +void func_8016F9C4(void *a0) { + D_80182C04[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80182C0C[])(void); + +void func_8016FA84(void *a0) { + D_80182C0C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80182C18[])(void); + +void func_8016FB7C(void *a0) { + D_80182C18[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80182C24[])(void); + +void func_8016FC90(void *a0) { + D_80182C24[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80182C30[])(void); + +void func_8016FDB4(void *a0) { + D_80182C30[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80182C40[])(void); + +void func_8016FF30(void *a0) { + D_80182C40[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80182C50[])(void); + +void func_8016FFDC(void *a0) { + D_80182C50[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80182C58[])(void); + +void func_80170150(void *a0) { + D_80182C58[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80182C60[])(void); + +void func_80170240(void *a0) { + D_80182C60[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80182C68[])(void); + +void func_801702FC(void *a0) { + D_80182C68[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80182C70[])(void); + +void func_801703E0(void *a0) { + D_80182C70[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80182C78[])(void); + +void func_801704B0(void *a0) { + D_80182C78[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80182C80[])(void); + +void func_80170548(void *a0) { + D_80182C80[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80182C88[])(void); + +void func_801705F8(void *a0) { + D_80182C88[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80182C90[])(void); + +void func_801706AC(void *a0) { + D_80182C90[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80182C98[])(void); + +void func_80170748(void *a0) { + D_80182C98[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80182CA0[])(void); + +void func_80170810(void *a0) { + D_80182CA0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80182CA8[])(void); + +void func_80170AD8(void *a0) { + D_80182CA8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80182CB0[])(void); + +void func_80170BD8(void *a0) { + D_80182CB0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80182CB8[])(void); + +void func_80170C74(void *a0) { + D_80182CB8[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80182CC0[])(void); + +void func_80170D68(void *a0) { + D_80182CC0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80182CC8[])(void); + +void func_80170E34(void *a0) { + D_80182CC8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80182CD0[])(void); + +void func_80170EFC(void *a0) { + D_80182CD0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80182CD8[])(void); + +void func_80170FB0(void *a0) { + D_80182CD8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80182CE0[])(void); + +void func_80171064(void *a0) { + D_80182CE0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80182CE8[])(void); + +void func_80171120(void *a0) { + D_80182CE8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80182CF0[])(void); + +void func_801711C0(void *a0) { + D_80182CF0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80182CF8[])(void); + +void func_80171260(void *a0) { + D_80182CF8[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80182D00[])(void); + +void func_801714E4(void *a0) { + D_80182D00[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8016AB6C", func_80172C50); + + +extern void (*D_80182D44[])(void); + +void func_80172CA0(void *a0) { + D_80182D44[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80182D08; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80182D08); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC01_009/ov_SC01_009_jr_8015AE2C.c b/src/ov_SC01_009/ov_SC01_009_jr_8015AE2C.c index adea4d356..01abdcecc 100644 --- a/src/ov_SC01_009/ov_SC01_009_jr_8015AE2C.c +++ b/src/ov_SC01_009/ov_SC01_009_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_80185AE4[])(void); void func_8016AB30(void *a0) { D_80185AE4[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80185B60[])(void); - -void func_8016B4BC(void *a0) { - D_80185B60[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801F2448; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801F2448); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80185B54[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80185B54; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80185B98[]; -extern unsigned short D_80185BA0[]; -extern unsigned short D_80185BA8[]; -extern unsigned char D_801F2450[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801F2450 + param_2 * 0x40); - puVar3 = D_80185B98[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80185BA0[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80185BA8[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801F2448; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801F2448, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80185BB0[])(void); - -void func_8016BBA4(void *a0) { - D_80185BB0[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801F2584; - extern u8 D_801F2585; - extern u8 D_801F2586; - extern M2C_UNK D_801F2588; - extern u8 D_801F2589; - extern u8 D_801F258A; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801F2584) = 0x20; - D_801F2585 = 0x20; - D_801F2586 = 0; - (*(u8 *)&D_801F2588) = 0xc0; - D_801F2589 = 0xc0; - D_801F258A = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801F2584; -extern M2C_UNK D_801F2588; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801F2584, &D_801F2588, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801F2585; - extern u8 D_801F2586; - extern u8 D_801F2589; - extern u8 D_801F258A; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801F2584); - if (*p1 != 0) *p1 -= 4; - if (D_801F2585 != 0) D_801F2585 -= 4; - if (D_801F2586 != 0) D_801F2586 -= 4; - p2 = &(*(u8 *)&D_801F2588); - if (*p2 != 0) *p2 -= 4; - if (D_801F2589 != 0) D_801F2589 -= 4; - if (D_801F258A != 0) D_801F258A -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801F2584), &(*(int *)&D_801F2588), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801F2510; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801F2510); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80185BC0; - extern s32 D_80185BC8; - extern s32 D_80185BD0; - extern s32 D_80185BD8; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80185BC0, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80185BC8, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80185BD0, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80185BD8, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80185BE0[])(void); - -void func_8016C14C(void *a0) { - D_80185BE0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801F258C[]; -extern u8 D_801F2594[]; -extern u8 D_801F2544[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801F258C, D_801F2594, D_801F2544); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801F25A0[]; - extern u8 D_801F2660; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801F25A0[1] = 0xff; - D_801F25A0[2] = 0x10; - D_801F25A0[0] = 0x10; - D_801F25A0[6] = 0; - D_801F25A0[5] = 0; - D_801F25A0[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801F25A0, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801F2660, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801F25A0); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8015AE2C", func_8016C998); - - -extern void (*D_80185BE8[])(void); - -void func_8016CB84(void *a0) { - D_80185BE8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801F2660[]; - - - Blk_8016CF04_8016CF04 *p = &D_801F2660[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80185C04[])(void); - -void func_8016D19C(void *a0) { - D_80185C04[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80185C0C[])(void); - -void func_8016D428(void *a0) { - D_80185C0C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80185C74[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80185C74[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80185C18; -extern u8 D_80185C24; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80185C18, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80185C24); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80185CA8[])(void); - -void func_8016DEA4(void *a0) { - D_80185CA8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80185CB0[])(void); - -void func_8016DF20(void *a0) { - D_80185CB0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80185D04[])(void); - -void func_8016E5B8(void *a0) { - D_80185D04[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80185CC4[4]; - extern s32 D_80185CE4; - extern s32 D_80185CEC; - extern s32 D_80185CF4; - extern s32 D_80185CFC; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80185CC4[0], pp, &tmp); - RotTransSV(&D_80185CC4[1], &prim.v[1], &tmp); - RotTransSV(&D_80185CC4[2], &prim.v[2], &tmp); - RotTransSV(&D_80185CC4[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80185CE4; - prim.f1 = D_80185CEC; - prim.f2 = D_80185CF4; - prim.f3 = D_80185CFC; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80185D44[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80185D44[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80185D38[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80185D38[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80185D28[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80185D28[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80185D38[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80185D38[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80185D38[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80185D54; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80185D54; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80185DCC[])(void); - -void func_8016F6E0(void *a0) { - D_80185DCC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80185DD4[])(void); - -void func_8016F798(void *a0) { - D_80185DD4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80185DDC[])(void); - -void func_8016F834(void *a0) { - D_80185DDC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80185DE4[])(void); - -void func_8016F8E4(void *a0) { - D_80185DE4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80185DEC[])(void); - -void func_8016F9C4(void *a0) { - D_80185DEC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80185DF4[])(void); - -void func_8016FA84(void *a0) { - D_80185DF4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80185E00[])(void); - -void func_8016FB7C(void *a0) { - D_80185E00[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80185E0C[])(void); - -void func_8016FC90(void *a0) { - D_80185E0C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80185E18[])(void); - -void func_8016FDB4(void *a0) { - D_80185E18[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80185E28[])(void); - -void func_8016FF30(void *a0) { - D_80185E28[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80185E38[])(void); - -void func_8016FFDC(void *a0) { - D_80185E38[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80185E40[])(void); - -void func_80170150(void *a0) { - D_80185E40[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80185E48[])(void); - -void func_80170240(void *a0) { - D_80185E48[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80185E50[])(void); - -void func_801702FC(void *a0) { - D_80185E50[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80185E58[])(void); - -void func_801703E0(void *a0) { - D_80185E58[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80185E60[])(void); - -void func_801704B0(void *a0) { - D_80185E60[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80185E68[])(void); - -void func_80170548(void *a0) { - D_80185E68[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80185E70[])(void); - -void func_801705F8(void *a0) { - D_80185E70[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80185E78[])(void); - -void func_801706AC(void *a0) { - D_80185E78[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80185E80[])(void); - -void func_80170748(void *a0) { - D_80185E80[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80185E88[])(void); - -void func_80170810(void *a0) { - D_80185E88[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80185E90[])(void); - -void func_80170AD8(void *a0) { - D_80185E90[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80185E98[])(void); - -void func_80170BD8(void *a0) { - D_80185E98[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80185EA0[])(void); - -void func_80170C74(void *a0) { - D_80185EA0[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80185EA8[])(void); - -void func_80170D68(void *a0) { - D_80185EA8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80185EB0[])(void); - -void func_80170E34(void *a0) { - D_80185EB0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80185EB8[])(void); - -void func_80170EFC(void *a0) { - D_80185EB8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80185EC0[])(void); - -void func_80170FB0(void *a0) { - D_80185EC0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80185EC8[])(void); - -void func_80171064(void *a0) { - D_80185EC8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80185ED0[])(void); - -void func_80171120(void *a0) { - D_80185ED0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80185ED8[])(void); - -void func_801711C0(void *a0) { - D_80185ED8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80185EE0[])(void); - -void func_80171260(void *a0) { - D_80185EE0[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80185EE8[])(void); - -void func_801714E4(void *a0) { - D_80185EE8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8015AE2C", func_80172C50); - - -extern void (*D_80185F2C[])(void); - -void func_80172CA0(void *a0) { - D_80185F2C[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80185EF0; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80185EF0); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC01_009/ov_SC01_009_jr_8016AB6C.c b/src/ov_SC01_009/ov_SC01_009_jr_8016AB6C.c new file mode 100644 index 000000000..ef3007b9d --- /dev/null +++ b/src/ov_SC01_009/ov_SC01_009_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80184EB0; +extern u8 D_80184E20; +extern u8 D_80184DFC; +extern u8 D_80184DD8; +extern u8 D_80184E8C; +extern u8 D_80184E68; +extern u8 D_80184E44; +extern u8 D_80184DB4; +extern void func_80145934(void); +extern u8 D_80184F40; +extern u8 D_80184F1C; +extern u8 D_80184EF8; +extern u8 D_80184ED4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80184338[]; +extern unsigned char D_80184368[]; +extern unsigned char D_801843B8[]; +extern unsigned char D_801843E8[]; +extern unsigned char D_80184418[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80184468[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80184530[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801845B8[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801845C0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801F1FD8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801F1FDC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801845F0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80184698[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801846BC[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801846AC; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801846D0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801846DC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801846EC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80184704[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801846F4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80184718[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80184734[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80184724; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80184748[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018475C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80184770; +extern void (*D_80184798[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80184778; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801847E4[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801847E8[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80184C4C[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80184C5C[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801F2010; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80184C84[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80184C64; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80184C74; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80184CC4[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80184CCC[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80184C98; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80184CD8[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80184CA8; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801F2018; +extern s32 D_801F2024; +extern s32 D_801F2028; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80184D14[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80184CE8[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801F2020; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80184F64[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80184D84[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80185008[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018515C[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80184F78; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80185164[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80184F88; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80184FA8; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_8018516C[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80185194[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_801851A0[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80185014[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80185244; +extern void func_8015D380(s32 a0); +extern unsigned char D_80184328[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80185258[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80185294[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_801852DC; +extern u16 D_801852DE; +extern u16 D_801852E0; +extern s32 D_801852E4; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_801852EC; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80184FF8; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80185370[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80185420[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80185450[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_801854B4; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801F2030[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_801854D8[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801F2088[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80185520[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80185510; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801F12E0[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80185528[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_8018557C[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80185544; +extern s16 D_80185578; +extern s16 D_80185576; +extern s16 D_80185574; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80185588[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801F20E8; +extern u8 D_801F20E9; +extern u8 D_801F20EA; +extern u8 D_801F20EB; +extern u8 D_801F20EC; +extern u8 D_801F20ED; +extern u8 D_801F20EE; +extern u8 D_801F20EF; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80185598[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801F2128; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_801855DC[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80185658[]; +extern s32 D_80185678[]; +extern u8 D_801856F4[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80185714[]; +extern u8 D_80185734[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_801857D0[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_8018584C[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801F12F0; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80185858[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80185860[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80185928[])(void); +extern void func_80166618(void *a0); +extern void (*D_80185938[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80185948[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80185954[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_801858B4[]; +extern u8 D_801858C8[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_8018596C[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80185974[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_8018597C[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80185984[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_8018598C[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80185994[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_8018599C[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80185A50[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80185A58[])(void); +extern void func_80169F00(void *a0); +extern char D_80185A08[]; +extern char D_801859C8[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80185A90[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80185A9C[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80185AE4[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80185AA4[]; + extern u8 D_80185AB4[]; + extern u8 D_801F23F8[]; + extern u8 D_801F2420[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80185AA4, D_801F23F8) + 3; + func_8001CE28(obj, D_801F23F8); + } else { + var_s3 = func_80024054(D_80185AB4, D_801F2420) + 9; + func_8001CE28(obj, D_801F2420); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80185B60[])(void); + +void func_8016B4BC(void *a0) { + D_80185B60[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801F2448; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801F2448); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80185B54[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80185B54; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80185B98[]; +extern unsigned short D_80185BA0[]; +extern unsigned short D_80185BA8[]; +extern unsigned char D_801F2450[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801F2450 + param_2 * 0x40); + puVar3 = D_80185B98[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80185BA0[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80185BA8[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801F2448; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801F2448, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80185BB0[])(void); + +void func_8016BBA4(void *a0) { + D_80185BB0[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801F2584; + extern u8 D_801F2585; + extern u8 D_801F2586; + extern M2C_UNK D_801F2588; + extern u8 D_801F2589; + extern u8 D_801F258A; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801F2584) = 0x20; + D_801F2585 = 0x20; + D_801F2586 = 0; + (*(u8 *)&D_801F2588) = 0xc0; + D_801F2589 = 0xc0; + D_801F258A = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801F2584; +extern M2C_UNK D_801F2588; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801F2584, &D_801F2588, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801F2585; + extern u8 D_801F2586; + extern u8 D_801F2589; + extern u8 D_801F258A; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801F2584); + if (*p1 != 0) *p1 -= 4; + if (D_801F2585 != 0) D_801F2585 -= 4; + if (D_801F2586 != 0) D_801F2586 -= 4; + p2 = &(*(u8 *)&D_801F2588); + if (*p2 != 0) *p2 -= 4; + if (D_801F2589 != 0) D_801F2589 -= 4; + if (D_801F258A != 0) D_801F258A -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801F2584), &(*(int *)&D_801F2588), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801F2510; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801F2510); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80185BC0; + extern s32 D_80185BC8; + extern s32 D_80185BD0; + extern s32 D_80185BD8; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80185BC0, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80185BC8, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80185BD0, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80185BD8, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80185BE0[])(void); + +void func_8016C14C(void *a0) { + D_80185BE0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801F258C[]; +extern u8 D_801F2594[]; +extern u8 D_801F2544[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801F258C, D_801F2594, D_801F2544); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801F25A0[]; + extern u8 D_801F2660; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801F25A0[1] = 0xff; + D_801F25A0[2] = 0x10; + D_801F25A0[0] = 0x10; + D_801F25A0[6] = 0; + D_801F25A0[5] = 0; + D_801F25A0[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801F25A0, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801F2660, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801F25A0); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8016AB6C", func_8016C998); + + +extern void (*D_80185BE8[])(void); + +void func_8016CB84(void *a0) { + D_80185BE8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801F2660[]; + + + Blk_8016CF04_8016CF04 *p = &D_801F2660[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80185C04[])(void); + +void func_8016D19C(void *a0) { + D_80185C04[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80185C0C[])(void); + +void func_8016D428(void *a0) { + D_80185C0C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80185C74[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80185C74[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80185C18; +extern u8 D_80185C24; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80185C18, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80185C24); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80185CA8[])(void); + +void func_8016DEA4(void *a0) { + D_80185CA8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80185CB0[])(void); + +void func_8016DF20(void *a0) { + D_80185CB0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80185D04[])(void); + +void func_8016E5B8(void *a0) { + D_80185D04[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80185CC4[4]; + extern s32 D_80185CE4; + extern s32 D_80185CEC; + extern s32 D_80185CF4; + extern s32 D_80185CFC; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80185CC4[0], pp, &tmp); + RotTransSV(&D_80185CC4[1], &prim.v[1], &tmp); + RotTransSV(&D_80185CC4[2], &prim.v[2], &tmp); + RotTransSV(&D_80185CC4[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80185CE4; + prim.f1 = D_80185CEC; + prim.f2 = D_80185CF4; + prim.f3 = D_80185CFC; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80185D44[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80185D44[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80185D38[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80185D38[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80185D28[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80185D28[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80185D38[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80185D38[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80185D38[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80185D54; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80185D54; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80185DCC[])(void); + +void func_8016F6E0(void *a0) { + D_80185DCC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80185DD4[])(void); + +void func_8016F798(void *a0) { + D_80185DD4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80185DDC[])(void); + +void func_8016F834(void *a0) { + D_80185DDC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80185DE4[])(void); + +void func_8016F8E4(void *a0) { + D_80185DE4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80185DEC[])(void); + +void func_8016F9C4(void *a0) { + D_80185DEC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80185DF4[])(void); + +void func_8016FA84(void *a0) { + D_80185DF4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80185E00[])(void); + +void func_8016FB7C(void *a0) { + D_80185E00[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80185E0C[])(void); + +void func_8016FC90(void *a0) { + D_80185E0C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80185E18[])(void); + +void func_8016FDB4(void *a0) { + D_80185E18[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80185E28[])(void); + +void func_8016FF30(void *a0) { + D_80185E28[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80185E38[])(void); + +void func_8016FFDC(void *a0) { + D_80185E38[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80185E40[])(void); + +void func_80170150(void *a0) { + D_80185E40[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80185E48[])(void); + +void func_80170240(void *a0) { + D_80185E48[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80185E50[])(void); + +void func_801702FC(void *a0) { + D_80185E50[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80185E58[])(void); + +void func_801703E0(void *a0) { + D_80185E58[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80185E60[])(void); + +void func_801704B0(void *a0) { + D_80185E60[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80185E68[])(void); + +void func_80170548(void *a0) { + D_80185E68[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80185E70[])(void); + +void func_801705F8(void *a0) { + D_80185E70[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80185E78[])(void); + +void func_801706AC(void *a0) { + D_80185E78[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80185E80[])(void); + +void func_80170748(void *a0) { + D_80185E80[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80185E88[])(void); + +void func_80170810(void *a0) { + D_80185E88[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80185E90[])(void); + +void func_80170AD8(void *a0) { + D_80185E90[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80185E98[])(void); + +void func_80170BD8(void *a0) { + D_80185E98[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80185EA0[])(void); + +void func_80170C74(void *a0) { + D_80185EA0[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80185EA8[])(void); + +void func_80170D68(void *a0) { + D_80185EA8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80185EB0[])(void); + +void func_80170E34(void *a0) { + D_80185EB0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80185EB8[])(void); + +void func_80170EFC(void *a0) { + D_80185EB8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80185EC0[])(void); + +void func_80170FB0(void *a0) { + D_80185EC0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80185EC8[])(void); + +void func_80171064(void *a0) { + D_80185EC8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80185ED0[])(void); + +void func_80171120(void *a0) { + D_80185ED0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80185ED8[])(void); + +void func_801711C0(void *a0) { + D_80185ED8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80185EE0[])(void); + +void func_80171260(void *a0) { + D_80185EE0[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80185EE8[])(void); + +void func_801714E4(void *a0) { + D_80185EE8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8016AB6C", func_80172C50); + + +extern void (*D_80185F2C[])(void); + +void func_80172CA0(void *a0) { + D_80185F2C[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80185EF0; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80185EF0); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC01_074/ov_SC01_074_jr_8015AE2C.c b/src/ov_SC01_074/ov_SC01_074_jr_8015AE2C.c index d345494dc..0451d21c5 100644 --- a/src/ov_SC01_074/ov_SC01_074_jr_8015AE2C.c +++ b/src/ov_SC01_074/ov_SC01_074_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_80181764[])(void); void func_8016AB30(void *a0) { D_80181764[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_801817E0[])(void); - -void func_8016B4BC(void *a0) { - D_801817E0[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_8019AEC8; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_8019AEC8); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_801817D4[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_801817D4; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80181818[]; -extern unsigned short D_80181820[]; -extern unsigned short D_80181828[]; -extern unsigned char D_8019AED0[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_8019AED0 + param_2 * 0x40); - puVar3 = D_80181818[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80181820[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80181828[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_8019AEC8; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_8019AEC8, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80181830[])(void); - -void func_8016BBA4(void *a0) { - D_80181830[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_8019B004; - extern u8 D_8019B005; - extern u8 D_8019B006; - extern M2C_UNK D_8019B008; - extern u8 D_8019B009; - extern u8 D_8019B00A; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_8019B004) = 0x20; - D_8019B005 = 0x20; - D_8019B006 = 0; - (*(u8 *)&D_8019B008) = 0xc0; - D_8019B009 = 0xc0; - D_8019B00A = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_8019B004; -extern M2C_UNK D_8019B008; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_8019B004, &D_8019B008, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_8019B005; - extern u8 D_8019B006; - extern u8 D_8019B009; - extern u8 D_8019B00A; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_8019B004); - if (*p1 != 0) *p1 -= 4; - if (D_8019B005 != 0) D_8019B005 -= 4; - if (D_8019B006 != 0) D_8019B006 -= 4; - p2 = &(*(u8 *)&D_8019B008); - if (*p2 != 0) *p2 -= 4; - if (D_8019B009 != 0) D_8019B009 -= 4; - if (D_8019B00A != 0) D_8019B00A -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_8019B004), &(*(int *)&D_8019B008), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_8019AF90; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_8019AF90); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80181840; - extern s32 D_80181848; - extern s32 D_80181850; - extern s32 D_80181858; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80181840, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80181848, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80181850, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80181858, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80181860[])(void); - -void func_8016C14C(void *a0) { - D_80181860[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_8019B00C[]; -extern u8 D_8019B014[]; -extern u8 D_8019AFC4[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_8019B00C, D_8019B014, D_8019AFC4); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_8019B020[]; - extern u8 D_8019B0E0; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_8019B020[1] = 0xff; - D_8019B020[2] = 0x10; - D_8019B020[0] = 0x10; - D_8019B020[6] = 0; - D_8019B020[5] = 0; - D_8019B020[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_8019B020, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_8019B0E0, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_8019B020); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8015AE2C", func_8016C998); - - -extern void (*D_80181868[])(void); - -void func_8016CB84(void *a0) { - D_80181868[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_8019B0E0[]; - - - Blk_8016CF04_8016CF04 *p = &D_8019B0E0[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80181884[])(void); - -void func_8016D19C(void *a0) { - D_80181884[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_8018188C[])(void); - -void func_8016D428(void *a0) { - D_8018188C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_801818F4[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_801818F4[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80181898; -extern u8 D_801818A4; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80181898, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801818A4); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80181928[])(void); - -void func_8016DEA4(void *a0) { - D_80181928[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80181930[])(void); - -void func_8016DF20(void *a0) { - D_80181930[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80181984[])(void); - -void func_8016E5B8(void *a0) { - D_80181984[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80181944[4]; - extern s32 D_80181964; - extern s32 D_8018196C; - extern s32 D_80181974; - extern s32 D_8018197C; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80181944[0], pp, &tmp); - RotTransSV(&D_80181944[1], &prim.v[1], &tmp); - RotTransSV(&D_80181944[2], &prim.v[2], &tmp); - RotTransSV(&D_80181944[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80181964; - prim.f1 = D_8018196C; - prim.f2 = D_80181974; - prim.f3 = D_8018197C; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_801819C4[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_801819C4[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_801819B8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_801819B8[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_801819A8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_801819A8[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801819B8[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_801819B8[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_801819B8[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_801819D4; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_801819D4; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80181A4C[])(void); - -void func_8016F6E0(void *a0) { - D_80181A4C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80181A54[])(void); - -void func_8016F798(void *a0) { - D_80181A54[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80181A5C[])(void); - -void func_8016F834(void *a0) { - D_80181A5C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80181A64[])(void); - -void func_8016F8E4(void *a0) { - D_80181A64[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80181A6C[])(void); - -void func_8016F9C4(void *a0) { - D_80181A6C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80181A74[])(void); - -void func_8016FA84(void *a0) { - D_80181A74[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80181A80[])(void); - -void func_8016FB7C(void *a0) { - D_80181A80[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80181A8C[])(void); - -void func_8016FC90(void *a0) { - D_80181A8C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80181A98[])(void); - -void func_8016FDB4(void *a0) { - D_80181A98[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80181AA8[])(void); - -void func_8016FF30(void *a0) { - D_80181AA8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80181AB8[])(void); - -void func_8016FFDC(void *a0) { - D_80181AB8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80181AC0[])(void); - -void func_80170150(void *a0) { - D_80181AC0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80181AC8[])(void); - -void func_80170240(void *a0) { - D_80181AC8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80181AD0[])(void); - -void func_801702FC(void *a0) { - D_80181AD0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80181AD8[])(void); - -void func_801703E0(void *a0) { - D_80181AD8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80181AE0[])(void); - -void func_801704B0(void *a0) { - D_80181AE0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80181AE8[])(void); - -void func_80170548(void *a0) { - D_80181AE8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80181AF0[])(void); - -void func_801705F8(void *a0) { - D_80181AF0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80181AF8[])(void); - -void func_801706AC(void *a0) { - D_80181AF8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80181B00[])(void); - -void func_80170748(void *a0) { - D_80181B00[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80181B08[])(void); - -void func_80170810(void *a0) { - D_80181B08[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80181B10[])(void); - -void func_80170AD8(void *a0) { - D_80181B10[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80181B18[])(void); - -void func_80170BD8(void *a0) { - D_80181B18[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80181B20[])(void); - -void func_80170C74(void *a0) { - D_80181B20[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80181B28[])(void); - -void func_80170D68(void *a0) { - D_80181B28[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80181B30[])(void); - -void func_80170E34(void *a0) { - D_80181B30[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80181B38[])(void); - -void func_80170EFC(void *a0) { - D_80181B38[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80181B40[])(void); - -void func_80170FB0(void *a0) { - D_80181B40[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80181B48[])(void); - -void func_80171064(void *a0) { - D_80181B48[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80181B50[])(void); - -void func_80171120(void *a0) { - D_80181B50[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80181B58[])(void); - -void func_801711C0(void *a0) { - D_80181B58[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80181B60[])(void); - -void func_80171260(void *a0) { - D_80181B60[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80181B68[])(void); - -void func_801714E4(void *a0) { - D_80181B68[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8015AE2C", func_80172C50); - - -extern void (*D_80181BAC[])(void); - -void func_80172CA0(void *a0) { - D_80181BAC[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80181B70; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80181B70); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC01_074/ov_SC01_074_jr_8016AB6C.c b/src/ov_SC01_074/ov_SC01_074_jr_8016AB6C.c new file mode 100644 index 000000000..926ca11ce --- /dev/null +++ b/src/ov_SC01_074/ov_SC01_074_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80180B30; +extern u8 D_80180AA0; +extern u8 D_80180A7C; +extern u8 D_80180A58; +extern u8 D_80180B0C; +extern u8 D_80180AE8; +extern u8 D_80180AC4; +extern u8 D_80180A34; +extern void func_80145934(void); +extern u8 D_80180BC0; +extern u8 D_80180B9C; +extern u8 D_80180B78; +extern u8 D_80180B54; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8017FFB8[]; +extern unsigned char D_8017FFE8[]; +extern unsigned char D_80180038[]; +extern unsigned char D_80180068[]; +extern unsigned char D_80180098[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801800E8[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801801B0[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80180238[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80180240; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8019AA58; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019AA5C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80180270; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80180318[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018033C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018032C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80180350[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018035C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018036C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80180384[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80180374; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80180398[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801803B4[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801803A4; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801803C8[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801803DC[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801803F0; +extern void (*D_80180418[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801803F8; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80180464[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80180468[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_801808CC[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_801808DC[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_8019AA90; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80180904[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801808E4; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_801808F4; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80180944[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018094C[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80180918; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80180958[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80180928; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_8019AA98; +extern s32 D_8019AAA4; +extern s32 D_8019AAA8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80180994[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80180968[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_8019AAA0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80180BE4[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80180A04[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80180C88[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80180DDC[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80180BF8; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80180DE4[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80180C08; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80180C28; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80180DEC[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80180E14[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80180E20[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80180C94[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80180EC4; +extern void func_8015D380(s32 a0); +extern unsigned char D_8017FFA8[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80180ED8[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80180F14[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80180F5C; +extern u16 D_80180F5E; +extern u16 D_80180F60; +extern s32 D_80180F64; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80180F6C; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80180C78; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80180FF0[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_801810A0[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_801810D0[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80181134; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_8019AAB0[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80181158[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_8019AB08[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_801811A0[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80181190; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_8019A370[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_801811A8[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_801811FC[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_801811C4; +extern s16 D_801811F8; +extern s16 D_801811F6; +extern s16 D_801811F4; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80181208[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_8019AB68; +extern u8 D_8019AB69; +extern u8 D_8019AB6A; +extern u8 D_8019AB6B; +extern u8 D_8019AB6C; +extern u8 D_8019AB6D; +extern u8 D_8019AB6E; +extern u8 D_8019AB6F; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80181218[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_8019ABA8; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_8018125C[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_801812D8[]; +extern s32 D_801812F8[]; +extern u8 D_80181374[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80181394[]; +extern u8 D_801813B4[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80181450[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_801814CC[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_8019A380; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_801814D8[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_801814E0[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_801815A8[])(void); +extern void func_80166618(void *a0); +extern void (*D_801815B8[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_801815C8[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_801815D4[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80181534[]; +extern u8 D_80181548[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_801815EC[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_801815F4[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_801815FC[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80181604[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_8018160C[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80181614[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_8018161C[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_801816D0[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_801816D8[])(void); +extern void func_80169F00(void *a0); +extern char D_80181688[]; +extern char D_80181648[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80181710[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_8018171C[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80181764[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80181724[]; + extern u8 D_80181734[]; + extern u8 D_8019AE78[]; + extern u8 D_8019AEA0[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80181724, D_8019AE78) + 3; + func_8001CE28(obj, D_8019AE78); + } else { + var_s3 = func_80024054(D_80181734, D_8019AEA0) + 9; + func_8001CE28(obj, D_8019AEA0); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_801817E0[])(void); + +void func_8016B4BC(void *a0) { + D_801817E0[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_8019AEC8; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_8019AEC8); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_801817D4[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_801817D4; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80181818[]; +extern unsigned short D_80181820[]; +extern unsigned short D_80181828[]; +extern unsigned char D_8019AED0[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_8019AED0 + param_2 * 0x40); + puVar3 = D_80181818[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80181820[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80181828[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_8019AEC8; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_8019AEC8, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80181830[])(void); + +void func_8016BBA4(void *a0) { + D_80181830[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_8019B004; + extern u8 D_8019B005; + extern u8 D_8019B006; + extern M2C_UNK D_8019B008; + extern u8 D_8019B009; + extern u8 D_8019B00A; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_8019B004) = 0x20; + D_8019B005 = 0x20; + D_8019B006 = 0; + (*(u8 *)&D_8019B008) = 0xc0; + D_8019B009 = 0xc0; + D_8019B00A = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_8019B004; +extern M2C_UNK D_8019B008; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_8019B004, &D_8019B008, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_8019B005; + extern u8 D_8019B006; + extern u8 D_8019B009; + extern u8 D_8019B00A; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_8019B004); + if (*p1 != 0) *p1 -= 4; + if (D_8019B005 != 0) D_8019B005 -= 4; + if (D_8019B006 != 0) D_8019B006 -= 4; + p2 = &(*(u8 *)&D_8019B008); + if (*p2 != 0) *p2 -= 4; + if (D_8019B009 != 0) D_8019B009 -= 4; + if (D_8019B00A != 0) D_8019B00A -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_8019B004), &(*(int *)&D_8019B008), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_8019AF90; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_8019AF90); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80181840; + extern s32 D_80181848; + extern s32 D_80181850; + extern s32 D_80181858; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80181840, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80181848, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80181850, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80181858, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80181860[])(void); + +void func_8016C14C(void *a0) { + D_80181860[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_8019B00C[]; +extern u8 D_8019B014[]; +extern u8 D_8019AFC4[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_8019B00C, D_8019B014, D_8019AFC4); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_8019B020[]; + extern u8 D_8019B0E0; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_8019B020[1] = 0xff; + D_8019B020[2] = 0x10; + D_8019B020[0] = 0x10; + D_8019B020[6] = 0; + D_8019B020[5] = 0; + D_8019B020[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_8019B020, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_8019B0E0, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_8019B020); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8016AB6C", func_8016C998); + + +extern void (*D_80181868[])(void); + +void func_8016CB84(void *a0) { + D_80181868[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_8019B0E0[]; + + + Blk_8016CF04_8016CF04 *p = &D_8019B0E0[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80181884[])(void); + +void func_8016D19C(void *a0) { + D_80181884[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_8018188C[])(void); + +void func_8016D428(void *a0) { + D_8018188C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_801818F4[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_801818F4[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80181898; +extern u8 D_801818A4; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80181898, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801818A4); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80181928[])(void); + +void func_8016DEA4(void *a0) { + D_80181928[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80181930[])(void); + +void func_8016DF20(void *a0) { + D_80181930[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80181984[])(void); + +void func_8016E5B8(void *a0) { + D_80181984[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80181944[4]; + extern s32 D_80181964; + extern s32 D_8018196C; + extern s32 D_80181974; + extern s32 D_8018197C; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80181944[0], pp, &tmp); + RotTransSV(&D_80181944[1], &prim.v[1], &tmp); + RotTransSV(&D_80181944[2], &prim.v[2], &tmp); + RotTransSV(&D_80181944[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80181964; + prim.f1 = D_8018196C; + prim.f2 = D_80181974; + prim.f3 = D_8018197C; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_801819C4[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_801819C4[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_801819B8[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_801819B8[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_801819A8[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_801819A8[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801819B8[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_801819B8[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_801819B8[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_801819D4; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_801819D4; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80181A4C[])(void); + +void func_8016F6E0(void *a0) { + D_80181A4C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80181A54[])(void); + +void func_8016F798(void *a0) { + D_80181A54[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80181A5C[])(void); + +void func_8016F834(void *a0) { + D_80181A5C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80181A64[])(void); + +void func_8016F8E4(void *a0) { + D_80181A64[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80181A6C[])(void); + +void func_8016F9C4(void *a0) { + D_80181A6C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80181A74[])(void); + +void func_8016FA84(void *a0) { + D_80181A74[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80181A80[])(void); + +void func_8016FB7C(void *a0) { + D_80181A80[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80181A8C[])(void); + +void func_8016FC90(void *a0) { + D_80181A8C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80181A98[])(void); + +void func_8016FDB4(void *a0) { + D_80181A98[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80181AA8[])(void); + +void func_8016FF30(void *a0) { + D_80181AA8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80181AB8[])(void); + +void func_8016FFDC(void *a0) { + D_80181AB8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80181AC0[])(void); + +void func_80170150(void *a0) { + D_80181AC0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80181AC8[])(void); + +void func_80170240(void *a0) { + D_80181AC8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80181AD0[])(void); + +void func_801702FC(void *a0) { + D_80181AD0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80181AD8[])(void); + +void func_801703E0(void *a0) { + D_80181AD8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80181AE0[])(void); + +void func_801704B0(void *a0) { + D_80181AE0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80181AE8[])(void); + +void func_80170548(void *a0) { + D_80181AE8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80181AF0[])(void); + +void func_801705F8(void *a0) { + D_80181AF0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80181AF8[])(void); + +void func_801706AC(void *a0) { + D_80181AF8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80181B00[])(void); + +void func_80170748(void *a0) { + D_80181B00[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80181B08[])(void); + +void func_80170810(void *a0) { + D_80181B08[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80181B10[])(void); + +void func_80170AD8(void *a0) { + D_80181B10[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80181B18[])(void); + +void func_80170BD8(void *a0) { + D_80181B18[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80181B20[])(void); + +void func_80170C74(void *a0) { + D_80181B20[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80181B28[])(void); + +void func_80170D68(void *a0) { + D_80181B28[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80181B30[])(void); + +void func_80170E34(void *a0) { + D_80181B30[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80181B38[])(void); + +void func_80170EFC(void *a0) { + D_80181B38[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80181B40[])(void); + +void func_80170FB0(void *a0) { + D_80181B40[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80181B48[])(void); + +void func_80171064(void *a0) { + D_80181B48[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80181B50[])(void); + +void func_80171120(void *a0) { + D_80181B50[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80181B58[])(void); + +void func_801711C0(void *a0) { + D_80181B58[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80181B60[])(void); + +void func_80171260(void *a0) { + D_80181B60[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80181B68[])(void); + +void func_801714E4(void *a0) { + D_80181B68[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8016AB6C", func_80172C50); + + +extern void (*D_80181BAC[])(void); + +void func_80172CA0(void *a0) { + D_80181BAC[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80181B70; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80181B70); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC01_080/ov_SC01_080_jr_8015AE2C.c b/src/ov_SC01_080/ov_SC01_080_jr_8015AE2C.c index 2318a3fe5..dd0ab34c3 100644 --- a/src/ov_SC01_080/ov_SC01_080_jr_8015AE2C.c +++ b/src/ov_SC01_080/ov_SC01_080_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_801866C4[])(void); void func_8016AB30(void *a0) { D_801866C4[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80186740[])(void); - -void func_8016B4BC(void *a0) { - D_80186740[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801C4CF8; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801C4CF8); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80186734[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80186734; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80186778[]; -extern unsigned short D_80186780[]; -extern unsigned short D_80186788[]; -extern unsigned char D_801C4D00[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801C4D00 + param_2 * 0x40); - puVar3 = D_80186778[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80186780[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80186788[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801C4CF8; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801C4CF8, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80186790[])(void); - -void func_8016BBA4(void *a0) { - D_80186790[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801C4E34; - extern u8 D_801C4E35; - extern u8 D_801C4E36; - extern M2C_UNK D_801C4E38; - extern u8 D_801C4E39; - extern u8 D_801C4E3A; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801C4E34) = 0x20; - D_801C4E35 = 0x20; - D_801C4E36 = 0; - (*(u8 *)&D_801C4E38) = 0xc0; - D_801C4E39 = 0xc0; - D_801C4E3A = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801C4E34; -extern M2C_UNK D_801C4E38; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801C4E34, &D_801C4E38, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801C4E35; - extern u8 D_801C4E36; - extern u8 D_801C4E39; - extern u8 D_801C4E3A; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801C4E34); - if (*p1 != 0) *p1 -= 4; - if (D_801C4E35 != 0) D_801C4E35 -= 4; - if (D_801C4E36 != 0) D_801C4E36 -= 4; - p2 = &(*(u8 *)&D_801C4E38); - if (*p2 != 0) *p2 -= 4; - if (D_801C4E39 != 0) D_801C4E39 -= 4; - if (D_801C4E3A != 0) D_801C4E3A -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801C4E34), &(*(int *)&D_801C4E38), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801C4DC0; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801C4DC0); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_801867A0; - extern s32 D_801867A8; - extern s32 D_801867B0; - extern s32 D_801867B8; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_801867A0, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_801867A8, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_801867B0, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_801867B8, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_801867C0[])(void); - -void func_8016C14C(void *a0) { - D_801867C0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801C4E3C[]; -extern u8 D_801C4E44[]; -extern u8 D_801C4DF4[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801C4E3C, D_801C4E44, D_801C4DF4); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801C4E50[]; - extern u8 D_801C4F10; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801C4E50[1] = 0xff; - D_801C4E50[2] = 0x10; - D_801C4E50[0] = 0x10; - D_801C4E50[6] = 0; - D_801C4E50[5] = 0; - D_801C4E50[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801C4E50, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801C4F10, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801C4E50); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8015AE2C", func_8016C998); - - -extern void (*D_801867C8[])(void); - -void func_8016CB84(void *a0) { - D_801867C8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801C4F10[]; - - - Blk_8016CF04_8016CF04 *p = &D_801C4F10[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_801867E4[])(void); - -void func_8016D19C(void *a0) { - D_801867E4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_801867EC[])(void); - -void func_8016D428(void *a0) { - D_801867EC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80186854[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80186854[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_801867F8; -extern u8 D_80186804; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801867F8, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80186804); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80186888[])(void); - -void func_8016DEA4(void *a0) { - D_80186888[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80186890[])(void); - -void func_8016DF20(void *a0) { - D_80186890[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_801868E4[])(void); - -void func_8016E5B8(void *a0) { - D_801868E4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_801868A4[4]; - extern s32 D_801868C4; - extern s32 D_801868CC; - extern s32 D_801868D4; - extern s32 D_801868DC; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_801868A4[0], pp, &tmp); - RotTransSV(&D_801868A4[1], &prim.v[1], &tmp); - RotTransSV(&D_801868A4[2], &prim.v[2], &tmp); - RotTransSV(&D_801868A4[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_801868C4; - prim.f1 = D_801868CC; - prim.f2 = D_801868D4; - prim.f3 = D_801868DC; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80186924[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80186924[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80186918[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80186918[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80186908[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80186908[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80186918[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80186918[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80186918[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80186934; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80186934; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_801869AC[])(void); - -void func_8016F6E0(void *a0) { - D_801869AC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_801869B4[])(void); - -void func_8016F798(void *a0) { - D_801869B4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_801869BC[])(void); - -void func_8016F834(void *a0) { - D_801869BC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_801869C4[])(void); - -void func_8016F8E4(void *a0) { - D_801869C4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_801869CC[])(void); - -void func_8016F9C4(void *a0) { - D_801869CC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_801869D4[])(void); - -void func_8016FA84(void *a0) { - D_801869D4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_801869E0[])(void); - -void func_8016FB7C(void *a0) { - D_801869E0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_801869EC[])(void); - -void func_8016FC90(void *a0) { - D_801869EC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_801869F8[])(void); - -void func_8016FDB4(void *a0) { - D_801869F8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80186A08[])(void); - -void func_8016FF30(void *a0) { - D_80186A08[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80186A18[])(void); - -void func_8016FFDC(void *a0) { - D_80186A18[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80186A20[])(void); - -void func_80170150(void *a0) { - D_80186A20[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80186A28[])(void); - -void func_80170240(void *a0) { - D_80186A28[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80186A30[])(void); - -void func_801702FC(void *a0) { - D_80186A30[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80186A38[])(void); - -void func_801703E0(void *a0) { - D_80186A38[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80186A40[])(void); - -void func_801704B0(void *a0) { - D_80186A40[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80186A48[])(void); - -void func_80170548(void *a0) { - D_80186A48[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80186A50[])(void); - -void func_801705F8(void *a0) { - D_80186A50[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80186A58[])(void); - -void func_801706AC(void *a0) { - D_80186A58[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80186A60[])(void); - -void func_80170748(void *a0) { - D_80186A60[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80186A68[])(void); - -void func_80170810(void *a0) { - D_80186A68[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80186A70[])(void); - -void func_80170AD8(void *a0) { - D_80186A70[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80186A78[])(void); - -void func_80170BD8(void *a0) { - D_80186A78[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80186A80[])(void); - -void func_80170C74(void *a0) { - D_80186A80[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80186A88[])(void); - -void func_80170D68(void *a0) { - D_80186A88[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80186A90[])(void); - -void func_80170E34(void *a0) { - D_80186A90[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80186A98[])(void); - -void func_80170EFC(void *a0) { - D_80186A98[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80186AA0[])(void); - -void func_80170FB0(void *a0) { - D_80186AA0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80186AA8[])(void); - -void func_80171064(void *a0) { - D_80186AA8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80186AB0[])(void); - -void func_80171120(void *a0) { - D_80186AB0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80186AB8[])(void); - -void func_801711C0(void *a0) { - D_80186AB8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80186AC0[])(void); - -void func_80171260(void *a0) { - D_80186AC0[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80186AC8[])(void); - -void func_801714E4(void *a0) { - D_80186AC8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8015AE2C", func_80172C50); - - -extern void (*D_80186B0C[])(void); - -void func_80172CA0(void *a0) { - D_80186B0C[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80186AD0; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80186AD0); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC01_080/ov_SC01_080_jr_8016AB6C.c b/src/ov_SC01_080/ov_SC01_080_jr_8016AB6C.c new file mode 100644 index 000000000..1bc3afcce --- /dev/null +++ b/src/ov_SC01_080/ov_SC01_080_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80185A90; +extern u8 D_80185A00; +extern u8 D_801859DC; +extern u8 D_801859B8; +extern u8 D_80185A6C; +extern u8 D_80185A48; +extern u8 D_80185A24; +extern u8 D_80185994; +extern void func_80145934(void); +extern u8 D_80185B20; +extern u8 D_80185AFC; +extern u8 D_80185AD8; +extern u8 D_80185AB4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80184F18[]; +extern unsigned char D_80184F48[]; +extern unsigned char D_80184F98[]; +extern unsigned char D_80184FC8[]; +extern unsigned char D_80184FF8[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80185048[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80185110[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80185198[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801851A0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801C4888; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801C488C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801851D0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80185278[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018529C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018528C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801852B0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801852BC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801852CC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801852E4[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801852D4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801852F8[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80185314[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80185304; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80185328[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018533C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80185350; +extern void (*D_80185378[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80185358; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801853C4[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801853C8[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018582C[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018583C[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801C48C0; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80185864[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80185844; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80185854; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801858A4[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801858AC[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80185878; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801858B8[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80185888; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801C48C8; +extern s32 D_801C48D4; +extern s32 D_801C48D8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801858F4[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801858C8[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801C48D0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80185B44[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80185964[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80185BE8[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80185D3C[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80185B58; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80185D44[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80185B68; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80185B88; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80185D4C[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80185D74[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80185D80[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80185BF4[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80185E24; +extern void func_8015D380(s32 a0); +extern unsigned char D_80184F08[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80185E38[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80185E74[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80185EBC; +extern u16 D_80185EBE; +extern u16 D_80185EC0; +extern s32 D_80185EC4; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80185ECC; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80185BD8; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80185F50[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80186000[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80186030[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80186094; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801C48E0[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_801860B8[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801C4938[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80186100[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_801860F0; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801C4190[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80186108[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_8018615C[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80186124; +extern s16 D_80186158; +extern s16 D_80186156; +extern s16 D_80186154; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80186168[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801C4998; +extern u8 D_801C4999; +extern u8 D_801C499A; +extern u8 D_801C499B; +extern u8 D_801C499C; +extern u8 D_801C499D; +extern u8 D_801C499E; +extern u8 D_801C499F; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80186178[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801C49D8; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_801861BC[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80186238[]; +extern s32 D_80186258[]; +extern u8 D_801862D4[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_801862F4[]; +extern u8 D_80186314[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_801863B0[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_8018642C[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801C41A0; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80186438[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80186440[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80186508[])(void); +extern void func_80166618(void *a0); +extern void (*D_80186518[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80186528[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80186534[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80186494[]; +extern u8 D_801864A8[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_8018654C[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80186554[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_8018655C[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80186564[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_8018656C[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80186574[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_8018657C[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80186630[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80186638[])(void); +extern void func_80169F00(void *a0); +extern char D_801865E8[]; +extern char D_801865A8[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80186670[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_8018667C[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_801866C4[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80186684[]; + extern u8 D_80186694[]; + extern u8 D_801C4CA8[]; + extern u8 D_801C4CD0[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80186684, D_801C4CA8) + 3; + func_8001CE28(obj, D_801C4CA8); + } else { + var_s3 = func_80024054(D_80186694, D_801C4CD0) + 9; + func_8001CE28(obj, D_801C4CD0); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80186740[])(void); + +void func_8016B4BC(void *a0) { + D_80186740[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801C4CF8; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801C4CF8); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80186734[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80186734; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80186778[]; +extern unsigned short D_80186780[]; +extern unsigned short D_80186788[]; +extern unsigned char D_801C4D00[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801C4D00 + param_2 * 0x40); + puVar3 = D_80186778[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80186780[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80186788[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801C4CF8; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801C4CF8, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80186790[])(void); + +void func_8016BBA4(void *a0) { + D_80186790[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801C4E34; + extern u8 D_801C4E35; + extern u8 D_801C4E36; + extern M2C_UNK D_801C4E38; + extern u8 D_801C4E39; + extern u8 D_801C4E3A; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801C4E34) = 0x20; + D_801C4E35 = 0x20; + D_801C4E36 = 0; + (*(u8 *)&D_801C4E38) = 0xc0; + D_801C4E39 = 0xc0; + D_801C4E3A = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801C4E34; +extern M2C_UNK D_801C4E38; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801C4E34, &D_801C4E38, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801C4E35; + extern u8 D_801C4E36; + extern u8 D_801C4E39; + extern u8 D_801C4E3A; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801C4E34); + if (*p1 != 0) *p1 -= 4; + if (D_801C4E35 != 0) D_801C4E35 -= 4; + if (D_801C4E36 != 0) D_801C4E36 -= 4; + p2 = &(*(u8 *)&D_801C4E38); + if (*p2 != 0) *p2 -= 4; + if (D_801C4E39 != 0) D_801C4E39 -= 4; + if (D_801C4E3A != 0) D_801C4E3A -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801C4E34), &(*(int *)&D_801C4E38), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801C4DC0; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801C4DC0); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_801867A0; + extern s32 D_801867A8; + extern s32 D_801867B0; + extern s32 D_801867B8; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_801867A0, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_801867A8, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_801867B0, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_801867B8, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_801867C0[])(void); + +void func_8016C14C(void *a0) { + D_801867C0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801C4E3C[]; +extern u8 D_801C4E44[]; +extern u8 D_801C4DF4[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801C4E3C, D_801C4E44, D_801C4DF4); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801C4E50[]; + extern u8 D_801C4F10; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801C4E50[1] = 0xff; + D_801C4E50[2] = 0x10; + D_801C4E50[0] = 0x10; + D_801C4E50[6] = 0; + D_801C4E50[5] = 0; + D_801C4E50[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801C4E50, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801C4F10, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801C4E50); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8016AB6C", func_8016C998); + + +extern void (*D_801867C8[])(void); + +void func_8016CB84(void *a0) { + D_801867C8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801C4F10[]; + + + Blk_8016CF04_8016CF04 *p = &D_801C4F10[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_801867E4[])(void); + +void func_8016D19C(void *a0) { + D_801867E4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_801867EC[])(void); + +void func_8016D428(void *a0) { + D_801867EC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80186854[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80186854[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_801867F8; +extern u8 D_80186804; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801867F8, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80186804); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80186888[])(void); + +void func_8016DEA4(void *a0) { + D_80186888[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80186890[])(void); + +void func_8016DF20(void *a0) { + D_80186890[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_801868E4[])(void); + +void func_8016E5B8(void *a0) { + D_801868E4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_801868A4[4]; + extern s32 D_801868C4; + extern s32 D_801868CC; + extern s32 D_801868D4; + extern s32 D_801868DC; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_801868A4[0], pp, &tmp); + RotTransSV(&D_801868A4[1], &prim.v[1], &tmp); + RotTransSV(&D_801868A4[2], &prim.v[2], &tmp); + RotTransSV(&D_801868A4[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_801868C4; + prim.f1 = D_801868CC; + prim.f2 = D_801868D4; + prim.f3 = D_801868DC; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80186924[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80186924[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80186918[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80186918[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80186908[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80186908[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80186918[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80186918[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80186918[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80186934; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80186934; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_801869AC[])(void); + +void func_8016F6E0(void *a0) { + D_801869AC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_801869B4[])(void); + +void func_8016F798(void *a0) { + D_801869B4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_801869BC[])(void); + +void func_8016F834(void *a0) { + D_801869BC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_801869C4[])(void); + +void func_8016F8E4(void *a0) { + D_801869C4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_801869CC[])(void); + +void func_8016F9C4(void *a0) { + D_801869CC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_801869D4[])(void); + +void func_8016FA84(void *a0) { + D_801869D4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_801869E0[])(void); + +void func_8016FB7C(void *a0) { + D_801869E0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_801869EC[])(void); + +void func_8016FC90(void *a0) { + D_801869EC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_801869F8[])(void); + +void func_8016FDB4(void *a0) { + D_801869F8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80186A08[])(void); + +void func_8016FF30(void *a0) { + D_80186A08[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80186A18[])(void); + +void func_8016FFDC(void *a0) { + D_80186A18[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80186A20[])(void); + +void func_80170150(void *a0) { + D_80186A20[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80186A28[])(void); + +void func_80170240(void *a0) { + D_80186A28[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80186A30[])(void); + +void func_801702FC(void *a0) { + D_80186A30[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80186A38[])(void); + +void func_801703E0(void *a0) { + D_80186A38[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80186A40[])(void); + +void func_801704B0(void *a0) { + D_80186A40[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80186A48[])(void); + +void func_80170548(void *a0) { + D_80186A48[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80186A50[])(void); + +void func_801705F8(void *a0) { + D_80186A50[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80186A58[])(void); + +void func_801706AC(void *a0) { + D_80186A58[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80186A60[])(void); + +void func_80170748(void *a0) { + D_80186A60[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80186A68[])(void); + +void func_80170810(void *a0) { + D_80186A68[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80186A70[])(void); + +void func_80170AD8(void *a0) { + D_80186A70[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80186A78[])(void); + +void func_80170BD8(void *a0) { + D_80186A78[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80186A80[])(void); + +void func_80170C74(void *a0) { + D_80186A80[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80186A88[])(void); + +void func_80170D68(void *a0) { + D_80186A88[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80186A90[])(void); + +void func_80170E34(void *a0) { + D_80186A90[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80186A98[])(void); + +void func_80170EFC(void *a0) { + D_80186A98[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80186AA0[])(void); + +void func_80170FB0(void *a0) { + D_80186AA0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80186AA8[])(void); + +void func_80171064(void *a0) { + D_80186AA8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80186AB0[])(void); + +void func_80171120(void *a0) { + D_80186AB0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80186AB8[])(void); + +void func_801711C0(void *a0) { + D_80186AB8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80186AC0[])(void); + +void func_80171260(void *a0) { + D_80186AC0[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80186AC8[])(void); + +void func_801714E4(void *a0) { + D_80186AC8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8016AB6C", func_80172C50); + + +extern void (*D_80186B0C[])(void); + +void func_80172CA0(void *a0) { + D_80186B0C[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80186AD0; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80186AD0); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC01_084/ov_SC01_084_jr_8015AE2C.c b/src/ov_SC01_084/ov_SC01_084_jr_8015AE2C.c index c7665f0c3..2c91a0409 100644 --- a/src/ov_SC01_084/ov_SC01_084_jr_8015AE2C.c +++ b/src/ov_SC01_084/ov_SC01_084_jr_8015AE2C.c @@ -5196,1784 +5196,3 @@ extern void (*D_801899B8[])(void); void func_8016AB30(void *a0) { D_801899B8[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80189A34[])(void); - -void func_8016B4BC(void *a0) { - D_80189A34[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801C67A0; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801C67A0); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80189A28[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80189A28; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80189A6C[]; -extern unsigned short D_80189A74[]; -extern unsigned short D_80189A7C[]; -extern unsigned char D_801C67A8[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801C67A8 + param_2 * 0x40); - puVar3 = D_80189A6C[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80189A74[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80189A7C[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801C67A0; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801C67A0, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80189A84[])(void); - -void func_8016BBA4(void *a0) { - D_80189A84[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801C68DC; - extern u8 D_801C68DD; - extern u8 D_801C68DE; - extern M2C_UNK D_801C68E0; - extern u8 D_801C68E1; - extern u8 D_801C68E2; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801C68DC) = 0x20; - D_801C68DD = 0x20; - D_801C68DE = 0; - (*(u8 *)&D_801C68E0) = 0xc0; - D_801C68E1 = 0xc0; - D_801C68E2 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801C68DC; -extern M2C_UNK D_801C68E0; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801C68DC, &D_801C68E0, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801C68DD; - extern u8 D_801C68DE; - extern u8 D_801C68E1; - extern u8 D_801C68E2; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801C68DC); - if (*p1 != 0) *p1 -= 4; - if (D_801C68DD != 0) D_801C68DD -= 4; - if (D_801C68DE != 0) D_801C68DE -= 4; - p2 = &(*(u8 *)&D_801C68E0); - if (*p2 != 0) *p2 -= 4; - if (D_801C68E1 != 0) D_801C68E1 -= 4; - if (D_801C68E2 != 0) D_801C68E2 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801C68DC), &(*(int *)&D_801C68E0), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801C6868; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801C6868); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80189A94; - extern s32 D_80189A9C; - extern s32 D_80189AA4; - extern s32 D_80189AAC; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80189A94, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80189A9C, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80189AA4, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80189AAC, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80189AB4[])(void); - -void func_8016C14C(void *a0) { - D_80189AB4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801C68E4[]; -extern u8 D_801C68EC[]; -extern u8 D_801C689C[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801C68E4, D_801C68EC, D_801C689C); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801C68F8[]; - extern u8 D_801C69B8; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801C68F8[1] = 0xff; - D_801C68F8[2] = 0x10; - D_801C68F8[0] = 0x10; - D_801C68F8[6] = 0; - D_801C68F8[5] = 0; - D_801C68F8[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801C68F8, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801C69B8, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801C68F8); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8015AE2C", func_8016C998); - - -extern void (*D_80189ABC[])(void); - -void func_8016CB84(void *a0) { - D_80189ABC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801C69B8[]; - - - Blk_8016CF04_8016CF04 *p = &D_801C69B8[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80189AD8[])(void); - -void func_8016D19C(void *a0) { - D_80189AD8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80189AE0[])(void); - -void func_8016D428(void *a0) { - D_80189AE0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80189B48[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80189B48[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80189AEC; -extern u8 D_80189AF8; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80189AEC, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80189AF8); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80189B7C[])(void); - -void func_8016DEA4(void *a0) { - D_80189B7C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80189B84[])(void); - -void func_8016DF20(void *a0) { - D_80189B84[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80189BD8[])(void); - -void func_8016E5B8(void *a0) { - D_80189BD8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80189B98[4]; - extern s32 D_80189BB8; - extern s32 D_80189BC0; - extern s32 D_80189BC8; - extern s32 D_80189BD0; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80189B98[0], pp, &tmp); - RotTransSV(&D_80189B98[1], &prim.v[1], &tmp); - RotTransSV(&D_80189B98[2], &prim.v[2], &tmp); - RotTransSV(&D_80189B98[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80189BB8; - prim.f1 = D_80189BC0; - prim.f2 = D_80189BC8; - prim.f3 = D_80189BD0; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80189C18[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80189C18[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80189C0C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80189C0C[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80189BFC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80189BFC[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80189C0C[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80189C0C[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80189C0C[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80189C28; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80189C28; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80189CA0[])(void); - -void func_8016F6E0(void *a0) { - D_80189CA0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80189CA8[])(void); - -void func_8016F798(void *a0) { - D_80189CA8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80189CB0[])(void); - -void func_8016F834(void *a0) { - D_80189CB0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80189CB8[])(void); - -void func_8016F8E4(void *a0) { - D_80189CB8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80189CC0[])(void); - -void func_8016F9C4(void *a0) { - D_80189CC0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80189CC8[])(void); - -void func_8016FA84(void *a0) { - D_80189CC8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80189CD4[])(void); - -void func_8016FB7C(void *a0) { - D_80189CD4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80189CE0[])(void); - -void func_8016FC90(void *a0) { - D_80189CE0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80189CEC[])(void); - -void func_8016FDB4(void *a0) { - D_80189CEC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80189CFC[])(void); - -void func_8016FF30(void *a0) { - D_80189CFC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80189D0C[])(void); - -void func_8016FFDC(void *a0) { - D_80189D0C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80189D14[])(void); - -void func_80170150(void *a0) { - D_80189D14[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80189D1C[])(void); - -void func_80170240(void *a0) { - D_80189D1C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80189D24[])(void); - -void func_801702FC(void *a0) { - D_80189D24[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80189D2C[])(void); - -void func_801703E0(void *a0) { - D_80189D2C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80189D34[])(void); - -void func_801704B0(void *a0) { - D_80189D34[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80189D3C[])(void); - -void func_80170548(void *a0) { - D_80189D3C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80189D44[])(void); - -void func_801705F8(void *a0) { - D_80189D44[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80189D4C[])(void); - -void func_801706AC(void *a0) { - D_80189D4C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80189D54[])(void); - -void func_80170748(void *a0) { - D_80189D54[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80189D5C[])(void); - -void func_80170810(void *a0) { - D_80189D5C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80189D64[])(void); - -void func_80170AD8(void *a0) { - D_80189D64[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80189D6C[])(void); - -void func_80170BD8(void *a0) { - D_80189D6C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80189D74[])(void); - -void func_80170C74(void *a0) { - D_80189D74[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80189D7C[])(void); - -void func_80170D68(void *a0) { - D_80189D7C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80189D84[])(void); - -void func_80170E34(void *a0) { - D_80189D84[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80189D8C[])(void); - -void func_80170EFC(void *a0) { - D_80189D8C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80189D94[])(void); - -void func_80170FB0(void *a0) { - D_80189D94[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80189D9C[])(void); - -void func_80171064(void *a0) { - D_80189D9C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80189DA4[])(void); - -void func_80171120(void *a0) { - D_80189DA4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80189DAC[])(void); - -void func_801711C0(void *a0) { - D_80189DAC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80189DB4[])(void); - -void func_80171260(void *a0) { - D_80189DB4[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80189DBC[])(void); - -void func_801714E4(void *a0) { - D_80189DBC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8015AE2C", func_80172C50); - - -extern void (*D_80189E00[])(void); - -void func_80172CA0(void *a0) { - D_80189E00[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80189DC4; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80189DC4); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC01_084/ov_SC01_084_jr_8016AB6C.c b/src/ov_SC01_084/ov_SC01_084_jr_8016AB6C.c new file mode 100644 index 000000000..558fefd4d --- /dev/null +++ b/src/ov_SC01_084/ov_SC01_084_jr_8016AB6C.c @@ -0,0 +1,3949 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80188D84; +extern u8 D_80188CF4; +extern u8 D_80188CD0; +extern u8 D_80188CAC; +extern u8 D_80188D60; +extern u8 D_80188D3C; +extern u8 D_80188D18; +extern u8 D_80188C88; +extern void func_80145934(void); +extern u8 D_80188E14; +extern u8 D_80188DF0; +extern u8 D_80188DCC; +extern u8 D_80188DA8; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018820C[]; +extern unsigned char D_8018823C[]; +extern unsigned char D_8018828C[]; +extern unsigned char D_801882BC[]; +extern unsigned char D_801882EC[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018833C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80188404[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018848C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80188494; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801C6330; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801C6334; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801884C4; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018856C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80188590[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80188580; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801885A4[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801885B0[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801885C0[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801885D8[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801885C8; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801885EC[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80188608[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801885F8; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018861C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80188630[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80188644; +extern void (*D_8018866C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018864C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801886B8[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801886BC[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80188B20[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80188B30[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801C6368; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80188B58[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80188B38; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80188B48; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80188B98[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80188BA0[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80188B6C; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80188BAC[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80188B7C; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801C6370; +extern s32 D_801C637C; +extern s32 D_801C6380; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80188BE8[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80188BBC[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801C6378; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80188E38[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80188C58[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80188EDC[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80189030[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80188E4C; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80189038[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80188E5C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80188E7C; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80189040[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80189068[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80189074[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80188EE8[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80189118; +extern void func_8015D380(s32 a0); +extern unsigned char D_801881FC[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_8018912C[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80189168[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void (*D_801891A0[])(void); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_801891B0; +extern u16 D_801891B2; +extern u16 D_801891B4; +extern s32 D_801891B8; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_801891C0; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80188ECC; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80189244[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_801892F4[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80189324[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80189388; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801C6388[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_801893AC[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801C63E0[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_801893F4[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_801893E4; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801C5B60[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_801893FC[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80189450[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80189418; +extern s16 D_8018944C; +extern s16 D_8018944A; +extern s16 D_80189448; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_8018945C[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801C6440; +extern u8 D_801C6441; +extern u8 D_801C6442; +extern u8 D_801C6443; +extern u8 D_801C6444; +extern u8 D_801C6445; +extern u8 D_801C6446; +extern u8 D_801C6447; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_8018946C[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801C6480; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_801894B0[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_8018952C[]; +extern s32 D_8018954C[]; +extern u8 D_801895C8[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_801895E8[]; +extern u8 D_80189608[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_801896A4[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80189720[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801C5B70; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_8018972C[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80189734[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_801897FC[])(void); +extern void func_80166618(void *a0); +extern void (*D_8018980C[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_8018981C[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80189828[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80189788[]; +extern u8 D_8018979C[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80189840[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80189848[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80189850[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80189858[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80189860[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80189868[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80189870[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80189924[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_8018992C[])(void); +extern void func_80169F00(void *a0); +extern char D_801898DC[]; +extern char D_8018989C[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80189964[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80189970[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_801899B8[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80189978[]; + extern u8 D_80189988[]; + extern u8 D_801C6750[]; + extern u8 D_801C6778[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80189978, D_801C6750) + 3; + func_8001CE28(obj, D_801C6750); + } else { + var_s3 = func_80024054(D_80189988, D_801C6778) + 9; + func_8001CE28(obj, D_801C6778); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80189A34[])(void); + +void func_8016B4BC(void *a0) { + D_80189A34[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801C67A0; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801C67A0); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80189A28[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80189A28; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80189A6C[]; +extern unsigned short D_80189A74[]; +extern unsigned short D_80189A7C[]; +extern unsigned char D_801C67A8[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801C67A8 + param_2 * 0x40); + puVar3 = D_80189A6C[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80189A74[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80189A7C[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801C67A0; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801C67A0, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80189A84[])(void); + +void func_8016BBA4(void *a0) { + D_80189A84[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801C68DC; + extern u8 D_801C68DD; + extern u8 D_801C68DE; + extern M2C_UNK D_801C68E0; + extern u8 D_801C68E1; + extern u8 D_801C68E2; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801C68DC) = 0x20; + D_801C68DD = 0x20; + D_801C68DE = 0; + (*(u8 *)&D_801C68E0) = 0xc0; + D_801C68E1 = 0xc0; + D_801C68E2 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801C68DC; +extern M2C_UNK D_801C68E0; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801C68DC, &D_801C68E0, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801C68DD; + extern u8 D_801C68DE; + extern u8 D_801C68E1; + extern u8 D_801C68E2; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801C68DC); + if (*p1 != 0) *p1 -= 4; + if (D_801C68DD != 0) D_801C68DD -= 4; + if (D_801C68DE != 0) D_801C68DE -= 4; + p2 = &(*(u8 *)&D_801C68E0); + if (*p2 != 0) *p2 -= 4; + if (D_801C68E1 != 0) D_801C68E1 -= 4; + if (D_801C68E2 != 0) D_801C68E2 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801C68DC), &(*(int *)&D_801C68E0), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801C6868; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801C6868); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80189A94; + extern s32 D_80189A9C; + extern s32 D_80189AA4; + extern s32 D_80189AAC; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80189A94, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80189A9C, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80189AA4, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80189AAC, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80189AB4[])(void); + +void func_8016C14C(void *a0) { + D_80189AB4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801C68E4[]; +extern u8 D_801C68EC[]; +extern u8 D_801C689C[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801C68E4, D_801C68EC, D_801C689C); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801C68F8[]; + extern u8 D_801C69B8; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801C68F8[1] = 0xff; + D_801C68F8[2] = 0x10; + D_801C68F8[0] = 0x10; + D_801C68F8[6] = 0; + D_801C68F8[5] = 0; + D_801C68F8[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801C68F8, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801C69B8, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801C68F8); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8016AB6C", func_8016C998); + + +extern void (*D_80189ABC[])(void); + +void func_8016CB84(void *a0) { + D_80189ABC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801C69B8[]; + + + Blk_8016CF04_8016CF04 *p = &D_801C69B8[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80189AD8[])(void); + +void func_8016D19C(void *a0) { + D_80189AD8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80189AE0[])(void); + +void func_8016D428(void *a0) { + D_80189AE0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80189B48[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80189B48[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80189AEC; +extern u8 D_80189AF8; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80189AEC, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80189AF8); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80189B7C[])(void); + +void func_8016DEA4(void *a0) { + D_80189B7C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80189B84[])(void); + +void func_8016DF20(void *a0) { + D_80189B84[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80189BD8[])(void); + +void func_8016E5B8(void *a0) { + D_80189BD8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80189B98[4]; + extern s32 D_80189BB8; + extern s32 D_80189BC0; + extern s32 D_80189BC8; + extern s32 D_80189BD0; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80189B98[0], pp, &tmp); + RotTransSV(&D_80189B98[1], &prim.v[1], &tmp); + RotTransSV(&D_80189B98[2], &prim.v[2], &tmp); + RotTransSV(&D_80189B98[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80189BB8; + prim.f1 = D_80189BC0; + prim.f2 = D_80189BC8; + prim.f3 = D_80189BD0; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80189C18[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80189C18[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80189C0C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80189C0C[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80189BFC[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80189BFC[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80189C0C[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80189C0C[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80189C0C[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80189C28; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80189C28; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80189CA0[])(void); + +void func_8016F6E0(void *a0) { + D_80189CA0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80189CA8[])(void); + +void func_8016F798(void *a0) { + D_80189CA8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80189CB0[])(void); + +void func_8016F834(void *a0) { + D_80189CB0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80189CB8[])(void); + +void func_8016F8E4(void *a0) { + D_80189CB8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80189CC0[])(void); + +void func_8016F9C4(void *a0) { + D_80189CC0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80189CC8[])(void); + +void func_8016FA84(void *a0) { + D_80189CC8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80189CD4[])(void); + +void func_8016FB7C(void *a0) { + D_80189CD4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80189CE0[])(void); + +void func_8016FC90(void *a0) { + D_80189CE0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80189CEC[])(void); + +void func_8016FDB4(void *a0) { + D_80189CEC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80189CFC[])(void); + +void func_8016FF30(void *a0) { + D_80189CFC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80189D0C[])(void); + +void func_8016FFDC(void *a0) { + D_80189D0C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80189D14[])(void); + +void func_80170150(void *a0) { + D_80189D14[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80189D1C[])(void); + +void func_80170240(void *a0) { + D_80189D1C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80189D24[])(void); + +void func_801702FC(void *a0) { + D_80189D24[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80189D2C[])(void); + +void func_801703E0(void *a0) { + D_80189D2C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80189D34[])(void); + +void func_801704B0(void *a0) { + D_80189D34[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80189D3C[])(void); + +void func_80170548(void *a0) { + D_80189D3C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80189D44[])(void); + +void func_801705F8(void *a0) { + D_80189D44[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80189D4C[])(void); + +void func_801706AC(void *a0) { + D_80189D4C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80189D54[])(void); + +void func_80170748(void *a0) { + D_80189D54[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80189D5C[])(void); + +void func_80170810(void *a0) { + D_80189D5C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80189D64[])(void); + +void func_80170AD8(void *a0) { + D_80189D64[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80189D6C[])(void); + +void func_80170BD8(void *a0) { + D_80189D6C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80189D74[])(void); + +void func_80170C74(void *a0) { + D_80189D74[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80189D7C[])(void); + +void func_80170D68(void *a0) { + D_80189D7C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80189D84[])(void); + +void func_80170E34(void *a0) { + D_80189D84[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80189D8C[])(void); + +void func_80170EFC(void *a0) { + D_80189D8C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80189D94[])(void); + +void func_80170FB0(void *a0) { + D_80189D94[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80189D9C[])(void); + +void func_80171064(void *a0) { + D_80189D9C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80189DA4[])(void); + +void func_80171120(void *a0) { + D_80189DA4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80189DAC[])(void); + +void func_801711C0(void *a0) { + D_80189DAC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80189DB4[])(void); + +void func_80171260(void *a0) { + D_80189DB4[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80189DBC[])(void); + +void func_801714E4(void *a0) { + D_80189DBC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8016AB6C", func_80172C50); + + +extern void (*D_80189E00[])(void); + +void func_80172CA0(void *a0) { + D_80189E00[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80189DC4; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80189DC4); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC02_000/ov_SC02_000_jr_8015AE2C.c b/src/ov_SC02_000/ov_SC02_000_jr_8015AE2C.c index 8ce0b7a9b..1550727a9 100644 --- a/src/ov_SC02_000/ov_SC02_000_jr_8015AE2C.c +++ b/src/ov_SC02_000/ov_SC02_000_jr_8015AE2C.c @@ -5182,1784 +5182,3 @@ extern void (*D_8018DD68[])(void); void func_8016AB30(void *a0) { D_8018DD68[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_8018DDE4[])(void); - -void func_8016B4BC(void *a0) { - D_8018DDE4[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801E72D0; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801E72D0); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_8018DDD8[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_8018DDD8; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_8018DE1C[]; -extern unsigned short D_8018DE24[]; -extern unsigned short D_8018DE2C[]; -extern unsigned char D_801E72D8[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801E72D8 + param_2 * 0x40); - puVar3 = D_8018DE1C[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_8018DE24[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_8018DE2C[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801E72D0; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801E72D0, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_8018DE34[])(void); - -void func_8016BBA4(void *a0) { - D_8018DE34[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801E740C; - extern u8 D_801E740D; - extern u8 D_801E740E; - extern M2C_UNK D_801E7410; - extern u8 D_801E7411; - extern u8 D_801E7412; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801E740C) = 0x20; - D_801E740D = 0x20; - D_801E740E = 0; - (*(u8 *)&D_801E7410) = 0xc0; - D_801E7411 = 0xc0; - D_801E7412 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801E740C; -extern M2C_UNK D_801E7410; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801E740C, &D_801E7410, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801E740D; - extern u8 D_801E740E; - extern u8 D_801E7411; - extern u8 D_801E7412; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801E740C); - if (*p1 != 0) *p1 -= 4; - if (D_801E740D != 0) D_801E740D -= 4; - if (D_801E740E != 0) D_801E740E -= 4; - p2 = &(*(u8 *)&D_801E7410); - if (*p2 != 0) *p2 -= 4; - if (D_801E7411 != 0) D_801E7411 -= 4; - if (D_801E7412 != 0) D_801E7412 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801E740C), &(*(int *)&D_801E7410), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801E7398; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801E7398); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_8018DE44; - extern s32 D_8018DE4C; - extern s32 D_8018DE54; - extern s32 D_8018DE5C; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_8018DE44, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_8018DE4C, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_8018DE54, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_8018DE5C, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_8018DE64[])(void); - -void func_8016C14C(void *a0) { - D_8018DE64[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801E7414[]; -extern u8 D_801E741C[]; -extern u8 D_801E73CC[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801E7414, D_801E741C, D_801E73CC); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801E7428[]; - extern u8 D_801E74E8; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801E7428[1] = 0xff; - D_801E7428[2] = 0x10; - D_801E7428[0] = 0x10; - D_801E7428[6] = 0; - D_801E7428[5] = 0; - D_801E7428[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801E7428, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801E74E8, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801E7428); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8015AE2C", func_8016C998); - - -extern void (*D_8018DE6C[])(void); - -void func_8016CB84(void *a0) { - D_8018DE6C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801E74E8[]; - - - Blk_8016CF04_8016CF04 *p = &D_801E74E8[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_8018DE88[])(void); - -void func_8016D19C(void *a0) { - D_8018DE88[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_8018DE90[])(void); - -void func_8016D428(void *a0) { - D_8018DE90[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_8018DEF8[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_8018DEF8[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_8018DE9C; -extern u8 D_8018DEA8; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018DE9C, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018DEA8); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8015AE2C", func_8016DC20); - - -extern void (*D_8018DF2C[])(void); - -void func_8016DEA4(void *a0) { - D_8018DF2C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_8018DF34[])(void); - -void func_8016DF20(void *a0) { - D_8018DF34[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_8018DF88[])(void); - -void func_8016E5B8(void *a0) { - D_8018DF88[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_8018DF48[4]; - extern s32 D_8018DF68; - extern s32 D_8018DF70; - extern s32 D_8018DF78; - extern s32 D_8018DF80; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_8018DF48[0], pp, &tmp); - RotTransSV(&D_8018DF48[1], &prim.v[1], &tmp); - RotTransSV(&D_8018DF48[2], &prim.v[2], &tmp); - RotTransSV(&D_8018DF48[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_8018DF68; - prim.f1 = D_8018DF70; - prim.f2 = D_8018DF78; - prim.f3 = D_8018DF80; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_8018DFC8[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_8018DFC8[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_8018DFBC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_8018DFBC[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_8018DFAC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_8018DFAC[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018DFBC[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_8018DFBC[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_8018DFBC[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_8018DFD8; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_8018DFD8; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_8018E050[])(void); - -void func_8016F6E0(void *a0) { - D_8018E050[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_8018E058[])(void); - -void func_8016F798(void *a0) { - D_8018E058[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_8018E060[])(void); - -void func_8016F834(void *a0) { - D_8018E060[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_8018E068[])(void); - -void func_8016F8E4(void *a0) { - D_8018E068[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_8018E070[])(void); - -void func_8016F9C4(void *a0) { - D_8018E070[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_8018E078[])(void); - -void func_8016FA84(void *a0) { - D_8018E078[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_8018E084[])(void); - -void func_8016FB7C(void *a0) { - D_8018E084[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_8018E090[])(void); - -void func_8016FC90(void *a0) { - D_8018E090[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_8018E09C[])(void); - -void func_8016FDB4(void *a0) { - D_8018E09C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_8018E0AC[])(void); - -void func_8016FF30(void *a0) { - D_8018E0AC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_8018E0BC[])(void); - -void func_8016FFDC(void *a0) { - D_8018E0BC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_8018E0C4[])(void); - -void func_80170150(void *a0) { - D_8018E0C4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_8018E0CC[])(void); - -void func_80170240(void *a0) { - D_8018E0CC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_8018E0D4[])(void); - -void func_801702FC(void *a0) { - D_8018E0D4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_8018E0DC[])(void); - -void func_801703E0(void *a0) { - D_8018E0DC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_8018E0E4[])(void); - -void func_801704B0(void *a0) { - D_8018E0E4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_8018E0EC[])(void); - -void func_80170548(void *a0) { - D_8018E0EC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_8018E0F4[])(void); - -void func_801705F8(void *a0) { - D_8018E0F4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_8018E0FC[])(void); - -void func_801706AC(void *a0) { - D_8018E0FC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_8018E104[])(void); - -void func_80170748(void *a0) { - D_8018E104[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_8018E10C[])(void); - -void func_80170810(void *a0) { - D_8018E10C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_8018E114[])(void); - -void func_80170AD8(void *a0) { - D_8018E114[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_8018E11C[])(void); - -void func_80170BD8(void *a0) { - D_8018E11C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_8018E124[])(void); - -void func_80170C74(void *a0) { - D_8018E124[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8015AE2C", func_80170CF0); - - -extern void (*D_8018E12C[])(void); - -void func_80170D68(void *a0) { - D_8018E12C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_8018E134[])(void); - -void func_80170E34(void *a0) { - D_8018E134[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_8018E13C[])(void); - -void func_80170EFC(void *a0) { - D_8018E13C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_8018E144[])(void); - -void func_80170FB0(void *a0) { - D_8018E144[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_8018E14C[])(void); - -void func_80171064(void *a0) { - D_8018E14C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_8018E154[])(void); - -void func_80171120(void *a0) { - D_8018E154[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_8018E15C[])(void); - -void func_801711C0(void *a0) { - D_8018E15C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_8018E164[])(void); - -void func_80171260(void *a0) { - D_8018E164[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_8018E16C[])(void); - -void func_801714E4(void *a0) { - D_8018E16C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8015AE2C", func_80172C50); - - -extern void (*D_8018E1B0[])(void); - -void func_80172CA0(void *a0) { - D_8018E1B0[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_8018E174; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_8018E174); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC02_000/ov_SC02_000_jr_8016AB6C.c b/src/ov_SC02_000/ov_SC02_000_jr_8016AB6C.c new file mode 100644 index 000000000..50c10f8f0 --- /dev/null +++ b/src/ov_SC02_000/ov_SC02_000_jr_8016AB6C.c @@ -0,0 +1,3946 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018D134; +extern u8 D_8018D0A4; +extern u8 D_8018D080; +extern u8 D_8018D05C; +extern u8 D_8018D110; +extern u8 D_8018D0EC; +extern u8 D_8018D0C8; +extern u8 D_8018D038; +extern void func_80145934(void); +extern u8 D_8018D1C4; +extern u8 D_8018D1A0; +extern u8 D_8018D17C; +extern u8 D_8018D158; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018C5BC[]; +extern unsigned char D_8018C5EC[]; +extern unsigned char D_8018C63C[]; +extern unsigned char D_8018C66C[]; +extern unsigned char D_8018C69C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018C6EC[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018C7B4[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018C83C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018C844; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801E6E60; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801E6E64; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018C874; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018C91C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018C940[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018C930; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018C954[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018C960[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018C970[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018C988[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018C978; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018C99C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018C9B8[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018C9A8; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018C9CC[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018C9E0[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018C9F4; +extern void (*D_8018CA1C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018C9FC; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018CA68[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018CA6C[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018CED0[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018CEE0[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801E6E98; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018CF08[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018CEE8; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018CEF8; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018CF48[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018CF50[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018CF1C; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018CF5C[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018CF2C; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801E6EA0; +extern s32 D_801E6EAC; +extern s32 D_801E6EB0; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018CF98[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018CF6C[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801E6EA8; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018D1E8[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018D008[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018D28C[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018D3E0[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018D1FC; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018D3E8[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018D20C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018D22C; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_8018D3F0[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_8018D418[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_8018D424[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_8018D298[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_8018D4C8; +extern void func_8015D380(s32 a0); +extern unsigned char D_8018C5AC[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_8018D4DC[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_8018D518[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_8018D560; +extern u16 D_8018D562; +extern u16 D_8018D564; +extern s32 D_8018D568; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_8018D27C; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_8018D5F4[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_8018D6A4[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_8018D6D4[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_8018D738; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801E6EB8[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_8018D75C[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801E6F10[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_8018D7A4[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_8018D794; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801E63B4[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_8018D7AC[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_8018D800[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_8018D7C8; +extern s16 D_8018D7FC; +extern s16 D_8018D7FA; +extern s16 D_8018D7F8; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_8018D80C[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801E6F70; +extern u8 D_801E6F71; +extern u8 D_801E6F72; +extern u8 D_801E6F73; +extern u8 D_801E6F74; +extern u8 D_801E6F75; +extern u8 D_801E6F76; +extern u8 D_801E6F77; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_8018D81C[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801E6FB0; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_8018D860[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_8018D8DC[]; +extern s32 D_8018D8FC[]; +extern u8 D_8018D978[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_8018D998[]; +extern u8 D_8018D9B8[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_8018DA54[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_8018DAD0[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801E63C4; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_8018DADC[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_8018DAE4[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_8018DBAC[])(void); +extern void func_80166618(void *a0); +extern void (*D_8018DBBC[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_8018DBCC[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_8018DBD8[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_8018DB38[]; +extern u8 D_8018DB4C[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_8018DBF0[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_8018DBF8[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_8018DC00[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_8018DC08[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_8018DC10[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_8018DC18[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_8018DC20[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_8018DCD4[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_8018DCDC[])(void); +extern void func_80169F00(void *a0); +extern char D_8018DC8C[]; +extern char D_8018DC4C[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_8018DD14[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_8018DD20[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_8018DD68[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_8018DD28[]; + extern u8 D_8018DD38[]; + extern u8 D_801E7280[]; + extern u8 D_801E72A8[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_8018DD28, D_801E7280) + 3; + func_8001CE28(obj, D_801E7280); + } else { + var_s3 = func_80024054(D_8018DD38, D_801E72A8) + 9; + func_8001CE28(obj, D_801E72A8); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_8018DDE4[])(void); + +void func_8016B4BC(void *a0) { + D_8018DDE4[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801E72D0; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801E72D0); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_8018DDD8[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_8018DDD8; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_8018DE1C[]; +extern unsigned short D_8018DE24[]; +extern unsigned short D_8018DE2C[]; +extern unsigned char D_801E72D8[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801E72D8 + param_2 * 0x40); + puVar3 = D_8018DE1C[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_8018DE24[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_8018DE2C[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801E72D0; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801E72D0, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_8018DE34[])(void); + +void func_8016BBA4(void *a0) { + D_8018DE34[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801E740C; + extern u8 D_801E740D; + extern u8 D_801E740E; + extern M2C_UNK D_801E7410; + extern u8 D_801E7411; + extern u8 D_801E7412; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801E740C) = 0x20; + D_801E740D = 0x20; + D_801E740E = 0; + (*(u8 *)&D_801E7410) = 0xc0; + D_801E7411 = 0xc0; + D_801E7412 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801E740C; +extern M2C_UNK D_801E7410; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801E740C, &D_801E7410, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801E740D; + extern u8 D_801E740E; + extern u8 D_801E7411; + extern u8 D_801E7412; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801E740C); + if (*p1 != 0) *p1 -= 4; + if (D_801E740D != 0) D_801E740D -= 4; + if (D_801E740E != 0) D_801E740E -= 4; + p2 = &(*(u8 *)&D_801E7410); + if (*p2 != 0) *p2 -= 4; + if (D_801E7411 != 0) D_801E7411 -= 4; + if (D_801E7412 != 0) D_801E7412 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801E740C), &(*(int *)&D_801E7410), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801E7398; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801E7398); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_8018DE44; + extern s32 D_8018DE4C; + extern s32 D_8018DE54; + extern s32 D_8018DE5C; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_8018DE44, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_8018DE4C, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_8018DE54, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_8018DE5C, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_8018DE64[])(void); + +void func_8016C14C(void *a0) { + D_8018DE64[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801E7414[]; +extern u8 D_801E741C[]; +extern u8 D_801E73CC[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801E7414, D_801E741C, D_801E73CC); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801E7428[]; + extern u8 D_801E74E8; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801E7428[1] = 0xff; + D_801E7428[2] = 0x10; + D_801E7428[0] = 0x10; + D_801E7428[6] = 0; + D_801E7428[5] = 0; + D_801E7428[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801E7428, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801E74E8, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801E7428); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8016AB6C", func_8016C998); + + +extern void (*D_8018DE6C[])(void); + +void func_8016CB84(void *a0) { + D_8018DE6C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801E74E8[]; + + + Blk_8016CF04_8016CF04 *p = &D_801E74E8[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_8018DE88[])(void); + +void func_8016D19C(void *a0) { + D_8018DE88[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_8018DE90[])(void); + +void func_8016D428(void *a0) { + D_8018DE90[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018DEF8[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_8018DEF8[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_8018DE9C; +extern u8 D_8018DEA8; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018DE9C, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018DEA8); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8016AB6C", func_8016DC20); + + +extern void (*D_8018DF2C[])(void); + +void func_8016DEA4(void *a0) { + D_8018DF2C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_8018DF34[])(void); + +void func_8016DF20(void *a0) { + D_8018DF34[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_8018DF88[])(void); + +void func_8016E5B8(void *a0) { + D_8018DF88[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_8018DF48[4]; + extern s32 D_8018DF68; + extern s32 D_8018DF70; + extern s32 D_8018DF78; + extern s32 D_8018DF80; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_8018DF48[0], pp, &tmp); + RotTransSV(&D_8018DF48[1], &prim.v[1], &tmp); + RotTransSV(&D_8018DF48[2], &prim.v[2], &tmp); + RotTransSV(&D_8018DF48[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_8018DF68; + prim.f1 = D_8018DF70; + prim.f2 = D_8018DF78; + prim.f3 = D_8018DF80; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_8018DFC8[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_8018DFC8[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_8018DFBC[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_8018DFBC[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_8018DFAC[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_8018DFAC[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018DFBC[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_8018DFBC[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_8018DFBC[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_8018DFD8; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_8018DFD8; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_8018E050[])(void); + +void func_8016F6E0(void *a0) { + D_8018E050[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_8018E058[])(void); + +void func_8016F798(void *a0) { + D_8018E058[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_8018E060[])(void); + +void func_8016F834(void *a0) { + D_8018E060[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_8018E068[])(void); + +void func_8016F8E4(void *a0) { + D_8018E068[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_8018E070[])(void); + +void func_8016F9C4(void *a0) { + D_8018E070[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_8018E078[])(void); + +void func_8016FA84(void *a0) { + D_8018E078[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_8018E084[])(void); + +void func_8016FB7C(void *a0) { + D_8018E084[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_8018E090[])(void); + +void func_8016FC90(void *a0) { + D_8018E090[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_8018E09C[])(void); + +void func_8016FDB4(void *a0) { + D_8018E09C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_8018E0AC[])(void); + +void func_8016FF30(void *a0) { + D_8018E0AC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_8018E0BC[])(void); + +void func_8016FFDC(void *a0) { + D_8018E0BC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_8018E0C4[])(void); + +void func_80170150(void *a0) { + D_8018E0C4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_8018E0CC[])(void); + +void func_80170240(void *a0) { + D_8018E0CC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_8018E0D4[])(void); + +void func_801702FC(void *a0) { + D_8018E0D4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_8018E0DC[])(void); + +void func_801703E0(void *a0) { + D_8018E0DC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_8018E0E4[])(void); + +void func_801704B0(void *a0) { + D_8018E0E4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_8018E0EC[])(void); + +void func_80170548(void *a0) { + D_8018E0EC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_8018E0F4[])(void); + +void func_801705F8(void *a0) { + D_8018E0F4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_8018E0FC[])(void); + +void func_801706AC(void *a0) { + D_8018E0FC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_8018E104[])(void); + +void func_80170748(void *a0) { + D_8018E104[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_8018E10C[])(void); + +void func_80170810(void *a0) { + D_8018E10C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_8018E114[])(void); + +void func_80170AD8(void *a0) { + D_8018E114[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_8018E11C[])(void); + +void func_80170BD8(void *a0) { + D_8018E11C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_8018E124[])(void); + +void func_80170C74(void *a0) { + D_8018E124[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8016AB6C", func_80170CF0); + + +extern void (*D_8018E12C[])(void); + +void func_80170D68(void *a0) { + D_8018E12C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_8018E134[])(void); + +void func_80170E34(void *a0) { + D_8018E134[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_8018E13C[])(void); + +void func_80170EFC(void *a0) { + D_8018E13C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_8018E144[])(void); + +void func_80170FB0(void *a0) { + D_8018E144[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_8018E14C[])(void); + +void func_80171064(void *a0) { + D_8018E14C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_8018E154[])(void); + +void func_80171120(void *a0) { + D_8018E154[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_8018E15C[])(void); + +void func_801711C0(void *a0) { + D_8018E15C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_8018E164[])(void); + +void func_80171260(void *a0) { + D_8018E164[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_8018E16C[])(void); + +void func_801714E4(void *a0) { + D_8018E16C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8016AB6C", func_80172C50); + + +extern void (*D_8018E1B0[])(void); + +void func_80172CA0(void *a0) { + D_8018E1B0[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_8018E174; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_8018E174); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC02_003/ov_SC02_003_jr_8015AE2C.c b/src/ov_SC02_003/ov_SC02_003_jr_8015AE2C.c index dfb958359..dbfdf2de1 100644 --- a/src/ov_SC02_003/ov_SC02_003_jr_8015AE2C.c +++ b/src/ov_SC02_003/ov_SC02_003_jr_8015AE2C.c @@ -5182,1784 +5182,3 @@ extern void (*D_8018DD68[])(void); void func_8016AB30(void *a0) { D_8018DD68[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_8018DDE4[])(void); - -void func_8016B4BC(void *a0) { - D_8018DDE4[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801E72D0; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801E72D0); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_8018DDD8[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_8018DDD8; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_8018DE1C[]; -extern unsigned short D_8018DE24[]; -extern unsigned short D_8018DE2C[]; -extern unsigned char D_801E72D8[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801E72D8 + param_2 * 0x40); - puVar3 = D_8018DE1C[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_8018DE24[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_8018DE2C[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801E72D0; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801E72D0, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_8018DE34[])(void); - -void func_8016BBA4(void *a0) { - D_8018DE34[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801E740C; - extern u8 D_801E740D; - extern u8 D_801E740E; - extern M2C_UNK D_801E7410; - extern u8 D_801E7411; - extern u8 D_801E7412; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801E740C) = 0x20; - D_801E740D = 0x20; - D_801E740E = 0; - (*(u8 *)&D_801E7410) = 0xc0; - D_801E7411 = 0xc0; - D_801E7412 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801E740C; -extern M2C_UNK D_801E7410; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801E740C, &D_801E7410, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801E740D; - extern u8 D_801E740E; - extern u8 D_801E7411; - extern u8 D_801E7412; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801E740C); - if (*p1 != 0) *p1 -= 4; - if (D_801E740D != 0) D_801E740D -= 4; - if (D_801E740E != 0) D_801E740E -= 4; - p2 = &(*(u8 *)&D_801E7410); - if (*p2 != 0) *p2 -= 4; - if (D_801E7411 != 0) D_801E7411 -= 4; - if (D_801E7412 != 0) D_801E7412 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801E740C), &(*(int *)&D_801E7410), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801E7398; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801E7398); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_8018DE44; - extern s32 D_8018DE4C; - extern s32 D_8018DE54; - extern s32 D_8018DE5C; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_8018DE44, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_8018DE4C, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_8018DE54, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_8018DE5C, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_8018DE64[])(void); - -void func_8016C14C(void *a0) { - D_8018DE64[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801E7414[]; -extern u8 D_801E741C[]; -extern u8 D_801E73CC[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801E7414, D_801E741C, D_801E73CC); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801E7428[]; - extern u8 D_801E74E8; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801E7428[1] = 0xff; - D_801E7428[2] = 0x10; - D_801E7428[0] = 0x10; - D_801E7428[6] = 0; - D_801E7428[5] = 0; - D_801E7428[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801E7428, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801E74E8, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801E7428); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8015AE2C", func_8016C998); - - -extern void (*D_8018DE6C[])(void); - -void func_8016CB84(void *a0) { - D_8018DE6C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801E74E8[]; - - - Blk_8016CF04_8016CF04 *p = &D_801E74E8[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_8018DE88[])(void); - -void func_8016D19C(void *a0) { - D_8018DE88[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_8018DE90[])(void); - -void func_8016D428(void *a0) { - D_8018DE90[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_8018DEF8[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_8018DEF8[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_8018DE9C; -extern u8 D_8018DEA8; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018DE9C, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018DEA8); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8015AE2C", func_8016DC20); - - -extern void (*D_8018DF2C[])(void); - -void func_8016DEA4(void *a0) { - D_8018DF2C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_8018DF34[])(void); - -void func_8016DF20(void *a0) { - D_8018DF34[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_8018DF88[])(void); - -void func_8016E5B8(void *a0) { - D_8018DF88[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_8018DF48[4]; - extern s32 D_8018DF68; - extern s32 D_8018DF70; - extern s32 D_8018DF78; - extern s32 D_8018DF80; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_8018DF48[0], pp, &tmp); - RotTransSV(&D_8018DF48[1], &prim.v[1], &tmp); - RotTransSV(&D_8018DF48[2], &prim.v[2], &tmp); - RotTransSV(&D_8018DF48[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_8018DF68; - prim.f1 = D_8018DF70; - prim.f2 = D_8018DF78; - prim.f3 = D_8018DF80; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_8018DFC8[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_8018DFC8[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_8018DFBC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_8018DFBC[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_8018DFAC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_8018DFAC[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018DFBC[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_8018DFBC[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_8018DFBC[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_8018DFD8; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_8018DFD8; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_8018E050[])(void); - -void func_8016F6E0(void *a0) { - D_8018E050[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_8018E058[])(void); - -void func_8016F798(void *a0) { - D_8018E058[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_8018E060[])(void); - -void func_8016F834(void *a0) { - D_8018E060[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_8018E068[])(void); - -void func_8016F8E4(void *a0) { - D_8018E068[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_8018E070[])(void); - -void func_8016F9C4(void *a0) { - D_8018E070[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_8018E078[])(void); - -void func_8016FA84(void *a0) { - D_8018E078[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_8018E084[])(void); - -void func_8016FB7C(void *a0) { - D_8018E084[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_8018E090[])(void); - -void func_8016FC90(void *a0) { - D_8018E090[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_8018E09C[])(void); - -void func_8016FDB4(void *a0) { - D_8018E09C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_8018E0AC[])(void); - -void func_8016FF30(void *a0) { - D_8018E0AC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_8018E0BC[])(void); - -void func_8016FFDC(void *a0) { - D_8018E0BC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_8018E0C4[])(void); - -void func_80170150(void *a0) { - D_8018E0C4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_8018E0CC[])(void); - -void func_80170240(void *a0) { - D_8018E0CC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_8018E0D4[])(void); - -void func_801702FC(void *a0) { - D_8018E0D4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_8018E0DC[])(void); - -void func_801703E0(void *a0) { - D_8018E0DC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_8018E0E4[])(void); - -void func_801704B0(void *a0) { - D_8018E0E4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_8018E0EC[])(void); - -void func_80170548(void *a0) { - D_8018E0EC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_8018E0F4[])(void); - -void func_801705F8(void *a0) { - D_8018E0F4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_8018E0FC[])(void); - -void func_801706AC(void *a0) { - D_8018E0FC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_8018E104[])(void); - -void func_80170748(void *a0) { - D_8018E104[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_8018E10C[])(void); - -void func_80170810(void *a0) { - D_8018E10C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_8018E114[])(void); - -void func_80170AD8(void *a0) { - D_8018E114[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_8018E11C[])(void); - -void func_80170BD8(void *a0) { - D_8018E11C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_8018E124[])(void); - -void func_80170C74(void *a0) { - D_8018E124[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8015AE2C", func_80170CF0); - - -extern void (*D_8018E12C[])(void); - -void func_80170D68(void *a0) { - D_8018E12C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_8018E134[])(void); - -void func_80170E34(void *a0) { - D_8018E134[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_8018E13C[])(void); - -void func_80170EFC(void *a0) { - D_8018E13C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_8018E144[])(void); - -void func_80170FB0(void *a0) { - D_8018E144[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_8018E14C[])(void); - -void func_80171064(void *a0) { - D_8018E14C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_8018E154[])(void); - -void func_80171120(void *a0) { - D_8018E154[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_8018E15C[])(void); - -void func_801711C0(void *a0) { - D_8018E15C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_8018E164[])(void); - -void func_80171260(void *a0) { - D_8018E164[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_8018E16C[])(void); - -void func_801714E4(void *a0) { - D_8018E16C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8015AE2C", func_80172C50); - - -extern void (*D_8018E1B0[])(void); - -void func_80172CA0(void *a0) { - D_8018E1B0[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_8018E174; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_8018E174); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC02_003/ov_SC02_003_jr_8016AB6C.c b/src/ov_SC02_003/ov_SC02_003_jr_8016AB6C.c new file mode 100644 index 000000000..b5bf8607f --- /dev/null +++ b/src/ov_SC02_003/ov_SC02_003_jr_8016AB6C.c @@ -0,0 +1,3946 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018D134; +extern u8 D_8018D0A4; +extern u8 D_8018D080; +extern u8 D_8018D05C; +extern u8 D_8018D110; +extern u8 D_8018D0EC; +extern u8 D_8018D0C8; +extern u8 D_8018D038; +extern void func_80145934(void); +extern u8 D_8018D1C4; +extern u8 D_8018D1A0; +extern u8 D_8018D17C; +extern u8 D_8018D158; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018C5BC[]; +extern unsigned char D_8018C5EC[]; +extern unsigned char D_8018C63C[]; +extern unsigned char D_8018C66C[]; +extern unsigned char D_8018C69C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018C6EC[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018C7B4[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018C83C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018C844; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801E6E60; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801E6E64; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018C874; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018C91C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018C940[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018C930; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018C954[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018C960[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018C970[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018C988[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018C978; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018C99C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018C9B8[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018C9A8; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018C9CC[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018C9E0[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018C9F4; +extern void (*D_8018CA1C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018C9FC; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018CA68[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018CA6C[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018CED0[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018CEE0[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801E6E98; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018CF08[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018CEE8; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018CEF8; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018CF48[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018CF50[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018CF1C; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018CF5C[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018CF2C; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801E6EA0; +extern s32 D_801E6EAC; +extern s32 D_801E6EB0; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018CF98[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018CF6C[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801E6EA8; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018D1E8[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018D008[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018D28C[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018D3E0[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018D1FC; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018D3E8[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018D20C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018D22C; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_8018D3F0[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_8018D418[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_8018D424[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_8018D298[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_8018D4C8; +extern void func_8015D380(s32 a0); +extern unsigned char D_8018C5AC[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_8018D4DC[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_8018D518[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_8018D560; +extern u16 D_8018D562; +extern u16 D_8018D564; +extern s32 D_8018D568; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_8018D27C; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_8018D5F4[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_8018D6A4[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_8018D6D4[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_8018D738; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801E6EB8[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_8018D75C[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801E6F10[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_8018D7A4[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_8018D794; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801E63B4[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_8018D7AC[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_8018D800[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_8018D7C8; +extern s16 D_8018D7FC; +extern s16 D_8018D7FA; +extern s16 D_8018D7F8; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_8018D80C[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801E6F70; +extern u8 D_801E6F71; +extern u8 D_801E6F72; +extern u8 D_801E6F73; +extern u8 D_801E6F74; +extern u8 D_801E6F75; +extern u8 D_801E6F76; +extern u8 D_801E6F77; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_8018D81C[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801E6FB0; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_8018D860[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_8018D8DC[]; +extern s32 D_8018D8FC[]; +extern u8 D_8018D978[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_8018D998[]; +extern u8 D_8018D9B8[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_8018DA54[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_8018DAD0[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801E63C4; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_8018DADC[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_8018DAE4[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_8018DBAC[])(void); +extern void func_80166618(void *a0); +extern void (*D_8018DBBC[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_8018DBCC[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_8018DBD8[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_8018DB38[]; +extern u8 D_8018DB4C[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_8018DBF0[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_8018DBF8[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_8018DC00[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_8018DC08[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_8018DC10[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_8018DC18[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_8018DC20[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_8018DCD4[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_8018DCDC[])(void); +extern void func_80169F00(void *a0); +extern char D_8018DC8C[]; +extern char D_8018DC4C[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_8018DD14[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_8018DD20[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_8018DD68[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_8018DD28[]; + extern u8 D_8018DD38[]; + extern u8 D_801E7280[]; + extern u8 D_801E72A8[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_8018DD28, D_801E7280) + 3; + func_8001CE28(obj, D_801E7280); + } else { + var_s3 = func_80024054(D_8018DD38, D_801E72A8) + 9; + func_8001CE28(obj, D_801E72A8); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_8018DDE4[])(void); + +void func_8016B4BC(void *a0) { + D_8018DDE4[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801E72D0; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801E72D0); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_8018DDD8[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_8018DDD8; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_8018DE1C[]; +extern unsigned short D_8018DE24[]; +extern unsigned short D_8018DE2C[]; +extern unsigned char D_801E72D8[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801E72D8 + param_2 * 0x40); + puVar3 = D_8018DE1C[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_8018DE24[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_8018DE2C[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801E72D0; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801E72D0, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_8018DE34[])(void); + +void func_8016BBA4(void *a0) { + D_8018DE34[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801E740C; + extern u8 D_801E740D; + extern u8 D_801E740E; + extern M2C_UNK D_801E7410; + extern u8 D_801E7411; + extern u8 D_801E7412; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801E740C) = 0x20; + D_801E740D = 0x20; + D_801E740E = 0; + (*(u8 *)&D_801E7410) = 0xc0; + D_801E7411 = 0xc0; + D_801E7412 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801E740C; +extern M2C_UNK D_801E7410; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801E740C, &D_801E7410, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801E740D; + extern u8 D_801E740E; + extern u8 D_801E7411; + extern u8 D_801E7412; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801E740C); + if (*p1 != 0) *p1 -= 4; + if (D_801E740D != 0) D_801E740D -= 4; + if (D_801E740E != 0) D_801E740E -= 4; + p2 = &(*(u8 *)&D_801E7410); + if (*p2 != 0) *p2 -= 4; + if (D_801E7411 != 0) D_801E7411 -= 4; + if (D_801E7412 != 0) D_801E7412 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801E740C), &(*(int *)&D_801E7410), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801E7398; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801E7398); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_8018DE44; + extern s32 D_8018DE4C; + extern s32 D_8018DE54; + extern s32 D_8018DE5C; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_8018DE44, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_8018DE4C, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_8018DE54, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_8018DE5C, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_8018DE64[])(void); + +void func_8016C14C(void *a0) { + D_8018DE64[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801E7414[]; +extern u8 D_801E741C[]; +extern u8 D_801E73CC[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801E7414, D_801E741C, D_801E73CC); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801E7428[]; + extern u8 D_801E74E8; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801E7428[1] = 0xff; + D_801E7428[2] = 0x10; + D_801E7428[0] = 0x10; + D_801E7428[6] = 0; + D_801E7428[5] = 0; + D_801E7428[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801E7428, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801E74E8, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801E7428); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8016AB6C", func_8016C998); + + +extern void (*D_8018DE6C[])(void); + +void func_8016CB84(void *a0) { + D_8018DE6C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801E74E8[]; + + + Blk_8016CF04_8016CF04 *p = &D_801E74E8[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_8018DE88[])(void); + +void func_8016D19C(void *a0) { + D_8018DE88[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_8018DE90[])(void); + +void func_8016D428(void *a0) { + D_8018DE90[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018DEF8[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_8018DEF8[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_8018DE9C; +extern u8 D_8018DEA8; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018DE9C, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018DEA8); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8016AB6C", func_8016DC20); + + +extern void (*D_8018DF2C[])(void); + +void func_8016DEA4(void *a0) { + D_8018DF2C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_8018DF34[])(void); + +void func_8016DF20(void *a0) { + D_8018DF34[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_8018DF88[])(void); + +void func_8016E5B8(void *a0) { + D_8018DF88[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_8018DF48[4]; + extern s32 D_8018DF68; + extern s32 D_8018DF70; + extern s32 D_8018DF78; + extern s32 D_8018DF80; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_8018DF48[0], pp, &tmp); + RotTransSV(&D_8018DF48[1], &prim.v[1], &tmp); + RotTransSV(&D_8018DF48[2], &prim.v[2], &tmp); + RotTransSV(&D_8018DF48[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_8018DF68; + prim.f1 = D_8018DF70; + prim.f2 = D_8018DF78; + prim.f3 = D_8018DF80; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_8018DFC8[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_8018DFC8[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_8018DFBC[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_8018DFBC[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_8018DFAC[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_8018DFAC[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018DFBC[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_8018DFBC[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_8018DFBC[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_8018DFD8; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_8018DFD8; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_8018E050[])(void); + +void func_8016F6E0(void *a0) { + D_8018E050[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_8018E058[])(void); + +void func_8016F798(void *a0) { + D_8018E058[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_8018E060[])(void); + +void func_8016F834(void *a0) { + D_8018E060[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_8018E068[])(void); + +void func_8016F8E4(void *a0) { + D_8018E068[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_8018E070[])(void); + +void func_8016F9C4(void *a0) { + D_8018E070[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_8018E078[])(void); + +void func_8016FA84(void *a0) { + D_8018E078[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_8018E084[])(void); + +void func_8016FB7C(void *a0) { + D_8018E084[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_8018E090[])(void); + +void func_8016FC90(void *a0) { + D_8018E090[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_8018E09C[])(void); + +void func_8016FDB4(void *a0) { + D_8018E09C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_8018E0AC[])(void); + +void func_8016FF30(void *a0) { + D_8018E0AC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_8018E0BC[])(void); + +void func_8016FFDC(void *a0) { + D_8018E0BC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_8018E0C4[])(void); + +void func_80170150(void *a0) { + D_8018E0C4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_8018E0CC[])(void); + +void func_80170240(void *a0) { + D_8018E0CC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_8018E0D4[])(void); + +void func_801702FC(void *a0) { + D_8018E0D4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_8018E0DC[])(void); + +void func_801703E0(void *a0) { + D_8018E0DC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_8018E0E4[])(void); + +void func_801704B0(void *a0) { + D_8018E0E4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_8018E0EC[])(void); + +void func_80170548(void *a0) { + D_8018E0EC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_8018E0F4[])(void); + +void func_801705F8(void *a0) { + D_8018E0F4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_8018E0FC[])(void); + +void func_801706AC(void *a0) { + D_8018E0FC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_8018E104[])(void); + +void func_80170748(void *a0) { + D_8018E104[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_8018E10C[])(void); + +void func_80170810(void *a0) { + D_8018E10C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_8018E114[])(void); + +void func_80170AD8(void *a0) { + D_8018E114[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_8018E11C[])(void); + +void func_80170BD8(void *a0) { + D_8018E11C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_8018E124[])(void); + +void func_80170C74(void *a0) { + D_8018E124[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8016AB6C", func_80170CF0); + + +extern void (*D_8018E12C[])(void); + +void func_80170D68(void *a0) { + D_8018E12C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_8018E134[])(void); + +void func_80170E34(void *a0) { + D_8018E134[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_8018E13C[])(void); + +void func_80170EFC(void *a0) { + D_8018E13C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_8018E144[])(void); + +void func_80170FB0(void *a0) { + D_8018E144[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_8018E14C[])(void); + +void func_80171064(void *a0) { + D_8018E14C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_8018E154[])(void); + +void func_80171120(void *a0) { + D_8018E154[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_8018E15C[])(void); + +void func_801711C0(void *a0) { + D_8018E15C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_8018E164[])(void); + +void func_80171260(void *a0) { + D_8018E164[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_8018E16C[])(void); + +void func_801714E4(void *a0) { + D_8018E16C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8016AB6C", func_80172C50); + + +extern void (*D_8018E1B0[])(void); + +void func_80172CA0(void *a0) { + D_8018E1B0[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_8018E174; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_8018E174); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC02_004/ov_SC02_004_jr_8015AE2C.c b/src/ov_SC02_004/ov_SC02_004_jr_8015AE2C.c index 3dd849c9a..2586bcc23 100644 --- a/src/ov_SC02_004/ov_SC02_004_jr_8015AE2C.c +++ b/src/ov_SC02_004/ov_SC02_004_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_80180E48[])(void); void func_8016AB30(void *a0) { D_80180E48[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80180EC4[])(void); - -void func_8016B4BC(void *a0) { - D_80180EC4[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_80195520; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_80195520); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80180EB8[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80180EB8; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80180EFC[]; -extern unsigned short D_80180F04[]; -extern unsigned short D_80180F0C[]; -extern unsigned char D_80195528[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_80195528 + param_2 * 0x40); - puVar3 = D_80180EFC[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80180F04[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80180F0C[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_80195520; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_80195520, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80180F14[])(void); - -void func_8016BBA4(void *a0) { - D_80180F14[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_8019565C; - extern u8 D_8019565D; - extern u8 D_8019565E; - extern M2C_UNK D_80195660; - extern u8 D_80195661; - extern u8 D_80195662; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_8019565C) = 0x20; - D_8019565D = 0x20; - D_8019565E = 0; - (*(u8 *)&D_80195660) = 0xc0; - D_80195661 = 0xc0; - D_80195662 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_8019565C; -extern M2C_UNK D_80195660; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_8019565C, &D_80195660, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_8019565D; - extern u8 D_8019565E; - extern u8 D_80195661; - extern u8 D_80195662; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_8019565C); - if (*p1 != 0) *p1 -= 4; - if (D_8019565D != 0) D_8019565D -= 4; - if (D_8019565E != 0) D_8019565E -= 4; - p2 = &(*(u8 *)&D_80195660); - if (*p2 != 0) *p2 -= 4; - if (D_80195661 != 0) D_80195661 -= 4; - if (D_80195662 != 0) D_80195662 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_8019565C), &(*(int *)&D_80195660), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801955E8; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801955E8); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80180F24; - extern s32 D_80180F2C; - extern s32 D_80180F34; - extern s32 D_80180F3C; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80180F24, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80180F2C, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80180F34, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80180F3C, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80180F44[])(void); - -void func_8016C14C(void *a0) { - D_80180F44[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_80195664[]; -extern u8 D_8019566C[]; -extern u8 D_8019561C[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_80195664, D_8019566C, D_8019561C); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_80195678[]; - extern u8 D_80195738; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_80195678[1] = 0xff; - D_80195678[2] = 0x10; - D_80195678[0] = 0x10; - D_80195678[6] = 0; - D_80195678[5] = 0; - D_80195678[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_80195678, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_80195738, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_80195678); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8015AE2C", func_8016C998); - - -extern void (*D_80180F4C[])(void); - -void func_8016CB84(void *a0) { - D_80180F4C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_80195738[]; - - - Blk_8016CF04_8016CF04 *p = &D_80195738[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80180F68[])(void); - -void func_8016D19C(void *a0) { - D_80180F68[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80180F70[])(void); - -void func_8016D428(void *a0) { - D_80180F70[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80180FD8[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80180FD8[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80180F7C; -extern u8 D_80180F88; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80180F7C, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80180F88); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8015AE2C", func_8016DC20); - - -extern void (*D_8018100C[])(void); - -void func_8016DEA4(void *a0) { - D_8018100C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80181014[])(void); - -void func_8016DF20(void *a0) { - D_80181014[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80181068[])(void); - -void func_8016E5B8(void *a0) { - D_80181068[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80181028[4]; - extern s32 D_80181048; - extern s32 D_80181050; - extern s32 D_80181058; - extern s32 D_80181060; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80181028[0], pp, &tmp); - RotTransSV(&D_80181028[1], &prim.v[1], &tmp); - RotTransSV(&D_80181028[2], &prim.v[2], &tmp); - RotTransSV(&D_80181028[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80181048; - prim.f1 = D_80181050; - prim.f2 = D_80181058; - prim.f3 = D_80181060; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_801810A8[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_801810A8[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_8018109C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_8018109C[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_8018108C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_8018108C[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018109C[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_8018109C[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_8018109C[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_801810B8; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_801810B8; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80181130[])(void); - -void func_8016F6E0(void *a0) { - D_80181130[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80181138[])(void); - -void func_8016F798(void *a0) { - D_80181138[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80181140[])(void); - -void func_8016F834(void *a0) { - D_80181140[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80181148[])(void); - -void func_8016F8E4(void *a0) { - D_80181148[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80181150[])(void); - -void func_8016F9C4(void *a0) { - D_80181150[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80181158[])(void); - -void func_8016FA84(void *a0) { - D_80181158[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80181164[])(void); - -void func_8016FB7C(void *a0) { - D_80181164[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80181170[])(void); - -void func_8016FC90(void *a0) { - D_80181170[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_8018117C[])(void); - -void func_8016FDB4(void *a0) { - D_8018117C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_8018118C[])(void); - -void func_8016FF30(void *a0) { - D_8018118C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_8018119C[])(void); - -void func_8016FFDC(void *a0) { - D_8018119C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_801811A4[])(void); - -void func_80170150(void *a0) { - D_801811A4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_801811AC[])(void); - -void func_80170240(void *a0) { - D_801811AC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_801811B4[])(void); - -void func_801702FC(void *a0) { - D_801811B4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_801811BC[])(void); - -void func_801703E0(void *a0) { - D_801811BC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_801811C4[])(void); - -void func_801704B0(void *a0) { - D_801811C4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_801811CC[])(void); - -void func_80170548(void *a0) { - D_801811CC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_801811D4[])(void); - -void func_801705F8(void *a0) { - D_801811D4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_801811DC[])(void); - -void func_801706AC(void *a0) { - D_801811DC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_801811E4[])(void); - -void func_80170748(void *a0) { - D_801811E4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_801811EC[])(void); - -void func_80170810(void *a0) { - D_801811EC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_801811F4[])(void); - -void func_80170AD8(void *a0) { - D_801811F4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_801811FC[])(void); - -void func_80170BD8(void *a0) { - D_801811FC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80181204[])(void); - -void func_80170C74(void *a0) { - D_80181204[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8015AE2C", func_80170CF0); - - -extern void (*D_8018120C[])(void); - -void func_80170D68(void *a0) { - D_8018120C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80181214[])(void); - -void func_80170E34(void *a0) { - D_80181214[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_8018121C[])(void); - -void func_80170EFC(void *a0) { - D_8018121C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80181224[])(void); - -void func_80170FB0(void *a0) { - D_80181224[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_8018122C[])(void); - -void func_80171064(void *a0) { - D_8018122C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80181234[])(void); - -void func_80171120(void *a0) { - D_80181234[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_8018123C[])(void); - -void func_801711C0(void *a0) { - D_8018123C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80181244[])(void); - -void func_80171260(void *a0) { - D_80181244[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_8018124C[])(void); - -void func_801714E4(void *a0) { - D_8018124C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8015AE2C", func_80172C50); - - -extern void (*D_80181290[])(void); - -void func_80172CA0(void *a0) { - D_80181290[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80181254; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80181254); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC02_004/ov_SC02_004_jr_8016AB6C.c b/src/ov_SC02_004/ov_SC02_004_jr_8016AB6C.c new file mode 100644 index 000000000..987f4e835 --- /dev/null +++ b/src/ov_SC02_004/ov_SC02_004_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80180214; +extern u8 D_80180184; +extern u8 D_80180160; +extern u8 D_8018013C; +extern u8 D_801801F0; +extern u8 D_801801CC; +extern u8 D_801801A8; +extern u8 D_80180118; +extern void func_80145934(void); +extern u8 D_801802A4; +extern u8 D_80180280; +extern u8 D_8018025C; +extern u8 D_80180238; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8017F69C[]; +extern unsigned char D_8017F6CC[]; +extern unsigned char D_8017F71C[]; +extern unsigned char D_8017F74C[]; +extern unsigned char D_8017F77C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8017F7CC[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8017F894[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8017F91C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8017F924; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801950B0; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801950B4; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8017F954; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8017F9FC[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8017FA20[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8017FA10; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8017FA34[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8017FA40[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8017FA50[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8017FA68[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8017FA58; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8017FA7C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8017FA98[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8017FA88; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8017FAAC[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8017FAC0[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8017FAD4; +extern void (*D_8017FAFC[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8017FADC; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8017FB48[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8017FB4C[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8017FFB0[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8017FFC0[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801950E8; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8017FFE8[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8017FFC8; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8017FFD8; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80180028[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80180030[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8017FFFC; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018003C[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018000C; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801950F0; +extern s32 D_801950FC; +extern s32 D_80195100; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80180078[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018004C[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801950F8; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_801802C8[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_801800E8[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018036C[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_801804C0[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_801802DC; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_801804C8[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_801802EC; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018030C; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_801804D0[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_801804F8[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80180504[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80180378[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_801805A8; +extern void func_8015D380(s32 a0); +extern unsigned char D_8017F68C[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_801805BC[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_801805F8[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80180640; +extern u16 D_80180642; +extern u16 D_80180644; +extern s32 D_80180648; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80180650; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_8018035C; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_801806D4[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80180784[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_801807B4[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80180818; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_80195108[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_8018083C[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_80195160[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80180884[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80180874; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801949C4[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_8018088C[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_801808E0[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_801808A8; +extern s16 D_801808DC; +extern s16 D_801808DA; +extern s16 D_801808D8; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_801808EC[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801951C0; +extern u8 D_801951C1; +extern u8 D_801951C2; +extern u8 D_801951C3; +extern u8 D_801951C4; +extern u8 D_801951C5; +extern u8 D_801951C6; +extern u8 D_801951C7; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_801808FC[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_80195200; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80180940[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_801809BC[]; +extern s32 D_801809DC[]; +extern u8 D_80180A58[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80180A78[]; +extern u8 D_80180A98[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80180B34[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80180BB0[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801949D4; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80180BBC[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80180BC4[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80180C8C[])(void); +extern void func_80166618(void *a0); +extern void (*D_80180C9C[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80180CAC[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80180CB8[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80180C18[]; +extern u8 D_80180C2C[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80180CD0[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80180CD8[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80180CE0[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80180CE8[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80180CF0[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80180CF8[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80180D00[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80180DB4[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80180DBC[])(void); +extern void func_80169F00(void *a0); +extern char D_80180D6C[]; +extern char D_80180D2C[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80180DF4[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80180E00[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80180E48[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80180E08[]; + extern u8 D_80180E18[]; + extern u8 D_801954D0[]; + extern u8 D_801954F8[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80180E08, D_801954D0) + 3; + func_8001CE28(obj, D_801954D0); + } else { + var_s3 = func_80024054(D_80180E18, D_801954F8) + 9; + func_8001CE28(obj, D_801954F8); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80180EC4[])(void); + +void func_8016B4BC(void *a0) { + D_80180EC4[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_80195520; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_80195520); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80180EB8[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80180EB8; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80180EFC[]; +extern unsigned short D_80180F04[]; +extern unsigned short D_80180F0C[]; +extern unsigned char D_80195528[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_80195528 + param_2 * 0x40); + puVar3 = D_80180EFC[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80180F04[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80180F0C[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_80195520; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_80195520, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80180F14[])(void); + +void func_8016BBA4(void *a0) { + D_80180F14[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_8019565C; + extern u8 D_8019565D; + extern u8 D_8019565E; + extern M2C_UNK D_80195660; + extern u8 D_80195661; + extern u8 D_80195662; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_8019565C) = 0x20; + D_8019565D = 0x20; + D_8019565E = 0; + (*(u8 *)&D_80195660) = 0xc0; + D_80195661 = 0xc0; + D_80195662 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_8019565C; +extern M2C_UNK D_80195660; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_8019565C, &D_80195660, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_8019565D; + extern u8 D_8019565E; + extern u8 D_80195661; + extern u8 D_80195662; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_8019565C); + if (*p1 != 0) *p1 -= 4; + if (D_8019565D != 0) D_8019565D -= 4; + if (D_8019565E != 0) D_8019565E -= 4; + p2 = &(*(u8 *)&D_80195660); + if (*p2 != 0) *p2 -= 4; + if (D_80195661 != 0) D_80195661 -= 4; + if (D_80195662 != 0) D_80195662 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_8019565C), &(*(int *)&D_80195660), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801955E8; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801955E8); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80180F24; + extern s32 D_80180F2C; + extern s32 D_80180F34; + extern s32 D_80180F3C; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80180F24, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80180F2C, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80180F34, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80180F3C, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80180F44[])(void); + +void func_8016C14C(void *a0) { + D_80180F44[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_80195664[]; +extern u8 D_8019566C[]; +extern u8 D_8019561C[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_80195664, D_8019566C, D_8019561C); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_80195678[]; + extern u8 D_80195738; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_80195678[1] = 0xff; + D_80195678[2] = 0x10; + D_80195678[0] = 0x10; + D_80195678[6] = 0; + D_80195678[5] = 0; + D_80195678[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_80195678, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_80195738, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_80195678); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8016AB6C", func_8016C998); + + +extern void (*D_80180F4C[])(void); + +void func_8016CB84(void *a0) { + D_80180F4C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_80195738[]; + + + Blk_8016CF04_8016CF04 *p = &D_80195738[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80180F68[])(void); + +void func_8016D19C(void *a0) { + D_80180F68[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80180F70[])(void); + +void func_8016D428(void *a0) { + D_80180F70[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80180FD8[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80180FD8[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80180F7C; +extern u8 D_80180F88; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80180F7C, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80180F88); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8016AB6C", func_8016DC20); + + +extern void (*D_8018100C[])(void); + +void func_8016DEA4(void *a0) { + D_8018100C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80181014[])(void); + +void func_8016DF20(void *a0) { + D_80181014[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80181068[])(void); + +void func_8016E5B8(void *a0) { + D_80181068[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80181028[4]; + extern s32 D_80181048; + extern s32 D_80181050; + extern s32 D_80181058; + extern s32 D_80181060; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80181028[0], pp, &tmp); + RotTransSV(&D_80181028[1], &prim.v[1], &tmp); + RotTransSV(&D_80181028[2], &prim.v[2], &tmp); + RotTransSV(&D_80181028[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80181048; + prim.f1 = D_80181050; + prim.f2 = D_80181058; + prim.f3 = D_80181060; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_801810A8[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_801810A8[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_8018109C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_8018109C[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_8018108C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_8018108C[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018109C[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_8018109C[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_8018109C[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_801810B8; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_801810B8; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80181130[])(void); + +void func_8016F6E0(void *a0) { + D_80181130[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80181138[])(void); + +void func_8016F798(void *a0) { + D_80181138[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80181140[])(void); + +void func_8016F834(void *a0) { + D_80181140[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80181148[])(void); + +void func_8016F8E4(void *a0) { + D_80181148[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80181150[])(void); + +void func_8016F9C4(void *a0) { + D_80181150[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80181158[])(void); + +void func_8016FA84(void *a0) { + D_80181158[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80181164[])(void); + +void func_8016FB7C(void *a0) { + D_80181164[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80181170[])(void); + +void func_8016FC90(void *a0) { + D_80181170[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_8018117C[])(void); + +void func_8016FDB4(void *a0) { + D_8018117C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_8018118C[])(void); + +void func_8016FF30(void *a0) { + D_8018118C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_8018119C[])(void); + +void func_8016FFDC(void *a0) { + D_8018119C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_801811A4[])(void); + +void func_80170150(void *a0) { + D_801811A4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_801811AC[])(void); + +void func_80170240(void *a0) { + D_801811AC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_801811B4[])(void); + +void func_801702FC(void *a0) { + D_801811B4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_801811BC[])(void); + +void func_801703E0(void *a0) { + D_801811BC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_801811C4[])(void); + +void func_801704B0(void *a0) { + D_801811C4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_801811CC[])(void); + +void func_80170548(void *a0) { + D_801811CC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_801811D4[])(void); + +void func_801705F8(void *a0) { + D_801811D4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_801811DC[])(void); + +void func_801706AC(void *a0) { + D_801811DC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_801811E4[])(void); + +void func_80170748(void *a0) { + D_801811E4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_801811EC[])(void); + +void func_80170810(void *a0) { + D_801811EC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_801811F4[])(void); + +void func_80170AD8(void *a0) { + D_801811F4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_801811FC[])(void); + +void func_80170BD8(void *a0) { + D_801811FC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80181204[])(void); + +void func_80170C74(void *a0) { + D_80181204[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8016AB6C", func_80170CF0); + + +extern void (*D_8018120C[])(void); + +void func_80170D68(void *a0) { + D_8018120C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80181214[])(void); + +void func_80170E34(void *a0) { + D_80181214[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_8018121C[])(void); + +void func_80170EFC(void *a0) { + D_8018121C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80181224[])(void); + +void func_80170FB0(void *a0) { + D_80181224[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_8018122C[])(void); + +void func_80171064(void *a0) { + D_8018122C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80181234[])(void); + +void func_80171120(void *a0) { + D_80181234[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_8018123C[])(void); + +void func_801711C0(void *a0) { + D_8018123C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80181244[])(void); + +void func_80171260(void *a0) { + D_80181244[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_8018124C[])(void); + +void func_801714E4(void *a0) { + D_8018124C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8016AB6C", func_80172C50); + + +extern void (*D_80181290[])(void); + +void func_80172CA0(void *a0) { + D_80181290[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80181254; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80181254); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC02_005/ov_SC02_005_jr_8015AE2C.c b/src/ov_SC02_005/ov_SC02_005_jr_8015AE2C.c index 4c50795c8..579401b32 100644 --- a/src/ov_SC02_005/ov_SC02_005_jr_8015AE2C.c +++ b/src/ov_SC02_005/ov_SC02_005_jr_8015AE2C.c @@ -5188,1784 +5188,3 @@ extern void (*D_80193A4C[])(void); void func_8016AB30(void *a0) { D_80193A4C[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80193AC8[])(void); - -void func_8016B4BC(void *a0) { - D_80193AC8[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801E3598; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801E3598); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80193ABC[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80193ABC; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80193B00[]; -extern unsigned short D_80193B08[]; -extern unsigned short D_80193B10[]; -extern unsigned char D_801E35A0[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801E35A0 + param_2 * 0x40); - puVar3 = D_80193B00[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80193B08[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80193B10[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801E3598; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801E3598, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80193B18[])(void); - -void func_8016BBA4(void *a0) { - D_80193B18[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801E36D4; - extern u8 D_801E36D5; - extern u8 D_801E36D6; - extern M2C_UNK D_801E36D8; - extern u8 D_801E36D9; - extern u8 D_801E36DA; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801E36D4) = 0x20; - D_801E36D5 = 0x20; - D_801E36D6 = 0; - (*(u8 *)&D_801E36D8) = 0xc0; - D_801E36D9 = 0xc0; - D_801E36DA = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801E36D4; -extern M2C_UNK D_801E36D8; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801E36D4, &D_801E36D8, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801E36D5; - extern u8 D_801E36D6; - extern u8 D_801E36D9; - extern u8 D_801E36DA; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801E36D4); - if (*p1 != 0) *p1 -= 4; - if (D_801E36D5 != 0) D_801E36D5 -= 4; - if (D_801E36D6 != 0) D_801E36D6 -= 4; - p2 = &(*(u8 *)&D_801E36D8); - if (*p2 != 0) *p2 -= 4; - if (D_801E36D9 != 0) D_801E36D9 -= 4; - if (D_801E36DA != 0) D_801E36DA -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801E36D4), &(*(int *)&D_801E36D8), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801E3660; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801E3660); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80193B28; - extern s32 D_80193B30; - extern s32 D_80193B38; - extern s32 D_80193B40; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80193B28, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80193B30, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80193B38, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80193B40, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80193B48[])(void); - -void func_8016C14C(void *a0) { - D_80193B48[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801E36DC[]; -extern u8 D_801E36E4[]; -extern u8 D_801E3694[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801E36DC, D_801E36E4, D_801E3694); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801E36F0[]; - extern u8 D_801E37B0; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801E36F0[1] = 0xff; - D_801E36F0[2] = 0x10; - D_801E36F0[0] = 0x10; - D_801E36F0[6] = 0; - D_801E36F0[5] = 0; - D_801E36F0[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801E36F0, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801E37B0, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801E36F0); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8015AE2C", func_8016C998); - - -extern void (*D_80193B50[])(void); - -void func_8016CB84(void *a0) { - D_80193B50[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801E37B0[]; - - - Blk_8016CF04_8016CF04 *p = &D_801E37B0[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80193B6C[])(void); - -void func_8016D19C(void *a0) { - D_80193B6C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80193B74[])(void); - -void func_8016D428(void *a0) { - D_80193B74[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80193BDC[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80193BDC[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80193B80; -extern u8 D_80193B8C; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80193B80, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80193B8C); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80193C10[])(void); - -void func_8016DEA4(void *a0) { - D_80193C10[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80193C18[])(void); - -void func_8016DF20(void *a0) { - D_80193C18[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80193C6C[])(void); - -void func_8016E5B8(void *a0) { - D_80193C6C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80193C2C[4]; - extern s32 D_80193C4C; - extern s32 D_80193C54; - extern s32 D_80193C5C; - extern s32 D_80193C64; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80193C2C[0], pp, &tmp); - RotTransSV(&D_80193C2C[1], &prim.v[1], &tmp); - RotTransSV(&D_80193C2C[2], &prim.v[2], &tmp); - RotTransSV(&D_80193C2C[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80193C4C; - prim.f1 = D_80193C54; - prim.f2 = D_80193C5C; - prim.f3 = D_80193C64; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80193CAC[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80193CAC[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80193CA0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80193CA0[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80193C90[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80193C90[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80193CA0[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80193CA0[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80193CA0[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80193CBC; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80193CBC; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80193D34[])(void); - -void func_8016F6E0(void *a0) { - D_80193D34[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80193D3C[])(void); - -void func_8016F798(void *a0) { - D_80193D3C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80193D44[])(void); - -void func_8016F834(void *a0) { - D_80193D44[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80193D4C[])(void); - -void func_8016F8E4(void *a0) { - D_80193D4C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80193D54[])(void); - -void func_8016F9C4(void *a0) { - D_80193D54[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80193D5C[])(void); - -void func_8016FA84(void *a0) { - D_80193D5C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80193D68[])(void); - -void func_8016FB7C(void *a0) { - D_80193D68[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80193D74[])(void); - -void func_8016FC90(void *a0) { - D_80193D74[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80193D80[])(void); - -void func_8016FDB4(void *a0) { - D_80193D80[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80193D90[])(void); - -void func_8016FF30(void *a0) { - D_80193D90[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80193DA0[])(void); - -void func_8016FFDC(void *a0) { - D_80193DA0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80193DA8[])(void); - -void func_80170150(void *a0) { - D_80193DA8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80193DB0[])(void); - -void func_80170240(void *a0) { - D_80193DB0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80193DB8[])(void); - -void func_801702FC(void *a0) { - D_80193DB8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80193DC0[])(void); - -void func_801703E0(void *a0) { - D_80193DC0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80193DC8[])(void); - -void func_801704B0(void *a0) { - D_80193DC8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80193DD0[])(void); - -void func_80170548(void *a0) { - D_80193DD0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80193DD8[])(void); - -void func_801705F8(void *a0) { - D_80193DD8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80193DE0[])(void); - -void func_801706AC(void *a0) { - D_80193DE0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80193DE8[])(void); - -void func_80170748(void *a0) { - D_80193DE8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80193DF0[])(void); - -void func_80170810(void *a0) { - D_80193DF0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80193DF8[])(void); - -void func_80170AD8(void *a0) { - D_80193DF8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80193E00[])(void); - -void func_80170BD8(void *a0) { - D_80193E00[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80193E08[])(void); - -void func_80170C74(void *a0) { - D_80193E08[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80193E10[])(void); - -void func_80170D68(void *a0) { - D_80193E10[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80193E18[])(void); - -void func_80170E34(void *a0) { - D_80193E18[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80193E20[])(void); - -void func_80170EFC(void *a0) { - D_80193E20[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80193E28[])(void); - -void func_80170FB0(void *a0) { - D_80193E28[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80193E30[])(void); - -void func_80171064(void *a0) { - D_80193E30[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80193E38[])(void); - -void func_80171120(void *a0) { - D_80193E38[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80193E40[])(void); - -void func_801711C0(void *a0) { - D_80193E40[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80193E48[])(void); - -void func_80171260(void *a0) { - D_80193E48[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80193E50[])(void); - -void func_801714E4(void *a0) { - D_80193E50[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8015AE2C", func_80172C50); - - -extern void (*D_80193E94[])(void); - -void func_80172CA0(void *a0) { - D_80193E94[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80193E58; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80193E58); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC02_005/ov_SC02_005_jr_8016AB6C.c b/src/ov_SC02_005/ov_SC02_005_jr_8016AB6C.c new file mode 100644 index 000000000..bfd6ec5d1 --- /dev/null +++ b/src/ov_SC02_005/ov_SC02_005_jr_8016AB6C.c @@ -0,0 +1,3950 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80192E18; +extern u8 D_80192D88; +extern u8 D_80192D64; +extern u8 D_80192D40; +extern u8 D_80192DF4; +extern u8 D_80192DD0; +extern u8 D_80192DAC; +extern u8 D_80192D1C; +extern void func_80145934(void); +extern u8 D_80192EA8; +extern u8 D_80192E84; +extern u8 D_80192E60; +extern u8 D_80192E3C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801922A0[]; +extern unsigned char D_801922D0[]; +extern unsigned char D_80192320[]; +extern unsigned char D_80192350[]; +extern unsigned char D_80192380[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801923D0[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80192498[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80192520[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80192528; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801E3128; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801E312C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80192558; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80192600[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80192624[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80192614; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80192638[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80192644[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80192654[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8019266C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8019265C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80192680[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8019269C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8019268C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801926B0[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801926C4[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801926D8; +extern void (*D_80192700[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801926E0; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8019274C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80192750[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80192BB4[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80192BC4[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801E3160; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80192BEC[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80192BCC; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80192BDC; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80192C2C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80192C34[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80192C00; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80192C40[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80192C10; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801E3168; +extern s32 D_801E3174; +extern s32 D_801E3178; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80192C7C[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80192C50[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801E3170; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80192ECC[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80192CEC[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80192F70[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_801930C4[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80192EE0; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_801930CC[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80192EF0; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80192F10; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_801930D4[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_801930FC[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80193108[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80192F7C[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_801931AC; +extern void func_8015D380(s32 a0); +extern unsigned char D_80192290[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_801931C0[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_801931FC[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80193244; +extern u16 D_80193246; +extern u16 D_80193248; +extern s32 D_8019324C; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80193254; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80192F60; +extern void func_8015EE7C(s32 param_1); +extern void func_80159B70(void*); +extern void (*D_80192F7C[])(void*); +extern void func_8015EEE0(void* arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_801932D8[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80193388[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_801933B8[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_8019341C; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801E3180[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80193440[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801E31D8[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80193488[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80193478; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801E26F8[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80193490[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_801934E4[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_801934AC; +extern s16 D_801934E0; +extern s16 D_801934DE; +extern s16 D_801934DC; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_801934F0[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801E3238; +extern u8 D_801E3239; +extern u8 D_801E323A; +extern u8 D_801E323B; +extern u8 D_801E323C; +extern u8 D_801E323D; +extern u8 D_801E323E; +extern u8 D_801E323F; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80193500[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801E3278; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80193544[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_801935C0[]; +extern s32 D_801935E0[]; +extern u8 D_8019365C[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_8019367C[]; +extern u8 D_8019369C[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80193738[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_801937B4[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801E2708; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_801937C0[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_801937C8[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80193890[])(void); +extern void func_80166618(void *a0); +extern void (*D_801938A0[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_801938B0[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_801938BC[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_8019381C[]; +extern u8 D_80193830[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_801938D4[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_801938DC[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_801938E4[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_801938EC[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_801938F4[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_801938FC[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80193904[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_801939B8[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_801939C0[])(void); +extern void func_80169F00(void *a0); +extern char D_80193970[]; +extern char D_80193930[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_801939F8[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80193A04[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80193A4C[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80193A0C[]; + extern u8 D_80193A1C[]; + extern u8 D_801E3548[]; + extern u8 D_801E3570[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80193A0C, D_801E3548) + 3; + func_8001CE28(obj, D_801E3548); + } else { + var_s3 = func_80024054(D_80193A1C, D_801E3570) + 9; + func_8001CE28(obj, D_801E3570); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80193AC8[])(void); + +void func_8016B4BC(void *a0) { + D_80193AC8[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801E3598; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801E3598); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80193ABC[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80193ABC; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80193B00[]; +extern unsigned short D_80193B08[]; +extern unsigned short D_80193B10[]; +extern unsigned char D_801E35A0[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801E35A0 + param_2 * 0x40); + puVar3 = D_80193B00[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80193B08[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80193B10[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801E3598; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801E3598, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80193B18[])(void); + +void func_8016BBA4(void *a0) { + D_80193B18[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801E36D4; + extern u8 D_801E36D5; + extern u8 D_801E36D6; + extern M2C_UNK D_801E36D8; + extern u8 D_801E36D9; + extern u8 D_801E36DA; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801E36D4) = 0x20; + D_801E36D5 = 0x20; + D_801E36D6 = 0; + (*(u8 *)&D_801E36D8) = 0xc0; + D_801E36D9 = 0xc0; + D_801E36DA = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801E36D4; +extern M2C_UNK D_801E36D8; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801E36D4, &D_801E36D8, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801E36D5; + extern u8 D_801E36D6; + extern u8 D_801E36D9; + extern u8 D_801E36DA; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801E36D4); + if (*p1 != 0) *p1 -= 4; + if (D_801E36D5 != 0) D_801E36D5 -= 4; + if (D_801E36D6 != 0) D_801E36D6 -= 4; + p2 = &(*(u8 *)&D_801E36D8); + if (*p2 != 0) *p2 -= 4; + if (D_801E36D9 != 0) D_801E36D9 -= 4; + if (D_801E36DA != 0) D_801E36DA -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801E36D4), &(*(int *)&D_801E36D8), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801E3660; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801E3660); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80193B28; + extern s32 D_80193B30; + extern s32 D_80193B38; + extern s32 D_80193B40; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80193B28, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80193B30, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80193B38, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80193B40, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80193B48[])(void); + +void func_8016C14C(void *a0) { + D_80193B48[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801E36DC[]; +extern u8 D_801E36E4[]; +extern u8 D_801E3694[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801E36DC, D_801E36E4, D_801E3694); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801E36F0[]; + extern u8 D_801E37B0; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801E36F0[1] = 0xff; + D_801E36F0[2] = 0x10; + D_801E36F0[0] = 0x10; + D_801E36F0[6] = 0; + D_801E36F0[5] = 0; + D_801E36F0[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801E36F0, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801E37B0, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801E36F0); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8016AB6C", func_8016C998); + + +extern void (*D_80193B50[])(void); + +void func_8016CB84(void *a0) { + D_80193B50[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801E37B0[]; + + + Blk_8016CF04_8016CF04 *p = &D_801E37B0[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80193B6C[])(void); + +void func_8016D19C(void *a0) { + D_80193B6C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80193B74[])(void); + +void func_8016D428(void *a0) { + D_80193B74[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80193BDC[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80193BDC[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80193B80; +extern u8 D_80193B8C; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80193B80, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80193B8C); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80193C10[])(void); + +void func_8016DEA4(void *a0) { + D_80193C10[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80193C18[])(void); + +void func_8016DF20(void *a0) { + D_80193C18[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80193C6C[])(void); + +void func_8016E5B8(void *a0) { + D_80193C6C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80193C2C[4]; + extern s32 D_80193C4C; + extern s32 D_80193C54; + extern s32 D_80193C5C; + extern s32 D_80193C64; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80193C2C[0], pp, &tmp); + RotTransSV(&D_80193C2C[1], &prim.v[1], &tmp); + RotTransSV(&D_80193C2C[2], &prim.v[2], &tmp); + RotTransSV(&D_80193C2C[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80193C4C; + prim.f1 = D_80193C54; + prim.f2 = D_80193C5C; + prim.f3 = D_80193C64; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80193CAC[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80193CAC[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80193CA0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80193CA0[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80193C90[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80193C90[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80193CA0[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80193CA0[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80193CA0[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80193CBC; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80193CBC; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80193D34[])(void); + +void func_8016F6E0(void *a0) { + D_80193D34[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80193D3C[])(void); + +void func_8016F798(void *a0) { + D_80193D3C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80193D44[])(void); + +void func_8016F834(void *a0) { + D_80193D44[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80193D4C[])(void); + +void func_8016F8E4(void *a0) { + D_80193D4C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80193D54[])(void); + +void func_8016F9C4(void *a0) { + D_80193D54[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80193D5C[])(void); + +void func_8016FA84(void *a0) { + D_80193D5C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80193D68[])(void); + +void func_8016FB7C(void *a0) { + D_80193D68[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80193D74[])(void); + +void func_8016FC90(void *a0) { + D_80193D74[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80193D80[])(void); + +void func_8016FDB4(void *a0) { + D_80193D80[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80193D90[])(void); + +void func_8016FF30(void *a0) { + D_80193D90[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80193DA0[])(void); + +void func_8016FFDC(void *a0) { + D_80193DA0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80193DA8[])(void); + +void func_80170150(void *a0) { + D_80193DA8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80193DB0[])(void); + +void func_80170240(void *a0) { + D_80193DB0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80193DB8[])(void); + +void func_801702FC(void *a0) { + D_80193DB8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80193DC0[])(void); + +void func_801703E0(void *a0) { + D_80193DC0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80193DC8[])(void); + +void func_801704B0(void *a0) { + D_80193DC8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80193DD0[])(void); + +void func_80170548(void *a0) { + D_80193DD0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80193DD8[])(void); + +void func_801705F8(void *a0) { + D_80193DD8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80193DE0[])(void); + +void func_801706AC(void *a0) { + D_80193DE0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80193DE8[])(void); + +void func_80170748(void *a0) { + D_80193DE8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80193DF0[])(void); + +void func_80170810(void *a0) { + D_80193DF0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80193DF8[])(void); + +void func_80170AD8(void *a0) { + D_80193DF8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80193E00[])(void); + +void func_80170BD8(void *a0) { + D_80193E00[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80193E08[])(void); + +void func_80170C74(void *a0) { + D_80193E08[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80193E10[])(void); + +void func_80170D68(void *a0) { + D_80193E10[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80193E18[])(void); + +void func_80170E34(void *a0) { + D_80193E18[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80193E20[])(void); + +void func_80170EFC(void *a0) { + D_80193E20[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80193E28[])(void); + +void func_80170FB0(void *a0) { + D_80193E28[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80193E30[])(void); + +void func_80171064(void *a0) { + D_80193E30[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80193E38[])(void); + +void func_80171120(void *a0) { + D_80193E38[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80193E40[])(void); + +void func_801711C0(void *a0) { + D_80193E40[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80193E48[])(void); + +void func_80171260(void *a0) { + D_80193E48[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80193E50[])(void); + +void func_801714E4(void *a0) { + D_80193E50[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8016AB6C", func_80172C50); + + +extern void (*D_80193E94[])(void); + +void func_80172CA0(void *a0) { + D_80193E94[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80193E58; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80193E58); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC02_011/ov_SC02_011_jr_8015AE2C.c b/src/ov_SC02_011/ov_SC02_011_jr_8015AE2C.c index 00632eb7c..7ceeb201e 100644 --- a/src/ov_SC02_011/ov_SC02_011_jr_8015AE2C.c +++ b/src/ov_SC02_011/ov_SC02_011_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_80193E9C[])(void); void func_8016AB30(void *a0) { D_80193E9C[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80193F18[])(void); - -void func_8016B4BC(void *a0) { - D_80193F18[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801EA478; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801EA478); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80193F0C[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80193F0C; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80193F50[]; -extern unsigned short D_80193F58[]; -extern unsigned short D_80193F60[]; -extern unsigned char D_801EA480[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801EA480 + param_2 * 0x40); - puVar3 = D_80193F50[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80193F58[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80193F60[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801EA478; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801EA478, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80193F68[])(void); - -void func_8016BBA4(void *a0) { - D_80193F68[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801EA5B4; - extern u8 D_801EA5B5; - extern u8 D_801EA5B6; - extern M2C_UNK D_801EA5B8; - extern u8 D_801EA5B9; - extern u8 D_801EA5BA; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801EA5B4) = 0x20; - D_801EA5B5 = 0x20; - D_801EA5B6 = 0; - (*(u8 *)&D_801EA5B8) = 0xc0; - D_801EA5B9 = 0xc0; - D_801EA5BA = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801EA5B4; -extern M2C_UNK D_801EA5B8; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801EA5B4, &D_801EA5B8, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801EA5B5; - extern u8 D_801EA5B6; - extern u8 D_801EA5B9; - extern u8 D_801EA5BA; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801EA5B4); - if (*p1 != 0) *p1 -= 4; - if (D_801EA5B5 != 0) D_801EA5B5 -= 4; - if (D_801EA5B6 != 0) D_801EA5B6 -= 4; - p2 = &(*(u8 *)&D_801EA5B8); - if (*p2 != 0) *p2 -= 4; - if (D_801EA5B9 != 0) D_801EA5B9 -= 4; - if (D_801EA5BA != 0) D_801EA5BA -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801EA5B4), &(*(int *)&D_801EA5B8), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801EA540; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801EA540); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80193F78; - extern s32 D_80193F80; - extern s32 D_80193F88; - extern s32 D_80193F90; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80193F78, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80193F80, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80193F88, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80193F90, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80193F98[])(void); - -void func_8016C14C(void *a0) { - D_80193F98[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801EA5BC[]; -extern u8 D_801EA5C4[]; -extern u8 D_801EA574[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801EA5BC, D_801EA5C4, D_801EA574); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801EA5D0[]; - extern u8 D_801EA690; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801EA5D0[1] = 0xff; - D_801EA5D0[2] = 0x10; - D_801EA5D0[0] = 0x10; - D_801EA5D0[6] = 0; - D_801EA5D0[5] = 0; - D_801EA5D0[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801EA5D0, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801EA690, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801EA5D0); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8015AE2C", func_8016C998); - - -extern void (*D_80193FA0[])(void); - -void func_8016CB84(void *a0) { - D_80193FA0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801EA690[]; - - - Blk_8016CF04_8016CF04 *p = &D_801EA690[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80193FBC[])(void); - -void func_8016D19C(void *a0) { - D_80193FBC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80193FC4[])(void); - -void func_8016D428(void *a0) { - D_80193FC4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_8019402C[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_8019402C[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80193FD0; -extern u8 D_80193FDC; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80193FD0, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80193FDC); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80194060[])(void); - -void func_8016DEA4(void *a0) { - D_80194060[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80194068[])(void); - -void func_8016DF20(void *a0) { - D_80194068[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_801940BC[])(void); - -void func_8016E5B8(void *a0) { - D_801940BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_8019407C[4]; - extern s32 D_8019409C; - extern s32 D_801940A4; - extern s32 D_801940AC; - extern s32 D_801940B4; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_8019407C[0], pp, &tmp); - RotTransSV(&D_8019407C[1], &prim.v[1], &tmp); - RotTransSV(&D_8019407C[2], &prim.v[2], &tmp); - RotTransSV(&D_8019407C[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_8019409C; - prim.f1 = D_801940A4; - prim.f2 = D_801940AC; - prim.f3 = D_801940B4; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_801940FC[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_801940FC[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_801940F0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_801940F0[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_801940E0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_801940E0[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801940F0[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_801940F0[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_801940F0[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_8019410C; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_8019410C; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80194184[])(void); - -void func_8016F6E0(void *a0) { - D_80194184[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_8019418C[])(void); - -void func_8016F798(void *a0) { - D_8019418C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80194194[])(void); - -void func_8016F834(void *a0) { - D_80194194[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_8019419C[])(void); - -void func_8016F8E4(void *a0) { - D_8019419C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_801941A4[])(void); - -void func_8016F9C4(void *a0) { - D_801941A4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_801941AC[])(void); - -void func_8016FA84(void *a0) { - D_801941AC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_801941B8[])(void); - -void func_8016FB7C(void *a0) { - D_801941B8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_801941C4[])(void); - -void func_8016FC90(void *a0) { - D_801941C4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_801941D0[])(void); - -void func_8016FDB4(void *a0) { - D_801941D0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_801941E0[])(void); - -void func_8016FF30(void *a0) { - D_801941E0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_801941F0[])(void); - -void func_8016FFDC(void *a0) { - D_801941F0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_801941F8[])(void); - -void func_80170150(void *a0) { - D_801941F8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80194200[])(void); - -void func_80170240(void *a0) { - D_80194200[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80194208[])(void); - -void func_801702FC(void *a0) { - D_80194208[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80194210[])(void); - -void func_801703E0(void *a0) { - D_80194210[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80194218[])(void); - -void func_801704B0(void *a0) { - D_80194218[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80194220[])(void); - -void func_80170548(void *a0) { - D_80194220[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80194228[])(void); - -void func_801705F8(void *a0) { - D_80194228[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80194230[])(void); - -void func_801706AC(void *a0) { - D_80194230[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80194238[])(void); - -void func_80170748(void *a0) { - D_80194238[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80194240[])(void); - -void func_80170810(void *a0) { - D_80194240[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80194248[])(void); - -void func_80170AD8(void *a0) { - D_80194248[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80194250[])(void); - -void func_80170BD8(void *a0) { - D_80194250[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80194258[])(void); - -void func_80170C74(void *a0) { - D_80194258[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80194260[])(void); - -void func_80170D68(void *a0) { - D_80194260[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80194268[])(void); - -void func_80170E34(void *a0) { - D_80194268[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80194270[])(void); - -void func_80170EFC(void *a0) { - D_80194270[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80194278[])(void); - -void func_80170FB0(void *a0) { - D_80194278[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80194280[])(void); - -void func_80171064(void *a0) { - D_80194280[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80194288[])(void); - -void func_80171120(void *a0) { - D_80194288[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80194290[])(void); - -void func_801711C0(void *a0) { - D_80194290[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80194298[])(void); - -void func_80171260(void *a0) { - D_80194298[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_801942A0[])(void); - -void func_801714E4(void *a0) { - D_801942A0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8015AE2C", func_80172C50); - - -extern void (*D_801942E4[])(void); - -void func_80172CA0(void *a0) { - D_801942E4[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_801942A8; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_801942A8); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC02_011/ov_SC02_011_jr_8016AB6C.c b/src/ov_SC02_011/ov_SC02_011_jr_8016AB6C.c new file mode 100644 index 000000000..b622a649d --- /dev/null +++ b/src/ov_SC02_011/ov_SC02_011_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80193268; +extern u8 D_801931D8; +extern u8 D_801931B4; +extern u8 D_80193190; +extern u8 D_80193244; +extern u8 D_80193220; +extern u8 D_801931FC; +extern u8 D_8019316C; +extern void func_80145934(void); +extern u8 D_801932F8; +extern u8 D_801932D4; +extern u8 D_801932B0; +extern u8 D_8019328C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801926F0[]; +extern unsigned char D_80192720[]; +extern unsigned char D_80192770[]; +extern unsigned char D_801927A0[]; +extern unsigned char D_801927D0[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80192820[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801928E8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80192970[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80192978; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801EA008; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801EA00C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801929A8; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80192A50[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80192A74[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80192A64; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80192A88[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80192A94[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80192AA4[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80192ABC[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80192AAC; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80192AD0[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80192AEC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80192ADC; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80192B00[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80192B14[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80192B28; +extern void (*D_80192B50[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80192B30; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80192B9C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80192BA0[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80193004[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80193014[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801EA040; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8019303C[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8019301C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8019302C; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8019307C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80193084[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80193050; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80193090[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80193060; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801EA048; +extern s32 D_801EA054; +extern s32 D_801EA058; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801930CC[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801930A0[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801EA050; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8019331C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8019313C[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_801933C0[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80193514[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80193330; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8019351C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80193340; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80193360; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80193524[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_8019354C[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80193558[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_801933CC[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_801935FC; +extern void func_8015D380(s32 a0); +extern unsigned char D_801926E0[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80193610[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_8019364C[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80193694; +extern u16 D_80193696; +extern u16 D_80193698; +extern s32 D_8019369C; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_801936A4; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_801933B0; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80193728[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_801937D8[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80193808[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_8019386C; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801EA060[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80193890[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801EA0B8[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_801938D8[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_801938C8; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801E9854[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_801938E0[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80193934[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_801938FC; +extern s16 D_80193930; +extern s16 D_8019392E; +extern s16 D_8019392C; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80193940[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801EA118; +extern u8 D_801EA119; +extern u8 D_801EA11A; +extern u8 D_801EA11B; +extern u8 D_801EA11C; +extern u8 D_801EA11D; +extern u8 D_801EA11E; +extern u8 D_801EA11F; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80193950[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801EA158; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80193994[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80193A10[]; +extern s32 D_80193A30[]; +extern u8 D_80193AAC[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80193ACC[]; +extern u8 D_80193AEC[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80193B88[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80193C04[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801E9864; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80193C10[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80193C18[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80193CE0[])(void); +extern void func_80166618(void *a0); +extern void (*D_80193CF0[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80193D00[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80193D0C[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80193C6C[]; +extern u8 D_80193C80[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80193D24[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80193D2C[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80193D34[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80193D3C[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80193D44[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80193D4C[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80193D54[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80193E08[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80193E10[])(void); +extern void func_80169F00(void *a0); +extern char D_80193DC0[]; +extern char D_80193D80[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80193E48[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80193E54[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80193E9C[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80193E5C[]; + extern u8 D_80193E6C[]; + extern u8 D_801EA428[]; + extern u8 D_801EA450[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80193E5C, D_801EA428) + 3; + func_8001CE28(obj, D_801EA428); + } else { + var_s3 = func_80024054(D_80193E6C, D_801EA450) + 9; + func_8001CE28(obj, D_801EA450); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80193F18[])(void); + +void func_8016B4BC(void *a0) { + D_80193F18[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801EA478; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801EA478); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80193F0C[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80193F0C; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80193F50[]; +extern unsigned short D_80193F58[]; +extern unsigned short D_80193F60[]; +extern unsigned char D_801EA480[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801EA480 + param_2 * 0x40); + puVar3 = D_80193F50[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80193F58[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80193F60[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801EA478; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801EA478, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80193F68[])(void); + +void func_8016BBA4(void *a0) { + D_80193F68[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801EA5B4; + extern u8 D_801EA5B5; + extern u8 D_801EA5B6; + extern M2C_UNK D_801EA5B8; + extern u8 D_801EA5B9; + extern u8 D_801EA5BA; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801EA5B4) = 0x20; + D_801EA5B5 = 0x20; + D_801EA5B6 = 0; + (*(u8 *)&D_801EA5B8) = 0xc0; + D_801EA5B9 = 0xc0; + D_801EA5BA = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801EA5B4; +extern M2C_UNK D_801EA5B8; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801EA5B4, &D_801EA5B8, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801EA5B5; + extern u8 D_801EA5B6; + extern u8 D_801EA5B9; + extern u8 D_801EA5BA; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801EA5B4); + if (*p1 != 0) *p1 -= 4; + if (D_801EA5B5 != 0) D_801EA5B5 -= 4; + if (D_801EA5B6 != 0) D_801EA5B6 -= 4; + p2 = &(*(u8 *)&D_801EA5B8); + if (*p2 != 0) *p2 -= 4; + if (D_801EA5B9 != 0) D_801EA5B9 -= 4; + if (D_801EA5BA != 0) D_801EA5BA -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801EA5B4), &(*(int *)&D_801EA5B8), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801EA540; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801EA540); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80193F78; + extern s32 D_80193F80; + extern s32 D_80193F88; + extern s32 D_80193F90; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80193F78, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80193F80, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80193F88, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80193F90, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80193F98[])(void); + +void func_8016C14C(void *a0) { + D_80193F98[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801EA5BC[]; +extern u8 D_801EA5C4[]; +extern u8 D_801EA574[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801EA5BC, D_801EA5C4, D_801EA574); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801EA5D0[]; + extern u8 D_801EA690; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801EA5D0[1] = 0xff; + D_801EA5D0[2] = 0x10; + D_801EA5D0[0] = 0x10; + D_801EA5D0[6] = 0; + D_801EA5D0[5] = 0; + D_801EA5D0[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801EA5D0, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801EA690, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801EA5D0); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8016AB6C", func_8016C998); + + +extern void (*D_80193FA0[])(void); + +void func_8016CB84(void *a0) { + D_80193FA0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801EA690[]; + + + Blk_8016CF04_8016CF04 *p = &D_801EA690[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80193FBC[])(void); + +void func_8016D19C(void *a0) { + D_80193FBC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80193FC4[])(void); + +void func_8016D428(void *a0) { + D_80193FC4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_8019402C[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_8019402C[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80193FD0; +extern u8 D_80193FDC; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80193FD0, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80193FDC); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80194060[])(void); + +void func_8016DEA4(void *a0) { + D_80194060[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80194068[])(void); + +void func_8016DF20(void *a0) { + D_80194068[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_801940BC[])(void); + +void func_8016E5B8(void *a0) { + D_801940BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_8019407C[4]; + extern s32 D_8019409C; + extern s32 D_801940A4; + extern s32 D_801940AC; + extern s32 D_801940B4; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_8019407C[0], pp, &tmp); + RotTransSV(&D_8019407C[1], &prim.v[1], &tmp); + RotTransSV(&D_8019407C[2], &prim.v[2], &tmp); + RotTransSV(&D_8019407C[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_8019409C; + prim.f1 = D_801940A4; + prim.f2 = D_801940AC; + prim.f3 = D_801940B4; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_801940FC[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_801940FC[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_801940F0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_801940F0[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_801940E0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_801940E0[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801940F0[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_801940F0[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_801940F0[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_8019410C; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_8019410C; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80194184[])(void); + +void func_8016F6E0(void *a0) { + D_80194184[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_8019418C[])(void); + +void func_8016F798(void *a0) { + D_8019418C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80194194[])(void); + +void func_8016F834(void *a0) { + D_80194194[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_8019419C[])(void); + +void func_8016F8E4(void *a0) { + D_8019419C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_801941A4[])(void); + +void func_8016F9C4(void *a0) { + D_801941A4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_801941AC[])(void); + +void func_8016FA84(void *a0) { + D_801941AC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_801941B8[])(void); + +void func_8016FB7C(void *a0) { + D_801941B8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_801941C4[])(void); + +void func_8016FC90(void *a0) { + D_801941C4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_801941D0[])(void); + +void func_8016FDB4(void *a0) { + D_801941D0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_801941E0[])(void); + +void func_8016FF30(void *a0) { + D_801941E0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_801941F0[])(void); + +void func_8016FFDC(void *a0) { + D_801941F0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_801941F8[])(void); + +void func_80170150(void *a0) { + D_801941F8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80194200[])(void); + +void func_80170240(void *a0) { + D_80194200[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80194208[])(void); + +void func_801702FC(void *a0) { + D_80194208[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80194210[])(void); + +void func_801703E0(void *a0) { + D_80194210[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80194218[])(void); + +void func_801704B0(void *a0) { + D_80194218[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80194220[])(void); + +void func_80170548(void *a0) { + D_80194220[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80194228[])(void); + +void func_801705F8(void *a0) { + D_80194228[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80194230[])(void); + +void func_801706AC(void *a0) { + D_80194230[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80194238[])(void); + +void func_80170748(void *a0) { + D_80194238[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80194240[])(void); + +void func_80170810(void *a0) { + D_80194240[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80194248[])(void); + +void func_80170AD8(void *a0) { + D_80194248[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80194250[])(void); + +void func_80170BD8(void *a0) { + D_80194250[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80194258[])(void); + +void func_80170C74(void *a0) { + D_80194258[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80194260[])(void); + +void func_80170D68(void *a0) { + D_80194260[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80194268[])(void); + +void func_80170E34(void *a0) { + D_80194268[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80194270[])(void); + +void func_80170EFC(void *a0) { + D_80194270[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80194278[])(void); + +void func_80170FB0(void *a0) { + D_80194278[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80194280[])(void); + +void func_80171064(void *a0) { + D_80194280[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80194288[])(void); + +void func_80171120(void *a0) { + D_80194288[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80194290[])(void); + +void func_801711C0(void *a0) { + D_80194290[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80194298[])(void); + +void func_80171260(void *a0) { + D_80194298[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_801942A0[])(void); + +void func_801714E4(void *a0) { + D_801942A0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8016AB6C", func_80172C50); + + +extern void (*D_801942E4[])(void); + +void func_80172CA0(void *a0) { + D_801942E4[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_801942A8; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_801942A8); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC02_015/ov_SC02_015_jr_8015AE2C.c b/src/ov_SC02_015/ov_SC02_015_jr_8015AE2C.c index 1687a64a6..60a687f2f 100644 --- a/src/ov_SC02_015/ov_SC02_015_jr_8015AE2C.c +++ b/src/ov_SC02_015/ov_SC02_015_jr_8015AE2C.c @@ -5188,1784 +5188,3 @@ extern void (*D_801813B0[])(void); void func_8016AB30(void *a0) { D_801813B0[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_8018142C[])(void); - -void func_8016B4BC(void *a0) { - D_8018142C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_8018F5F8; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_8018F5F8); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80181420[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80181420; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80181464[]; -extern unsigned short D_8018146C[]; -extern unsigned short D_80181474[]; -extern unsigned char D_8018F600[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_8018F600 + param_2 * 0x40); - puVar3 = D_80181464[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_8018146C[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80181474[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_8018F5F8; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_8018F5F8, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_8018147C[])(void); - -void func_8016BBA4(void *a0) { - D_8018147C[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_8018F734; - extern u8 D_8018F735; - extern u8 D_8018F736; - extern M2C_UNK D_8018F738; - extern u8 D_8018F739; - extern u8 D_8018F73A; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_8018F734) = 0x20; - D_8018F735 = 0x20; - D_8018F736 = 0; - (*(u8 *)&D_8018F738) = 0xc0; - D_8018F739 = 0xc0; - D_8018F73A = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_8018F734; -extern M2C_UNK D_8018F738; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_8018F734, &D_8018F738, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_8018F735; - extern u8 D_8018F736; - extern u8 D_8018F739; - extern u8 D_8018F73A; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_8018F734); - if (*p1 != 0) *p1 -= 4; - if (D_8018F735 != 0) D_8018F735 -= 4; - if (D_8018F736 != 0) D_8018F736 -= 4; - p2 = &(*(u8 *)&D_8018F738); - if (*p2 != 0) *p2 -= 4; - if (D_8018F739 != 0) D_8018F739 -= 4; - if (D_8018F73A != 0) D_8018F73A -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_8018F734), &(*(int *)&D_8018F738), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_8018F6C0; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_8018F6C0); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_8018148C; - extern s32 D_80181494; - extern s32 D_8018149C; - extern s32 D_801814A4; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_8018148C, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80181494, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_8018149C, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_801814A4, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_801814AC[])(void); - -void func_8016C14C(void *a0) { - D_801814AC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_8018F73C[]; -extern u8 D_8018F744[]; -extern u8 D_8018F6F4[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_8018F73C, D_8018F744, D_8018F6F4); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_8018F750[]; - extern u8 D_8018F810; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_8018F750[1] = 0xff; - D_8018F750[2] = 0x10; - D_8018F750[0] = 0x10; - D_8018F750[6] = 0; - D_8018F750[5] = 0; - D_8018F750[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_8018F750, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_8018F810, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_8018F750); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8015AE2C", func_8016C998); - - -extern void (*D_801814B4[])(void); - -void func_8016CB84(void *a0) { - D_801814B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_8018F810[]; - - - Blk_8016CF04_8016CF04 *p = &D_8018F810[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_801814D0[])(void); - -void func_8016D19C(void *a0) { - D_801814D0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_801814D8[])(void); - -void func_8016D428(void *a0) { - D_801814D8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80181540[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80181540[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_801814E4; -extern u8 D_801814F0; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801814E4, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801814F0); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80181574[])(void); - -void func_8016DEA4(void *a0) { - D_80181574[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_8018157C[])(void); - -void func_8016DF20(void *a0) { - D_8018157C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_801815D0[])(void); - -void func_8016E5B8(void *a0) { - D_801815D0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80181590[4]; - extern s32 D_801815B0; - extern s32 D_801815B8; - extern s32 D_801815C0; - extern s32 D_801815C8; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80181590[0], pp, &tmp); - RotTransSV(&D_80181590[1], &prim.v[1], &tmp); - RotTransSV(&D_80181590[2], &prim.v[2], &tmp); - RotTransSV(&D_80181590[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_801815B0; - prim.f1 = D_801815B8; - prim.f2 = D_801815C0; - prim.f3 = D_801815C8; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80181610[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80181610[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80181604[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80181604[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_801815F4[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_801815F4[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80181604[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80181604[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80181604[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80181620; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80181620; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80181698[])(void); - -void func_8016F6E0(void *a0) { - D_80181698[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_801816A0[])(void); - -void func_8016F798(void *a0) { - D_801816A0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_801816A8[])(void); - -void func_8016F834(void *a0) { - D_801816A8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_801816B0[])(void); - -void func_8016F8E4(void *a0) { - D_801816B0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_801816B8[])(void); - -void func_8016F9C4(void *a0) { - D_801816B8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_801816C0[])(void); - -void func_8016FA84(void *a0) { - D_801816C0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_801816CC[])(void); - -void func_8016FB7C(void *a0) { - D_801816CC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_801816D8[])(void); - -void func_8016FC90(void *a0) { - D_801816D8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_801816E4[])(void); - -void func_8016FDB4(void *a0) { - D_801816E4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_801816F4[])(void); - -void func_8016FF30(void *a0) { - D_801816F4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80181704[])(void); - -void func_8016FFDC(void *a0) { - D_80181704[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_8018170C[])(void); - -void func_80170150(void *a0) { - D_8018170C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80181714[])(void); - -void func_80170240(void *a0) { - D_80181714[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_8018171C[])(void); - -void func_801702FC(void *a0) { - D_8018171C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80181724[])(void); - -void func_801703E0(void *a0) { - D_80181724[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_8018172C[])(void); - -void func_801704B0(void *a0) { - D_8018172C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80181734[])(void); - -void func_80170548(void *a0) { - D_80181734[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_8018173C[])(void); - -void func_801705F8(void *a0) { - D_8018173C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80181744[])(void); - -void func_801706AC(void *a0) { - D_80181744[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_8018174C[])(void); - -void func_80170748(void *a0) { - D_8018174C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80181754[])(void); - -void func_80170810(void *a0) { - D_80181754[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_8018175C[])(void); - -void func_80170AD8(void *a0) { - D_8018175C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80181764[])(void); - -void func_80170BD8(void *a0) { - D_80181764[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_8018176C[])(void); - -void func_80170C74(void *a0) { - D_8018176C[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80181774[])(void); - -void func_80170D68(void *a0) { - D_80181774[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_8018177C[])(void); - -void func_80170E34(void *a0) { - D_8018177C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80181784[])(void); - -void func_80170EFC(void *a0) { - D_80181784[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_8018178C[])(void); - -void func_80170FB0(void *a0) { - D_8018178C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80181794[])(void); - -void func_80171064(void *a0) { - D_80181794[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_8018179C[])(void); - -void func_80171120(void *a0) { - D_8018179C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_801817A4[])(void); - -void func_801711C0(void *a0) { - D_801817A4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_801817AC[])(void); - -void func_80171260(void *a0) { - D_801817AC[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_801817B4[])(void); - -void func_801714E4(void *a0) { - D_801817B4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8015AE2C", func_80172C50); - - -extern void (*D_801817F8[])(void); - -void func_80172CA0(void *a0) { - D_801817F8[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_801817BC; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_801817BC); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC02_015/ov_SC02_015_jr_8016AB6C.c b/src/ov_SC02_015/ov_SC02_015_jr_8016AB6C.c new file mode 100644 index 000000000..f56152e04 --- /dev/null +++ b/src/ov_SC02_015/ov_SC02_015_jr_8016AB6C.c @@ -0,0 +1,3946 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018077C; +extern u8 D_801806EC; +extern u8 D_801806C8; +extern u8 D_801806A4; +extern u8 D_80180758; +extern u8 D_80180734; +extern u8 D_80180710; +extern u8 D_80180680; +extern void func_80145934(void); +extern u8 D_8018080C; +extern u8 D_801807E8; +extern u8 D_801807C4; +extern u8 D_801807A0; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8017FC04[]; +extern unsigned char D_8017FC34[]; +extern unsigned char D_8017FC84[]; +extern unsigned char D_8017FCB4[]; +extern unsigned char D_8017FCE4[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8017FD34[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8017FDFC[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8017FE84[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8017FE8C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8018F188; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8018F18C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8017FEBC; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8017FF64[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8017FF88[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8017FF78; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8017FF9C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8017FFA8[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8017FFB8[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8017FFD0[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8017FFC0; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8017FFE4[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8017FFF0; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80180014[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80180028[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018003C; +extern void (*D_80180064[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80180044; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801800B0[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801800B4[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80180518[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80180528[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_8018F1C0; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80180550[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80180530; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80180540; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80180590[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80180598[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80180564; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801805A4[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80180574; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_8018F1C8; +extern s32 D_8018F1D4; +extern s32 D_8018F1D8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801805E0[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801805B4[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_8018F1D0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80180830[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80180650[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_801808D4[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80180A28[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80180844; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80180A30[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80180854; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80180874; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80180A38[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80180A60[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80180A6C[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_801808E0[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80180B10; +extern void func_8015D380(s32 a0); +extern unsigned char D_8017FBF4[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80180B24[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80180B60[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80180BA8; +extern u16 D_80180BAA; +extern u16 D_80180BAC; +extern s32 D_80180BB0; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80180BB8; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_801808C4; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80180C3C[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80180CEC[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80180D1C[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80180D80; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_8018F1E0[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80180DA4[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_8018F238[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80180DEC[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80180DDC; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_8018EAAC[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80180DF4[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80180E48[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80180E10; +extern s16 D_80180E44; +extern s16 D_80180E42; +extern s16 D_80180E40; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80180E54[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_8018F298; +extern u8 D_8018F299; +extern u8 D_8018F29A; +extern u8 D_8018F29B; +extern u8 D_8018F29C; +extern u8 D_8018F29D; +extern u8 D_8018F29E; +extern u8 D_8018F29F; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80180E64[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_8018F2D8; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80180EA8[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80180F24[]; +extern s32 D_80180F44[]; +extern u8 D_80180FC0[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80180FE0[]; +extern u8 D_80181000[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_8018109C[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80181118[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_8018EABC; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80181124[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_8018112C[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_801811F4[])(void); +extern void func_80166618(void *a0); +extern void (*D_80181204[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80181214[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80181220[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80181180[]; +extern u8 D_80181194[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80181238[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80181240[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80181248[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80181250[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80181258[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80181260[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80181268[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_8018131C[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80181324[])(void); +extern void func_80169F00(void *a0); +extern char D_801812D4[]; +extern char D_80181294[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_8018135C[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80181368[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_801813B0[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80181370[]; + extern u8 D_80181380[]; + extern u8 D_8018F5A8[]; + extern u8 D_8018F5D0[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80181370, D_8018F5A8) + 3; + func_8001CE28(obj, D_8018F5A8); + } else { + var_s3 = func_80024054(D_80181380, D_8018F5D0) + 9; + func_8001CE28(obj, D_8018F5D0); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_8018142C[])(void); + +void func_8016B4BC(void *a0) { + D_8018142C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_8018F5F8; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_8018F5F8); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80181420[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80181420; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80181464[]; +extern unsigned short D_8018146C[]; +extern unsigned short D_80181474[]; +extern unsigned char D_8018F600[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_8018F600 + param_2 * 0x40); + puVar3 = D_80181464[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_8018146C[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80181474[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_8018F5F8; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_8018F5F8, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_8018147C[])(void); + +void func_8016BBA4(void *a0) { + D_8018147C[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_8018F734; + extern u8 D_8018F735; + extern u8 D_8018F736; + extern M2C_UNK D_8018F738; + extern u8 D_8018F739; + extern u8 D_8018F73A; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_8018F734) = 0x20; + D_8018F735 = 0x20; + D_8018F736 = 0; + (*(u8 *)&D_8018F738) = 0xc0; + D_8018F739 = 0xc0; + D_8018F73A = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_8018F734; +extern M2C_UNK D_8018F738; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_8018F734, &D_8018F738, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_8018F735; + extern u8 D_8018F736; + extern u8 D_8018F739; + extern u8 D_8018F73A; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_8018F734); + if (*p1 != 0) *p1 -= 4; + if (D_8018F735 != 0) D_8018F735 -= 4; + if (D_8018F736 != 0) D_8018F736 -= 4; + p2 = &(*(u8 *)&D_8018F738); + if (*p2 != 0) *p2 -= 4; + if (D_8018F739 != 0) D_8018F739 -= 4; + if (D_8018F73A != 0) D_8018F73A -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_8018F734), &(*(int *)&D_8018F738), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_8018F6C0; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_8018F6C0); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_8018148C; + extern s32 D_80181494; + extern s32 D_8018149C; + extern s32 D_801814A4; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_8018148C, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80181494, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_8018149C, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_801814A4, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_801814AC[])(void); + +void func_8016C14C(void *a0) { + D_801814AC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_8018F73C[]; +extern u8 D_8018F744[]; +extern u8 D_8018F6F4[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_8018F73C, D_8018F744, D_8018F6F4); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_8018F750[]; + extern u8 D_8018F810; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_8018F750[1] = 0xff; + D_8018F750[2] = 0x10; + D_8018F750[0] = 0x10; + D_8018F750[6] = 0; + D_8018F750[5] = 0; + D_8018F750[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_8018F750, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_8018F810, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_8018F750); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8016AB6C", func_8016C998); + + +extern void (*D_801814B4[])(void); + +void func_8016CB84(void *a0) { + D_801814B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_8018F810[]; + + + Blk_8016CF04_8016CF04 *p = &D_8018F810[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_801814D0[])(void); + +void func_8016D19C(void *a0) { + D_801814D0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_801814D8[])(void); + +void func_8016D428(void *a0) { + D_801814D8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80181540[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80181540[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_801814E4; +extern u8 D_801814F0; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801814E4, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801814F0); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80181574[])(void); + +void func_8016DEA4(void *a0) { + D_80181574[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_8018157C[])(void); + +void func_8016DF20(void *a0) { + D_8018157C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_801815D0[])(void); + +void func_8016E5B8(void *a0) { + D_801815D0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80181590[4]; + extern s32 D_801815B0; + extern s32 D_801815B8; + extern s32 D_801815C0; + extern s32 D_801815C8; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80181590[0], pp, &tmp); + RotTransSV(&D_80181590[1], &prim.v[1], &tmp); + RotTransSV(&D_80181590[2], &prim.v[2], &tmp); + RotTransSV(&D_80181590[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_801815B0; + prim.f1 = D_801815B8; + prim.f2 = D_801815C0; + prim.f3 = D_801815C8; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80181610[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80181610[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80181604[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80181604[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_801815F4[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_801815F4[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80181604[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80181604[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80181604[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80181620; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80181620; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80181698[])(void); + +void func_8016F6E0(void *a0) { + D_80181698[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_801816A0[])(void); + +void func_8016F798(void *a0) { + D_801816A0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_801816A8[])(void); + +void func_8016F834(void *a0) { + D_801816A8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_801816B0[])(void); + +void func_8016F8E4(void *a0) { + D_801816B0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_801816B8[])(void); + +void func_8016F9C4(void *a0) { + D_801816B8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_801816C0[])(void); + +void func_8016FA84(void *a0) { + D_801816C0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_801816CC[])(void); + +void func_8016FB7C(void *a0) { + D_801816CC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_801816D8[])(void); + +void func_8016FC90(void *a0) { + D_801816D8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_801816E4[])(void); + +void func_8016FDB4(void *a0) { + D_801816E4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_801816F4[])(void); + +void func_8016FF30(void *a0) { + D_801816F4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80181704[])(void); + +void func_8016FFDC(void *a0) { + D_80181704[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_8018170C[])(void); + +void func_80170150(void *a0) { + D_8018170C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80181714[])(void); + +void func_80170240(void *a0) { + D_80181714[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_8018171C[])(void); + +void func_801702FC(void *a0) { + D_8018171C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80181724[])(void); + +void func_801703E0(void *a0) { + D_80181724[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_8018172C[])(void); + +void func_801704B0(void *a0) { + D_8018172C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80181734[])(void); + +void func_80170548(void *a0) { + D_80181734[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_8018173C[])(void); + +void func_801705F8(void *a0) { + D_8018173C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80181744[])(void); + +void func_801706AC(void *a0) { + D_80181744[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_8018174C[])(void); + +void func_80170748(void *a0) { + D_8018174C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80181754[])(void); + +void func_80170810(void *a0) { + D_80181754[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_8018175C[])(void); + +void func_80170AD8(void *a0) { + D_8018175C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80181764[])(void); + +void func_80170BD8(void *a0) { + D_80181764[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_8018176C[])(void); + +void func_80170C74(void *a0) { + D_8018176C[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80181774[])(void); + +void func_80170D68(void *a0) { + D_80181774[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_8018177C[])(void); + +void func_80170E34(void *a0) { + D_8018177C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80181784[])(void); + +void func_80170EFC(void *a0) { + D_80181784[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_8018178C[])(void); + +void func_80170FB0(void *a0) { + D_8018178C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80181794[])(void); + +void func_80171064(void *a0) { + D_80181794[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_8018179C[])(void); + +void func_80171120(void *a0) { + D_8018179C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_801817A4[])(void); + +void func_801711C0(void *a0) { + D_801817A4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_801817AC[])(void); + +void func_80171260(void *a0) { + D_801817AC[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_801817B4[])(void); + +void func_801714E4(void *a0) { + D_801817B4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8016AB6C", func_80172C50); + + +extern void (*D_801817F8[])(void); + +void func_80172CA0(void *a0) { + D_801817F8[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_801817BC; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_801817BC); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC02_016/ov_SC02_016_jr_8015AE2C.c b/src/ov_SC02_016/ov_SC02_016_jr_8015AE2C.c index 969a5af26..4fa60be4b 100644 --- a/src/ov_SC02_016/ov_SC02_016_jr_8015AE2C.c +++ b/src/ov_SC02_016/ov_SC02_016_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_801875E8[])(void); void func_8016AB30(void *a0) { D_801875E8[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80187664[])(void); - -void func_8016B4BC(void *a0) { - D_80187664[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801B3210; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801B3210); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80187658[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80187658; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_8018769C[]; -extern unsigned short D_801876A4[]; -extern unsigned short D_801876AC[]; -extern unsigned char D_801B3218[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801B3218 + param_2 * 0x40); - puVar3 = D_8018769C[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_801876A4[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_801876AC[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801B3210; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801B3210, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_801876B4[])(void); - -void func_8016BBA4(void *a0) { - D_801876B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801B334C; - extern u8 D_801B334D; - extern u8 D_801B334E; - extern M2C_UNK D_801B3350; - extern u8 D_801B3351; - extern u8 D_801B3352; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801B334C) = 0x20; - D_801B334D = 0x20; - D_801B334E = 0; - (*(u8 *)&D_801B3350) = 0xc0; - D_801B3351 = 0xc0; - D_801B3352 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801B334C; -extern M2C_UNK D_801B3350; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801B334C, &D_801B3350, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801B334D; - extern u8 D_801B334E; - extern u8 D_801B3351; - extern u8 D_801B3352; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801B334C); - if (*p1 != 0) *p1 -= 4; - if (D_801B334D != 0) D_801B334D -= 4; - if (D_801B334E != 0) D_801B334E -= 4; - p2 = &(*(u8 *)&D_801B3350); - if (*p2 != 0) *p2 -= 4; - if (D_801B3351 != 0) D_801B3351 -= 4; - if (D_801B3352 != 0) D_801B3352 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801B334C), &(*(int *)&D_801B3350), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801B32D8; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801B32D8); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_801876C4; - extern s32 D_801876CC; - extern s32 D_801876D4; - extern s32 D_801876DC; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_801876C4, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_801876CC, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_801876D4, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_801876DC, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_801876E4[])(void); - -void func_8016C14C(void *a0) { - D_801876E4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801B3354[]; -extern u8 D_801B335C[]; -extern u8 D_801B330C[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801B3354, D_801B335C, D_801B330C); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801B3368[]; - extern u8 D_801B3428; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801B3368[1] = 0xff; - D_801B3368[2] = 0x10; - D_801B3368[0] = 0x10; - D_801B3368[6] = 0; - D_801B3368[5] = 0; - D_801B3368[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801B3368, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801B3428, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801B3368); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8015AE2C", func_8016C998); - - -extern void (*D_801876EC[])(void); - -void func_8016CB84(void *a0) { - D_801876EC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801B3428[]; - - - Blk_8016CF04_8016CF04 *p = &D_801B3428[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80187708[])(void); - -void func_8016D19C(void *a0) { - D_80187708[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80187710[])(void); - -void func_8016D428(void *a0) { - D_80187710[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80187778[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80187778[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_8018771C; -extern u8 D_80187728; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018771C, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80187728); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8015AE2C", func_8016DC20); - - -extern void (*D_801877AC[])(void); - -void func_8016DEA4(void *a0) { - D_801877AC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_801877B4[])(void); - -void func_8016DF20(void *a0) { - D_801877B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80187808[])(void); - -void func_8016E5B8(void *a0) { - D_80187808[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_801877C8[4]; - extern s32 D_801877E8; - extern s32 D_801877F0; - extern s32 D_801877F8; - extern s32 D_80187800; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_801877C8[0], pp, &tmp); - RotTransSV(&D_801877C8[1], &prim.v[1], &tmp); - RotTransSV(&D_801877C8[2], &prim.v[2], &tmp); - RotTransSV(&D_801877C8[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_801877E8; - prim.f1 = D_801877F0; - prim.f2 = D_801877F8; - prim.f3 = D_80187800; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80187848[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80187848[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_8018783C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_8018783C[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_8018782C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_8018782C[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018783C[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_8018783C[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_8018783C[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80187858; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80187858; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_801878D0[])(void); - -void func_8016F6E0(void *a0) { - D_801878D0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_801878D8[])(void); - -void func_8016F798(void *a0) { - D_801878D8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_801878E0[])(void); - -void func_8016F834(void *a0) { - D_801878E0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_801878E8[])(void); - -void func_8016F8E4(void *a0) { - D_801878E8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_801878F0[])(void); - -void func_8016F9C4(void *a0) { - D_801878F0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_801878F8[])(void); - -void func_8016FA84(void *a0) { - D_801878F8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80187904[])(void); - -void func_8016FB7C(void *a0) { - D_80187904[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80187910[])(void); - -void func_8016FC90(void *a0) { - D_80187910[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_8018791C[])(void); - -void func_8016FDB4(void *a0) { - D_8018791C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_8018792C[])(void); - -void func_8016FF30(void *a0) { - D_8018792C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_8018793C[])(void); - -void func_8016FFDC(void *a0) { - D_8018793C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80187944[])(void); - -void func_80170150(void *a0) { - D_80187944[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_8018794C[])(void); - -void func_80170240(void *a0) { - D_8018794C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80187954[])(void); - -void func_801702FC(void *a0) { - D_80187954[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_8018795C[])(void); - -void func_801703E0(void *a0) { - D_8018795C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80187964[])(void); - -void func_801704B0(void *a0) { - D_80187964[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_8018796C[])(void); - -void func_80170548(void *a0) { - D_8018796C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80187974[])(void); - -void func_801705F8(void *a0) { - D_80187974[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_8018797C[])(void); - -void func_801706AC(void *a0) { - D_8018797C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80187984[])(void); - -void func_80170748(void *a0) { - D_80187984[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_8018798C[])(void); - -void func_80170810(void *a0) { - D_8018798C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80187994[])(void); - -void func_80170AD8(void *a0) { - D_80187994[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_8018799C[])(void); - -void func_80170BD8(void *a0) { - D_8018799C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_801879A4[])(void); - -void func_80170C74(void *a0) { - D_801879A4[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8015AE2C", func_80170CF0); - - -extern void (*D_801879AC[])(void); - -void func_80170D68(void *a0) { - D_801879AC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_801879B4[])(void); - -void func_80170E34(void *a0) { - D_801879B4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_801879BC[])(void); - -void func_80170EFC(void *a0) { - D_801879BC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_801879C4[])(void); - -void func_80170FB0(void *a0) { - D_801879C4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_801879CC[])(void); - -void func_80171064(void *a0) { - D_801879CC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_801879D4[])(void); - -void func_80171120(void *a0) { - D_801879D4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_801879DC[])(void); - -void func_801711C0(void *a0) { - D_801879DC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_801879E4[])(void); - -void func_80171260(void *a0) { - D_801879E4[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_801879EC[])(void); - -void func_801714E4(void *a0) { - D_801879EC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8015AE2C", func_80172C50); - - -extern void (*D_80187A30[])(void); - -void func_80172CA0(void *a0) { - D_80187A30[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_801879F4; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_801879F4); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC02_016/ov_SC02_016_jr_8016AB6C.c b/src/ov_SC02_016/ov_SC02_016_jr_8016AB6C.c new file mode 100644 index 000000000..ace3a3936 --- /dev/null +++ b/src/ov_SC02_016/ov_SC02_016_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801869B4; +extern u8 D_80186924; +extern u8 D_80186900; +extern u8 D_801868DC; +extern u8 D_80186990; +extern u8 D_8018696C; +extern u8 D_80186948; +extern u8 D_801868B8; +extern void func_80145934(void); +extern u8 D_80186A44; +extern u8 D_80186A20; +extern u8 D_801869FC; +extern u8 D_801869D8; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80185E3C[]; +extern unsigned char D_80185E6C[]; +extern unsigned char D_80185EBC[]; +extern unsigned char D_80185EEC[]; +extern unsigned char D_80185F1C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80185F6C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80186034[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801860BC[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801860C4; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801B2DA0; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801B2DA4; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801860F4; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018619C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801861C0[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801861B0; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801861D4[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801861E0[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801861F0[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80186208[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801861F8; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018621C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80186238[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80186228; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018624C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80186260[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80186274; +extern void (*D_8018629C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018627C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801862E8[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801862EC[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80186750[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80186760[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801B2DD8; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80186788[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80186768; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80186778; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801867C8[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801867D0[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018679C; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801867DC[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_801867AC; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801B2DE0; +extern s32 D_801B2DEC; +extern s32 D_801B2DF0; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80186818[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801867EC[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801B2DE8; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80186A68[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80186888[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80186B0C[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80186C60[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80186A7C; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80186C68[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80186A8C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80186AAC; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80186C70[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80186C98[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80186CA4[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80186B18[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80186D48; +extern void func_8015D380(s32 a0); +extern unsigned char D_80185E2C[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80186D5C[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80186D98[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80186DE0; +extern u16 D_80186DE2; +extern u16 D_80186DE4; +extern s32 D_80186DE8; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80186DF0; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80186AFC; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80186E74[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80186F24[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80186F54[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80186FB8; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801B2DF8[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80186FDC[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801B2E50[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80187024[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80187014; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801B268C[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_8018702C[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80187080[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80187048; +extern s16 D_8018707C; +extern s16 D_8018707A; +extern s16 D_80187078; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_8018708C[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801B2EB0; +extern u8 D_801B2EB1; +extern u8 D_801B2EB2; +extern u8 D_801B2EB3; +extern u8 D_801B2EB4; +extern u8 D_801B2EB5; +extern u8 D_801B2EB6; +extern u8 D_801B2EB7; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_8018709C[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801B2EF0; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_801870E0[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_8018715C[]; +extern s32 D_8018717C[]; +extern u8 D_801871F8[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80187218[]; +extern u8 D_80187238[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_801872D4[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80187350[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801B269C; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_8018735C[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80187364[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_8018742C[])(void); +extern void func_80166618(void *a0); +extern void (*D_8018743C[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_8018744C[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80187458[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_801873B8[]; +extern u8 D_801873CC[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80187470[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80187478[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80187480[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80187488[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80187490[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80187498[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_801874A0[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80187554[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_8018755C[])(void); +extern void func_80169F00(void *a0); +extern char D_8018750C[]; +extern char D_801874CC[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80187594[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_801875A0[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_801875E8[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_801875A8[]; + extern u8 D_801875B8[]; + extern u8 D_801B31C0[]; + extern u8 D_801B31E8[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_801875A8, D_801B31C0) + 3; + func_8001CE28(obj, D_801B31C0); + } else { + var_s3 = func_80024054(D_801875B8, D_801B31E8) + 9; + func_8001CE28(obj, D_801B31E8); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80187664[])(void); + +void func_8016B4BC(void *a0) { + D_80187664[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801B3210; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801B3210); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80187658[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80187658; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_8018769C[]; +extern unsigned short D_801876A4[]; +extern unsigned short D_801876AC[]; +extern unsigned char D_801B3218[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801B3218 + param_2 * 0x40); + puVar3 = D_8018769C[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_801876A4[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_801876AC[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801B3210; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801B3210, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_801876B4[])(void); + +void func_8016BBA4(void *a0) { + D_801876B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801B334C; + extern u8 D_801B334D; + extern u8 D_801B334E; + extern M2C_UNK D_801B3350; + extern u8 D_801B3351; + extern u8 D_801B3352; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801B334C) = 0x20; + D_801B334D = 0x20; + D_801B334E = 0; + (*(u8 *)&D_801B3350) = 0xc0; + D_801B3351 = 0xc0; + D_801B3352 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801B334C; +extern M2C_UNK D_801B3350; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801B334C, &D_801B3350, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801B334D; + extern u8 D_801B334E; + extern u8 D_801B3351; + extern u8 D_801B3352; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801B334C); + if (*p1 != 0) *p1 -= 4; + if (D_801B334D != 0) D_801B334D -= 4; + if (D_801B334E != 0) D_801B334E -= 4; + p2 = &(*(u8 *)&D_801B3350); + if (*p2 != 0) *p2 -= 4; + if (D_801B3351 != 0) D_801B3351 -= 4; + if (D_801B3352 != 0) D_801B3352 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801B334C), &(*(int *)&D_801B3350), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801B32D8; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801B32D8); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_801876C4; + extern s32 D_801876CC; + extern s32 D_801876D4; + extern s32 D_801876DC; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_801876C4, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_801876CC, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_801876D4, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_801876DC, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_801876E4[])(void); + +void func_8016C14C(void *a0) { + D_801876E4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801B3354[]; +extern u8 D_801B335C[]; +extern u8 D_801B330C[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801B3354, D_801B335C, D_801B330C); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801B3368[]; + extern u8 D_801B3428; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801B3368[1] = 0xff; + D_801B3368[2] = 0x10; + D_801B3368[0] = 0x10; + D_801B3368[6] = 0; + D_801B3368[5] = 0; + D_801B3368[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801B3368, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801B3428, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801B3368); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8016AB6C", func_8016C998); + + +extern void (*D_801876EC[])(void); + +void func_8016CB84(void *a0) { + D_801876EC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801B3428[]; + + + Blk_8016CF04_8016CF04 *p = &D_801B3428[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80187708[])(void); + +void func_8016D19C(void *a0) { + D_80187708[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80187710[])(void); + +void func_8016D428(void *a0) { + D_80187710[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80187778[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80187778[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_8018771C; +extern u8 D_80187728; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018771C, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80187728); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8016AB6C", func_8016DC20); + + +extern void (*D_801877AC[])(void); + +void func_8016DEA4(void *a0) { + D_801877AC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_801877B4[])(void); + +void func_8016DF20(void *a0) { + D_801877B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80187808[])(void); + +void func_8016E5B8(void *a0) { + D_80187808[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_801877C8[4]; + extern s32 D_801877E8; + extern s32 D_801877F0; + extern s32 D_801877F8; + extern s32 D_80187800; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_801877C8[0], pp, &tmp); + RotTransSV(&D_801877C8[1], &prim.v[1], &tmp); + RotTransSV(&D_801877C8[2], &prim.v[2], &tmp); + RotTransSV(&D_801877C8[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_801877E8; + prim.f1 = D_801877F0; + prim.f2 = D_801877F8; + prim.f3 = D_80187800; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80187848[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80187848[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_8018783C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_8018783C[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_8018782C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_8018782C[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018783C[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_8018783C[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_8018783C[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80187858; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80187858; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_801878D0[])(void); + +void func_8016F6E0(void *a0) { + D_801878D0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_801878D8[])(void); + +void func_8016F798(void *a0) { + D_801878D8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_801878E0[])(void); + +void func_8016F834(void *a0) { + D_801878E0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_801878E8[])(void); + +void func_8016F8E4(void *a0) { + D_801878E8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_801878F0[])(void); + +void func_8016F9C4(void *a0) { + D_801878F0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_801878F8[])(void); + +void func_8016FA84(void *a0) { + D_801878F8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80187904[])(void); + +void func_8016FB7C(void *a0) { + D_80187904[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80187910[])(void); + +void func_8016FC90(void *a0) { + D_80187910[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_8018791C[])(void); + +void func_8016FDB4(void *a0) { + D_8018791C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_8018792C[])(void); + +void func_8016FF30(void *a0) { + D_8018792C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_8018793C[])(void); + +void func_8016FFDC(void *a0) { + D_8018793C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80187944[])(void); + +void func_80170150(void *a0) { + D_80187944[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_8018794C[])(void); + +void func_80170240(void *a0) { + D_8018794C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80187954[])(void); + +void func_801702FC(void *a0) { + D_80187954[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_8018795C[])(void); + +void func_801703E0(void *a0) { + D_8018795C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80187964[])(void); + +void func_801704B0(void *a0) { + D_80187964[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_8018796C[])(void); + +void func_80170548(void *a0) { + D_8018796C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80187974[])(void); + +void func_801705F8(void *a0) { + D_80187974[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_8018797C[])(void); + +void func_801706AC(void *a0) { + D_8018797C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80187984[])(void); + +void func_80170748(void *a0) { + D_80187984[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_8018798C[])(void); + +void func_80170810(void *a0) { + D_8018798C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80187994[])(void); + +void func_80170AD8(void *a0) { + D_80187994[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_8018799C[])(void); + +void func_80170BD8(void *a0) { + D_8018799C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_801879A4[])(void); + +void func_80170C74(void *a0) { + D_801879A4[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8016AB6C", func_80170CF0); + + +extern void (*D_801879AC[])(void); + +void func_80170D68(void *a0) { + D_801879AC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_801879B4[])(void); + +void func_80170E34(void *a0) { + D_801879B4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_801879BC[])(void); + +void func_80170EFC(void *a0) { + D_801879BC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_801879C4[])(void); + +void func_80170FB0(void *a0) { + D_801879C4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_801879CC[])(void); + +void func_80171064(void *a0) { + D_801879CC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_801879D4[])(void); + +void func_80171120(void *a0) { + D_801879D4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_801879DC[])(void); + +void func_801711C0(void *a0) { + D_801879DC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_801879E4[])(void); + +void func_80171260(void *a0) { + D_801879E4[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_801879EC[])(void); + +void func_801714E4(void *a0) { + D_801879EC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8016AB6C", func_80172C50); + + +extern void (*D_80187A30[])(void); + +void func_80172CA0(void *a0) { + D_80187A30[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_801879F4; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_801879F4); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC02_017/ov_SC02_017_jr_8015AE2C.c b/src/ov_SC02_017/ov_SC02_017_jr_8015AE2C.c index 20eb9267b..c3ba50b50 100644 --- a/src/ov_SC02_017/ov_SC02_017_jr_8015AE2C.c +++ b/src/ov_SC02_017/ov_SC02_017_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_8018D640[])(void); void func_8016AB30(void *a0) { D_8018D640[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_8018D6BC[])(void); - -void func_8016B4BC(void *a0) { - D_8018D6BC[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801EEA38; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801EEA38); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_8018D6B0[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_8018D6B0; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_8018D6F4[]; -extern unsigned short D_8018D6FC[]; -extern unsigned short D_8018D704[]; -extern unsigned char D_801EEA40[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801EEA40 + param_2 * 0x40); - puVar3 = D_8018D6F4[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_8018D6FC[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_8018D704[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801EEA38; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801EEA38, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_8018D70C[])(void); - -void func_8016BBA4(void *a0) { - D_8018D70C[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801EEB74; - extern u8 D_801EEB75; - extern u8 D_801EEB76; - extern M2C_UNK D_801EEB78; - extern u8 D_801EEB79; - extern u8 D_801EEB7A; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801EEB74) = 0x20; - D_801EEB75 = 0x20; - D_801EEB76 = 0; - (*(u8 *)&D_801EEB78) = 0xc0; - D_801EEB79 = 0xc0; - D_801EEB7A = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801EEB74; -extern M2C_UNK D_801EEB78; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801EEB74, &D_801EEB78, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801EEB75; - extern u8 D_801EEB76; - extern u8 D_801EEB79; - extern u8 D_801EEB7A; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801EEB74); - if (*p1 != 0) *p1 -= 4; - if (D_801EEB75 != 0) D_801EEB75 -= 4; - if (D_801EEB76 != 0) D_801EEB76 -= 4; - p2 = &(*(u8 *)&D_801EEB78); - if (*p2 != 0) *p2 -= 4; - if (D_801EEB79 != 0) D_801EEB79 -= 4; - if (D_801EEB7A != 0) D_801EEB7A -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801EEB74), &(*(int *)&D_801EEB78), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801EEB00; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801EEB00); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_8018D71C; - extern s32 D_8018D724; - extern s32 D_8018D72C; - extern s32 D_8018D734; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_8018D71C, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_8018D724, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_8018D72C, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_8018D734, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_8018D73C[])(void); - -void func_8016C14C(void *a0) { - D_8018D73C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801EEB7C[]; -extern u8 D_801EEB84[]; -extern u8 D_801EEB34[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801EEB7C, D_801EEB84, D_801EEB34); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801EEB90[]; - extern u8 D_801EEC50; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801EEB90[1] = 0xff; - D_801EEB90[2] = 0x10; - D_801EEB90[0] = 0x10; - D_801EEB90[6] = 0; - D_801EEB90[5] = 0; - D_801EEB90[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801EEB90, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801EEC50, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801EEB90); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8015AE2C", func_8016C998); - - -extern void (*D_8018D744[])(void); - -void func_8016CB84(void *a0) { - D_8018D744[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801EEC50[]; - - - Blk_8016CF04_8016CF04 *p = &D_801EEC50[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_8018D760[])(void); - -void func_8016D19C(void *a0) { - D_8018D760[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_8018D768[])(void); - -void func_8016D428(void *a0) { - D_8018D768[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_8018D7D0[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_8018D7D0[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_8018D774; -extern u8 D_8018D780; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018D774, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018D780); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8015AE2C", func_8016DC20); - - -extern void (*D_8018D804[])(void); - -void func_8016DEA4(void *a0) { - D_8018D804[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_8018D80C[])(void); - -void func_8016DF20(void *a0) { - D_8018D80C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_8018D860[])(void); - -void func_8016E5B8(void *a0) { - D_8018D860[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_8018D820[4]; - extern s32 D_8018D840; - extern s32 D_8018D848; - extern s32 D_8018D850; - extern s32 D_8018D858; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_8018D820[0], pp, &tmp); - RotTransSV(&D_8018D820[1], &prim.v[1], &tmp); - RotTransSV(&D_8018D820[2], &prim.v[2], &tmp); - RotTransSV(&D_8018D820[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_8018D840; - prim.f1 = D_8018D848; - prim.f2 = D_8018D850; - prim.f3 = D_8018D858; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_8018D8A0[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_8018D8A0[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_8018D894[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_8018D894[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_8018D884[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_8018D884[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018D894[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_8018D894[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_8018D894[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_8018D8B0; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_8018D8B0; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_8018D928[])(void); - -void func_8016F6E0(void *a0) { - D_8018D928[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_8018D930[])(void); - -void func_8016F798(void *a0) { - D_8018D930[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_8018D938[])(void); - -void func_8016F834(void *a0) { - D_8018D938[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_8018D940[])(void); - -void func_8016F8E4(void *a0) { - D_8018D940[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_8018D948[])(void); - -void func_8016F9C4(void *a0) { - D_8018D948[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_8018D950[])(void); - -void func_8016FA84(void *a0) { - D_8018D950[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_8018D95C[])(void); - -void func_8016FB7C(void *a0) { - D_8018D95C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_8018D968[])(void); - -void func_8016FC90(void *a0) { - D_8018D968[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_8018D974[])(void); - -void func_8016FDB4(void *a0) { - D_8018D974[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_8018D984[])(void); - -void func_8016FF30(void *a0) { - D_8018D984[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_8018D994[])(void); - -void func_8016FFDC(void *a0) { - D_8018D994[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_8018D99C[])(void); - -void func_80170150(void *a0) { - D_8018D99C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_8018D9A4[])(void); - -void func_80170240(void *a0) { - D_8018D9A4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_8018D9AC[])(void); - -void func_801702FC(void *a0) { - D_8018D9AC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_8018D9B4[])(void); - -void func_801703E0(void *a0) { - D_8018D9B4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_8018D9BC[])(void); - -void func_801704B0(void *a0) { - D_8018D9BC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_8018D9C4[])(void); - -void func_80170548(void *a0) { - D_8018D9C4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_8018D9CC[])(void); - -void func_801705F8(void *a0) { - D_8018D9CC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_8018D9D4[])(void); - -void func_801706AC(void *a0) { - D_8018D9D4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_8018D9DC[])(void); - -void func_80170748(void *a0) { - D_8018D9DC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_8018D9E4[])(void); - -void func_80170810(void *a0) { - D_8018D9E4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_8018D9EC[])(void); - -void func_80170AD8(void *a0) { - D_8018D9EC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_8018D9F4[])(void); - -void func_80170BD8(void *a0) { - D_8018D9F4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_8018D9FC[])(void); - -void func_80170C74(void *a0) { - D_8018D9FC[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8015AE2C", func_80170CF0); - - -extern void (*D_8018DA04[])(void); - -void func_80170D68(void *a0) { - D_8018DA04[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_8018DA0C[])(void); - -void func_80170E34(void *a0) { - D_8018DA0C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_8018DA14[])(void); - -void func_80170EFC(void *a0) { - D_8018DA14[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_8018DA1C[])(void); - -void func_80170FB0(void *a0) { - D_8018DA1C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_8018DA24[])(void); - -void func_80171064(void *a0) { - D_8018DA24[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_8018DA2C[])(void); - -void func_80171120(void *a0) { - D_8018DA2C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_8018DA34[])(void); - -void func_801711C0(void *a0) { - D_8018DA34[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_8018DA3C[])(void); - -void func_80171260(void *a0) { - D_8018DA3C[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_8018DA44[])(void); - -void func_801714E4(void *a0) { - D_8018DA44[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8015AE2C", func_80172C50); - - -extern void (*D_8018DA88[])(void); - -void func_80172CA0(void *a0) { - D_8018DA88[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_8018DA4C; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_8018DA4C); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC02_017/ov_SC02_017_jr_8016AB6C.c b/src/ov_SC02_017/ov_SC02_017_jr_8016AB6C.c new file mode 100644 index 000000000..22b10035e --- /dev/null +++ b/src/ov_SC02_017/ov_SC02_017_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018CA0C; +extern u8 D_8018C97C; +extern u8 D_8018C958; +extern u8 D_8018C934; +extern u8 D_8018C9E8; +extern u8 D_8018C9C4; +extern u8 D_8018C9A0; +extern u8 D_8018C910; +extern void func_80145934(void); +extern u8 D_8018CA9C; +extern u8 D_8018CA78; +extern u8 D_8018CA54; +extern u8 D_8018CA30; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018BE94[]; +extern unsigned char D_8018BEC4[]; +extern unsigned char D_8018BF14[]; +extern unsigned char D_8018BF44[]; +extern unsigned char D_8018BF74[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018BFC4[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018C08C[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018C114[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018C11C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801EE5C8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801EE5CC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018C14C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018C1F4[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018C218[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018C208; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018C22C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018C238[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018C248[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018C260[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018C250; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018C274[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018C290[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018C280; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018C2A4[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018C2B8[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018C2CC; +extern void (*D_8018C2F4[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018C2D4; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018C340[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018C344[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018C7A8[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018C7B8[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801EE600; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018C7E0[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018C7C0; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018C7D0; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018C820[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018C828[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018C7F4; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018C834[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018C804; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801EE608; +extern s32 D_801EE614; +extern s32 D_801EE618; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018C870[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018C844[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801EE610; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018CAC0[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018C8E0[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018CB64[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018CCB8[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018CAD4; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018CCC0[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018CAE4; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018CB04; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_8018CCC8[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_8018CCF0[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_8018CCFC[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_8018CB70[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_8018CDA0; +extern void func_8015D380(s32 a0); +extern unsigned char D_8018BE84[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_8018CDB4[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_8018CDF0[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_8018CE38; +extern u16 D_8018CE3A; +extern u16 D_8018CE3C; +extern s32 D_8018CE40; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_8018CE48; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_8018CB54; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_8018CECC[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_8018CF7C[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_8018CFAC[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_8018D010; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801EE620[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_8018D034[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801EE678[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_8018D07C[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_8018D06C; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801EDEAC[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_8018D084[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_8018D0D8[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_8018D0A0; +extern s16 D_8018D0D4; +extern s16 D_8018D0D2; +extern s16 D_8018D0D0; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_8018D0E4[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801EE6D8; +extern u8 D_801EE6D9; +extern u8 D_801EE6DA; +extern u8 D_801EE6DB; +extern u8 D_801EE6DC; +extern u8 D_801EE6DD; +extern u8 D_801EE6DE; +extern u8 D_801EE6DF; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_8018D0F4[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801EE718; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_8018D138[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_8018D1B4[]; +extern s32 D_8018D1D4[]; +extern u8 D_8018D250[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_8018D270[]; +extern u8 D_8018D290[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_8018D32C[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_8018D3A8[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801EDEBC; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_8018D3B4[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_8018D3BC[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_8018D484[])(void); +extern void func_80166618(void *a0); +extern void (*D_8018D494[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_8018D4A4[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_8018D4B0[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_8018D410[]; +extern u8 D_8018D424[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_8018D4C8[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_8018D4D0[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_8018D4D8[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_8018D4E0[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_8018D4E8[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_8018D4F0[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_8018D4F8[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_8018D5AC[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_8018D5B4[])(void); +extern void func_80169F00(void *a0); +extern char D_8018D564[]; +extern char D_8018D524[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_8018D5EC[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_8018D5F8[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_8018D640[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_8018D600[]; + extern u8 D_8018D610[]; + extern u8 D_801EE9E8[]; + extern u8 D_801EEA10[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_8018D600, D_801EE9E8) + 3; + func_8001CE28(obj, D_801EE9E8); + } else { + var_s3 = func_80024054(D_8018D610, D_801EEA10) + 9; + func_8001CE28(obj, D_801EEA10); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_8018D6BC[])(void); + +void func_8016B4BC(void *a0) { + D_8018D6BC[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801EEA38; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801EEA38); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_8018D6B0[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_8018D6B0; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_8018D6F4[]; +extern unsigned short D_8018D6FC[]; +extern unsigned short D_8018D704[]; +extern unsigned char D_801EEA40[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801EEA40 + param_2 * 0x40); + puVar3 = D_8018D6F4[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_8018D6FC[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_8018D704[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801EEA38; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801EEA38, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_8018D70C[])(void); + +void func_8016BBA4(void *a0) { + D_8018D70C[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801EEB74; + extern u8 D_801EEB75; + extern u8 D_801EEB76; + extern M2C_UNK D_801EEB78; + extern u8 D_801EEB79; + extern u8 D_801EEB7A; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801EEB74) = 0x20; + D_801EEB75 = 0x20; + D_801EEB76 = 0; + (*(u8 *)&D_801EEB78) = 0xc0; + D_801EEB79 = 0xc0; + D_801EEB7A = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801EEB74; +extern M2C_UNK D_801EEB78; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801EEB74, &D_801EEB78, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801EEB75; + extern u8 D_801EEB76; + extern u8 D_801EEB79; + extern u8 D_801EEB7A; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801EEB74); + if (*p1 != 0) *p1 -= 4; + if (D_801EEB75 != 0) D_801EEB75 -= 4; + if (D_801EEB76 != 0) D_801EEB76 -= 4; + p2 = &(*(u8 *)&D_801EEB78); + if (*p2 != 0) *p2 -= 4; + if (D_801EEB79 != 0) D_801EEB79 -= 4; + if (D_801EEB7A != 0) D_801EEB7A -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801EEB74), &(*(int *)&D_801EEB78), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801EEB00; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801EEB00); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_8018D71C; + extern s32 D_8018D724; + extern s32 D_8018D72C; + extern s32 D_8018D734; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_8018D71C, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_8018D724, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_8018D72C, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_8018D734, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_8018D73C[])(void); + +void func_8016C14C(void *a0) { + D_8018D73C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801EEB7C[]; +extern u8 D_801EEB84[]; +extern u8 D_801EEB34[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801EEB7C, D_801EEB84, D_801EEB34); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801EEB90[]; + extern u8 D_801EEC50; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801EEB90[1] = 0xff; + D_801EEB90[2] = 0x10; + D_801EEB90[0] = 0x10; + D_801EEB90[6] = 0; + D_801EEB90[5] = 0; + D_801EEB90[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801EEB90, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801EEC50, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801EEB90); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8016AB6C", func_8016C998); + + +extern void (*D_8018D744[])(void); + +void func_8016CB84(void *a0) { + D_8018D744[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801EEC50[]; + + + Blk_8016CF04_8016CF04 *p = &D_801EEC50[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_8018D760[])(void); + +void func_8016D19C(void *a0) { + D_8018D760[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_8018D768[])(void); + +void func_8016D428(void *a0) { + D_8018D768[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018D7D0[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_8018D7D0[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_8018D774; +extern u8 D_8018D780; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018D774, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018D780); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8016AB6C", func_8016DC20); + + +extern void (*D_8018D804[])(void); + +void func_8016DEA4(void *a0) { + D_8018D804[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_8018D80C[])(void); + +void func_8016DF20(void *a0) { + D_8018D80C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_8018D860[])(void); + +void func_8016E5B8(void *a0) { + D_8018D860[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_8018D820[4]; + extern s32 D_8018D840; + extern s32 D_8018D848; + extern s32 D_8018D850; + extern s32 D_8018D858; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_8018D820[0], pp, &tmp); + RotTransSV(&D_8018D820[1], &prim.v[1], &tmp); + RotTransSV(&D_8018D820[2], &prim.v[2], &tmp); + RotTransSV(&D_8018D820[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_8018D840; + prim.f1 = D_8018D848; + prim.f2 = D_8018D850; + prim.f3 = D_8018D858; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_8018D8A0[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_8018D8A0[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_8018D894[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_8018D894[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_8018D884[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_8018D884[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018D894[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_8018D894[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_8018D894[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_8018D8B0; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_8018D8B0; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_8018D928[])(void); + +void func_8016F6E0(void *a0) { + D_8018D928[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_8018D930[])(void); + +void func_8016F798(void *a0) { + D_8018D930[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_8018D938[])(void); + +void func_8016F834(void *a0) { + D_8018D938[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_8018D940[])(void); + +void func_8016F8E4(void *a0) { + D_8018D940[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_8018D948[])(void); + +void func_8016F9C4(void *a0) { + D_8018D948[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_8018D950[])(void); + +void func_8016FA84(void *a0) { + D_8018D950[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_8018D95C[])(void); + +void func_8016FB7C(void *a0) { + D_8018D95C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_8018D968[])(void); + +void func_8016FC90(void *a0) { + D_8018D968[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_8018D974[])(void); + +void func_8016FDB4(void *a0) { + D_8018D974[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_8018D984[])(void); + +void func_8016FF30(void *a0) { + D_8018D984[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_8018D994[])(void); + +void func_8016FFDC(void *a0) { + D_8018D994[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_8018D99C[])(void); + +void func_80170150(void *a0) { + D_8018D99C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_8018D9A4[])(void); + +void func_80170240(void *a0) { + D_8018D9A4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_8018D9AC[])(void); + +void func_801702FC(void *a0) { + D_8018D9AC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_8018D9B4[])(void); + +void func_801703E0(void *a0) { + D_8018D9B4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_8018D9BC[])(void); + +void func_801704B0(void *a0) { + D_8018D9BC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_8018D9C4[])(void); + +void func_80170548(void *a0) { + D_8018D9C4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_8018D9CC[])(void); + +void func_801705F8(void *a0) { + D_8018D9CC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_8018D9D4[])(void); + +void func_801706AC(void *a0) { + D_8018D9D4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_8018D9DC[])(void); + +void func_80170748(void *a0) { + D_8018D9DC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_8018D9E4[])(void); + +void func_80170810(void *a0) { + D_8018D9E4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_8018D9EC[])(void); + +void func_80170AD8(void *a0) { + D_8018D9EC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_8018D9F4[])(void); + +void func_80170BD8(void *a0) { + D_8018D9F4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_8018D9FC[])(void); + +void func_80170C74(void *a0) { + D_8018D9FC[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8016AB6C", func_80170CF0); + + +extern void (*D_8018DA04[])(void); + +void func_80170D68(void *a0) { + D_8018DA04[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_8018DA0C[])(void); + +void func_80170E34(void *a0) { + D_8018DA0C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_8018DA14[])(void); + +void func_80170EFC(void *a0) { + D_8018DA14[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_8018DA1C[])(void); + +void func_80170FB0(void *a0) { + D_8018DA1C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_8018DA24[])(void); + +void func_80171064(void *a0) { + D_8018DA24[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_8018DA2C[])(void); + +void func_80171120(void *a0) { + D_8018DA2C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_8018DA34[])(void); + +void func_801711C0(void *a0) { + D_8018DA34[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_8018DA3C[])(void); + +void func_80171260(void *a0) { + D_8018DA3C[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_8018DA44[])(void); + +void func_801714E4(void *a0) { + D_8018DA44[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8016AB6C", func_80172C50); + + +extern void (*D_8018DA88[])(void); + +void func_80172CA0(void *a0) { + D_8018DA88[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_8018DA4C; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_8018DA4C); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC02_021/ov_SC02_021_jr_8015AE2C.c b/src/ov_SC02_021/ov_SC02_021_jr_8015AE2C.c index 6ebf01b18..d68509c66 100644 --- a/src/ov_SC02_021/ov_SC02_021_jr_8015AE2C.c +++ b/src/ov_SC02_021/ov_SC02_021_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_80182C34[])(void); void func_8016AB30(void *a0) { D_80182C34[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80182CB0[])(void); - -void func_8016B4BC(void *a0) { - D_80182CB0[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_80191FA8; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_80191FA8); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80182CA4[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80182CA4; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80182CE8[]; -extern unsigned short D_80182CF0[]; -extern unsigned short D_80182CF8[]; -extern unsigned char D_80191FB0[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_80191FB0 + param_2 * 0x40); - puVar3 = D_80182CE8[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80182CF0[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80182CF8[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_80191FA8; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_80191FA8, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80182D00[])(void); - -void func_8016BBA4(void *a0) { - D_80182D00[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801920E4; - extern u8 D_801920E5; - extern u8 D_801920E6; - extern M2C_UNK D_801920E8; - extern u8 D_801920E9; - extern u8 D_801920EA; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801920E4) = 0x20; - D_801920E5 = 0x20; - D_801920E6 = 0; - (*(u8 *)&D_801920E8) = 0xc0; - D_801920E9 = 0xc0; - D_801920EA = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801920E4; -extern M2C_UNK D_801920E8; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801920E4, &D_801920E8, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801920E5; - extern u8 D_801920E6; - extern u8 D_801920E9; - extern u8 D_801920EA; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801920E4); - if (*p1 != 0) *p1 -= 4; - if (D_801920E5 != 0) D_801920E5 -= 4; - if (D_801920E6 != 0) D_801920E6 -= 4; - p2 = &(*(u8 *)&D_801920E8); - if (*p2 != 0) *p2 -= 4; - if (D_801920E9 != 0) D_801920E9 -= 4; - if (D_801920EA != 0) D_801920EA -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801920E4), &(*(int *)&D_801920E8), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_80192070; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_80192070); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80182D10; - extern s32 D_80182D18; - extern s32 D_80182D20; - extern s32 D_80182D28; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80182D10, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80182D18, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80182D20, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80182D28, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80182D30[])(void); - -void func_8016C14C(void *a0) { - D_80182D30[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801920EC[]; -extern u8 D_801920F4[]; -extern u8 D_801920A4[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801920EC, D_801920F4, D_801920A4); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_80192100[]; - extern u8 D_801921C0; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_80192100[1] = 0xff; - D_80192100[2] = 0x10; - D_80192100[0] = 0x10; - D_80192100[6] = 0; - D_80192100[5] = 0; - D_80192100[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_80192100, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801921C0, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_80192100); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8015AE2C", func_8016C998); - - -extern void (*D_80182D38[])(void); - -void func_8016CB84(void *a0) { - D_80182D38[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801921C0[]; - - - Blk_8016CF04_8016CF04 *p = &D_801921C0[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80182D54[])(void); - -void func_8016D19C(void *a0) { - D_80182D54[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80182D5C[])(void); - -void func_8016D428(void *a0) { - D_80182D5C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80182DC4[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80182DC4[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80182D68; -extern u8 D_80182D74; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80182D68, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80182D74); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80182DF8[])(void); - -void func_8016DEA4(void *a0) { - D_80182DF8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80182E00[])(void); - -void func_8016DF20(void *a0) { - D_80182E00[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80182E54[])(void); - -void func_8016E5B8(void *a0) { - D_80182E54[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80182E14[4]; - extern s32 D_80182E34; - extern s32 D_80182E3C; - extern s32 D_80182E44; - extern s32 D_80182E4C; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80182E14[0], pp, &tmp); - RotTransSV(&D_80182E14[1], &prim.v[1], &tmp); - RotTransSV(&D_80182E14[2], &prim.v[2], &tmp); - RotTransSV(&D_80182E14[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80182E34; - prim.f1 = D_80182E3C; - prim.f2 = D_80182E44; - prim.f3 = D_80182E4C; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80182E94[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80182E94[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80182E88[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80182E88[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80182E78[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80182E78[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80182E88[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80182E88[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80182E88[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80182EA4; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80182EA4; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80182F1C[])(void); - -void func_8016F6E0(void *a0) { - D_80182F1C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80182F24[])(void); - -void func_8016F798(void *a0) { - D_80182F24[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80182F2C[])(void); - -void func_8016F834(void *a0) { - D_80182F2C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80182F34[])(void); - -void func_8016F8E4(void *a0) { - D_80182F34[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80182F3C[])(void); - -void func_8016F9C4(void *a0) { - D_80182F3C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80182F44[])(void); - -void func_8016FA84(void *a0) { - D_80182F44[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80182F50[])(void); - -void func_8016FB7C(void *a0) { - D_80182F50[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80182F5C[])(void); - -void func_8016FC90(void *a0) { - D_80182F5C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80182F68[])(void); - -void func_8016FDB4(void *a0) { - D_80182F68[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80182F78[])(void); - -void func_8016FF30(void *a0) { - D_80182F78[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80182F88[])(void); - -void func_8016FFDC(void *a0) { - D_80182F88[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80182F90[])(void); - -void func_80170150(void *a0) { - D_80182F90[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80182F98[])(void); - -void func_80170240(void *a0) { - D_80182F98[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80182FA0[])(void); - -void func_801702FC(void *a0) { - D_80182FA0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80182FA8[])(void); - -void func_801703E0(void *a0) { - D_80182FA8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80182FB0[])(void); - -void func_801704B0(void *a0) { - D_80182FB0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80182FB8[])(void); - -void func_80170548(void *a0) { - D_80182FB8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80182FC0[])(void); - -void func_801705F8(void *a0) { - D_80182FC0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80182FC8[])(void); - -void func_801706AC(void *a0) { - D_80182FC8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80182FD0[])(void); - -void func_80170748(void *a0) { - D_80182FD0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80182FD8[])(void); - -void func_80170810(void *a0) { - D_80182FD8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80182FE0[])(void); - -void func_80170AD8(void *a0) { - D_80182FE0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80182FE8[])(void); - -void func_80170BD8(void *a0) { - D_80182FE8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80182FF0[])(void); - -void func_80170C74(void *a0) { - D_80182FF0[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80182FF8[])(void); - -void func_80170D68(void *a0) { - D_80182FF8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80183000[])(void); - -void func_80170E34(void *a0) { - D_80183000[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80183008[])(void); - -void func_80170EFC(void *a0) { - D_80183008[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80183010[])(void); - -void func_80170FB0(void *a0) { - D_80183010[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80183018[])(void); - -void func_80171064(void *a0) { - D_80183018[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80183020[])(void); - -void func_80171120(void *a0) { - D_80183020[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80183028[])(void); - -void func_801711C0(void *a0) { - D_80183028[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80183030[])(void); - -void func_80171260(void *a0) { - D_80183030[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80183038[])(void); - -void func_801714E4(void *a0) { - D_80183038[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8015AE2C", func_80172C50); - - -extern void (*D_8018307C[])(void); - -void func_80172CA0(void *a0) { - D_8018307C[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80183040; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80183040); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC02_021/ov_SC02_021_jr_8016AB6C.c b/src/ov_SC02_021/ov_SC02_021_jr_8016AB6C.c new file mode 100644 index 000000000..480f9bb6d --- /dev/null +++ b/src/ov_SC02_021/ov_SC02_021_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80182000; +extern u8 D_80181F70; +extern u8 D_80181F4C; +extern u8 D_80181F28; +extern u8 D_80181FDC; +extern u8 D_80181FB8; +extern u8 D_80181F94; +extern u8 D_80181F04; +extern void func_80145934(void); +extern u8 D_80182090; +extern u8 D_8018206C; +extern u8 D_80182048; +extern u8 D_80182024; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80181488[]; +extern unsigned char D_801814B8[]; +extern unsigned char D_80181508[]; +extern unsigned char D_80181538[]; +extern unsigned char D_80181568[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801815B8[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80181680[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80181708[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80181710; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_80191B38; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_80191B3C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80181740; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801817E8[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018180C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801817FC; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80181820[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018182C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018183C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80181854[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80181844; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80181868[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80181884[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80181874; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80181898[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801818AC[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801818C0; +extern void (*D_801818E8[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801818C8; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80181934[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80181938[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80181D9C[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80181DAC[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_80191B70; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80181DD4[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80181DB4; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80181DC4; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80181E14[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80181E1C[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80181DE8; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80181E28[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80181DF8; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_80191B78; +extern s32 D_80191B84; +extern s32 D_80191B88; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80181E64[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80181E38[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_80191B80; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_801820B4[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80181ED4[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80182158[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_801822AC[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_801820C8; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_801822B4[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_801820D8; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801820F8; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_801822BC[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_801822E4[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_801822F0[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80182164[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80182394; +extern void func_8015D380(s32 a0); +extern unsigned char D_80181478[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_801823A8[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_801823E4[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_8018242C; +extern u16 D_8018242E; +extern u16 D_80182430; +extern s32 D_80182434; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_8018243C; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80182148; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_801824C0[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80182570[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_801825A0[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80182604; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_80191B90[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80182628[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_80191BE8[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80182670[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80182660; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_80191428[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80182678[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_801826CC[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80182694; +extern s16 D_801826C8; +extern s16 D_801826C6; +extern s16 D_801826C4; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_801826D8[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_80191C48; +extern u8 D_80191C49; +extern u8 D_80191C4A; +extern u8 D_80191C4B; +extern u8 D_80191C4C; +extern u8 D_80191C4D; +extern u8 D_80191C4E; +extern u8 D_80191C4F; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_801826E8[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_80191C88; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_8018272C[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_801827A8[]; +extern s32 D_801827C8[]; +extern u8 D_80182844[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80182864[]; +extern u8 D_80182884[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80182920[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_8018299C[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_80191438; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_801829A8[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_801829B0[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80182A78[])(void); +extern void func_80166618(void *a0); +extern void (*D_80182A88[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80182A98[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80182AA4[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80182A04[]; +extern u8 D_80182A18[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80182ABC[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80182AC4[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80182ACC[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80182AD4[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80182ADC[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80182AE4[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80182AEC[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80182BA0[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80182BA8[])(void); +extern void func_80169F00(void *a0); +extern char D_80182B58[]; +extern char D_80182B18[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80182BE0[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80182BEC[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80182C34[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80182BF4[]; + extern u8 D_80182C04[]; + extern u8 D_80191F58[]; + extern u8 D_80191F80[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80182BF4, D_80191F58) + 3; + func_8001CE28(obj, D_80191F58); + } else { + var_s3 = func_80024054(D_80182C04, D_80191F80) + 9; + func_8001CE28(obj, D_80191F80); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80182CB0[])(void); + +void func_8016B4BC(void *a0) { + D_80182CB0[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_80191FA8; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_80191FA8); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80182CA4[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80182CA4; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80182CE8[]; +extern unsigned short D_80182CF0[]; +extern unsigned short D_80182CF8[]; +extern unsigned char D_80191FB0[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_80191FB0 + param_2 * 0x40); + puVar3 = D_80182CE8[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80182CF0[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80182CF8[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_80191FA8; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_80191FA8, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80182D00[])(void); + +void func_8016BBA4(void *a0) { + D_80182D00[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801920E4; + extern u8 D_801920E5; + extern u8 D_801920E6; + extern M2C_UNK D_801920E8; + extern u8 D_801920E9; + extern u8 D_801920EA; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801920E4) = 0x20; + D_801920E5 = 0x20; + D_801920E6 = 0; + (*(u8 *)&D_801920E8) = 0xc0; + D_801920E9 = 0xc0; + D_801920EA = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801920E4; +extern M2C_UNK D_801920E8; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801920E4, &D_801920E8, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801920E5; + extern u8 D_801920E6; + extern u8 D_801920E9; + extern u8 D_801920EA; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801920E4); + if (*p1 != 0) *p1 -= 4; + if (D_801920E5 != 0) D_801920E5 -= 4; + if (D_801920E6 != 0) D_801920E6 -= 4; + p2 = &(*(u8 *)&D_801920E8); + if (*p2 != 0) *p2 -= 4; + if (D_801920E9 != 0) D_801920E9 -= 4; + if (D_801920EA != 0) D_801920EA -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801920E4), &(*(int *)&D_801920E8), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_80192070; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_80192070); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80182D10; + extern s32 D_80182D18; + extern s32 D_80182D20; + extern s32 D_80182D28; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80182D10, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80182D18, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80182D20, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80182D28, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80182D30[])(void); + +void func_8016C14C(void *a0) { + D_80182D30[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801920EC[]; +extern u8 D_801920F4[]; +extern u8 D_801920A4[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801920EC, D_801920F4, D_801920A4); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_80192100[]; + extern u8 D_801921C0; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_80192100[1] = 0xff; + D_80192100[2] = 0x10; + D_80192100[0] = 0x10; + D_80192100[6] = 0; + D_80192100[5] = 0; + D_80192100[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_80192100, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801921C0, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_80192100); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8016AB6C", func_8016C998); + + +extern void (*D_80182D38[])(void); + +void func_8016CB84(void *a0) { + D_80182D38[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801921C0[]; + + + Blk_8016CF04_8016CF04 *p = &D_801921C0[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80182D54[])(void); + +void func_8016D19C(void *a0) { + D_80182D54[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80182D5C[])(void); + +void func_8016D428(void *a0) { + D_80182D5C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80182DC4[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80182DC4[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80182D68; +extern u8 D_80182D74; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80182D68, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80182D74); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80182DF8[])(void); + +void func_8016DEA4(void *a0) { + D_80182DF8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80182E00[])(void); + +void func_8016DF20(void *a0) { + D_80182E00[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80182E54[])(void); + +void func_8016E5B8(void *a0) { + D_80182E54[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80182E14[4]; + extern s32 D_80182E34; + extern s32 D_80182E3C; + extern s32 D_80182E44; + extern s32 D_80182E4C; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80182E14[0], pp, &tmp); + RotTransSV(&D_80182E14[1], &prim.v[1], &tmp); + RotTransSV(&D_80182E14[2], &prim.v[2], &tmp); + RotTransSV(&D_80182E14[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80182E34; + prim.f1 = D_80182E3C; + prim.f2 = D_80182E44; + prim.f3 = D_80182E4C; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80182E94[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80182E94[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80182E88[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80182E88[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80182E78[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80182E78[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80182E88[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80182E88[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80182E88[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80182EA4; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80182EA4; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80182F1C[])(void); + +void func_8016F6E0(void *a0) { + D_80182F1C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80182F24[])(void); + +void func_8016F798(void *a0) { + D_80182F24[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80182F2C[])(void); + +void func_8016F834(void *a0) { + D_80182F2C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80182F34[])(void); + +void func_8016F8E4(void *a0) { + D_80182F34[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80182F3C[])(void); + +void func_8016F9C4(void *a0) { + D_80182F3C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80182F44[])(void); + +void func_8016FA84(void *a0) { + D_80182F44[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80182F50[])(void); + +void func_8016FB7C(void *a0) { + D_80182F50[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80182F5C[])(void); + +void func_8016FC90(void *a0) { + D_80182F5C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80182F68[])(void); + +void func_8016FDB4(void *a0) { + D_80182F68[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80182F78[])(void); + +void func_8016FF30(void *a0) { + D_80182F78[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80182F88[])(void); + +void func_8016FFDC(void *a0) { + D_80182F88[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80182F90[])(void); + +void func_80170150(void *a0) { + D_80182F90[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80182F98[])(void); + +void func_80170240(void *a0) { + D_80182F98[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80182FA0[])(void); + +void func_801702FC(void *a0) { + D_80182FA0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80182FA8[])(void); + +void func_801703E0(void *a0) { + D_80182FA8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80182FB0[])(void); + +void func_801704B0(void *a0) { + D_80182FB0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80182FB8[])(void); + +void func_80170548(void *a0) { + D_80182FB8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80182FC0[])(void); + +void func_801705F8(void *a0) { + D_80182FC0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80182FC8[])(void); + +void func_801706AC(void *a0) { + D_80182FC8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80182FD0[])(void); + +void func_80170748(void *a0) { + D_80182FD0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80182FD8[])(void); + +void func_80170810(void *a0) { + D_80182FD8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80182FE0[])(void); + +void func_80170AD8(void *a0) { + D_80182FE0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80182FE8[])(void); + +void func_80170BD8(void *a0) { + D_80182FE8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80182FF0[])(void); + +void func_80170C74(void *a0) { + D_80182FF0[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80182FF8[])(void); + +void func_80170D68(void *a0) { + D_80182FF8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80183000[])(void); + +void func_80170E34(void *a0) { + D_80183000[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80183008[])(void); + +void func_80170EFC(void *a0) { + D_80183008[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80183010[])(void); + +void func_80170FB0(void *a0) { + D_80183010[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80183018[])(void); + +void func_80171064(void *a0) { + D_80183018[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80183020[])(void); + +void func_80171120(void *a0) { + D_80183020[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80183028[])(void); + +void func_801711C0(void *a0) { + D_80183028[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80183030[])(void); + +void func_80171260(void *a0) { + D_80183030[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80183038[])(void); + +void func_801714E4(void *a0) { + D_80183038[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8016AB6C", func_80172C50); + + +extern void (*D_8018307C[])(void); + +void func_80172CA0(void *a0) { + D_8018307C[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80183040; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80183040); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC02_026/ov_SC02_026_jr_8015AE2C.c b/src/ov_SC02_026/ov_SC02_026_jr_8015AE2C.c index 7d7e96e88..4da6d28a9 100644 --- a/src/ov_SC02_026/ov_SC02_026_jr_8015AE2C.c +++ b/src/ov_SC02_026/ov_SC02_026_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_80189288[])(void); void func_8016AB30(void *a0) { D_80189288[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80189304[])(void); - -void func_8016B4BC(void *a0) { - D_80189304[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801CF3E8; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801CF3E8); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_801892F8[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_801892F8; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_8018933C[]; -extern unsigned short D_80189344[]; -extern unsigned short D_8018934C[]; -extern unsigned char D_801CF3F0[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801CF3F0 + param_2 * 0x40); - puVar3 = D_8018933C[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80189344[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_8018934C[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801CF3E8; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801CF3E8, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80189354[])(void); - -void func_8016BBA4(void *a0) { - D_80189354[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801CF524; - extern u8 D_801CF525; - extern u8 D_801CF526; - extern M2C_UNK D_801CF528; - extern u8 D_801CF529; - extern u8 D_801CF52A; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801CF524) = 0x20; - D_801CF525 = 0x20; - D_801CF526 = 0; - (*(u8 *)&D_801CF528) = 0xc0; - D_801CF529 = 0xc0; - D_801CF52A = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801CF524; -extern M2C_UNK D_801CF528; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801CF524, &D_801CF528, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801CF525; - extern u8 D_801CF526; - extern u8 D_801CF529; - extern u8 D_801CF52A; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801CF524); - if (*p1 != 0) *p1 -= 4; - if (D_801CF525 != 0) D_801CF525 -= 4; - if (D_801CF526 != 0) D_801CF526 -= 4; - p2 = &(*(u8 *)&D_801CF528); - if (*p2 != 0) *p2 -= 4; - if (D_801CF529 != 0) D_801CF529 -= 4; - if (D_801CF52A != 0) D_801CF52A -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801CF524), &(*(int *)&D_801CF528), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801CF4B0; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801CF4B0); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80189364; - extern s32 D_8018936C; - extern s32 D_80189374; - extern s32 D_8018937C; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80189364, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_8018936C, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80189374, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_8018937C, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80189384[])(void); - -void func_8016C14C(void *a0) { - D_80189384[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801CF52C[]; -extern u8 D_801CF534[]; -extern u8 D_801CF4E4[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801CF52C, D_801CF534, D_801CF4E4); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801CF540[]; - extern u8 D_801CF600; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801CF540[1] = 0xff; - D_801CF540[2] = 0x10; - D_801CF540[0] = 0x10; - D_801CF540[6] = 0; - D_801CF540[5] = 0; - D_801CF540[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801CF540, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801CF600, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801CF540); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8015AE2C", func_8016C998); - - -extern void (*D_8018938C[])(void); - -void func_8016CB84(void *a0) { - D_8018938C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801CF600[]; - - - Blk_8016CF04_8016CF04 *p = &D_801CF600[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_801893A8[])(void); - -void func_8016D19C(void *a0) { - D_801893A8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_801893B0[])(void); - -void func_8016D428(void *a0) { - D_801893B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80189418[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80189418[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_801893BC; -extern u8 D_801893C8; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801893BC, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801893C8); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8015AE2C", func_8016DC20); - - -extern void (*D_8018944C[])(void); - -void func_8016DEA4(void *a0) { - D_8018944C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80189454[])(void); - -void func_8016DF20(void *a0) { - D_80189454[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_801894A8[])(void); - -void func_8016E5B8(void *a0) { - D_801894A8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80189468[4]; - extern s32 D_80189488; - extern s32 D_80189490; - extern s32 D_80189498; - extern s32 D_801894A0; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80189468[0], pp, &tmp); - RotTransSV(&D_80189468[1], &prim.v[1], &tmp); - RotTransSV(&D_80189468[2], &prim.v[2], &tmp); - RotTransSV(&D_80189468[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80189488; - prim.f1 = D_80189490; - prim.f2 = D_80189498; - prim.f3 = D_801894A0; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_801894E8[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_801894E8[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_801894DC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_801894DC[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_801894CC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_801894CC[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801894DC[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_801894DC[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_801894DC[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_801894F8; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_801894F8; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80189570[])(void); - -void func_8016F6E0(void *a0) { - D_80189570[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80189578[])(void); - -void func_8016F798(void *a0) { - D_80189578[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80189580[])(void); - -void func_8016F834(void *a0) { - D_80189580[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80189588[])(void); - -void func_8016F8E4(void *a0) { - D_80189588[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80189590[])(void); - -void func_8016F9C4(void *a0) { - D_80189590[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80189598[])(void); - -void func_8016FA84(void *a0) { - D_80189598[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_801895A4[])(void); - -void func_8016FB7C(void *a0) { - D_801895A4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_801895B0[])(void); - -void func_8016FC90(void *a0) { - D_801895B0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_801895BC[])(void); - -void func_8016FDB4(void *a0) { - D_801895BC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_801895CC[])(void); - -void func_8016FF30(void *a0) { - D_801895CC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_801895DC[])(void); - -void func_8016FFDC(void *a0) { - D_801895DC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_801895E4[])(void); - -void func_80170150(void *a0) { - D_801895E4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_801895EC[])(void); - -void func_80170240(void *a0) { - D_801895EC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_801895F4[])(void); - -void func_801702FC(void *a0) { - D_801895F4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_801895FC[])(void); - -void func_801703E0(void *a0) { - D_801895FC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80189604[])(void); - -void func_801704B0(void *a0) { - D_80189604[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_8018960C[])(void); - -void func_80170548(void *a0) { - D_8018960C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80189614[])(void); - -void func_801705F8(void *a0) { - D_80189614[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_8018961C[])(void); - -void func_801706AC(void *a0) { - D_8018961C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80189624[])(void); - -void func_80170748(void *a0) { - D_80189624[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_8018962C[])(void); - -void func_80170810(void *a0) { - D_8018962C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80189634[])(void); - -void func_80170AD8(void *a0) { - D_80189634[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_8018963C[])(void); - -void func_80170BD8(void *a0) { - D_8018963C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80189644[])(void); - -void func_80170C74(void *a0) { - D_80189644[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8015AE2C", func_80170CF0); - - -extern void (*D_8018964C[])(void); - -void func_80170D68(void *a0) { - D_8018964C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80189654[])(void); - -void func_80170E34(void *a0) { - D_80189654[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_8018965C[])(void); - -void func_80170EFC(void *a0) { - D_8018965C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80189664[])(void); - -void func_80170FB0(void *a0) { - D_80189664[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_8018966C[])(void); - -void func_80171064(void *a0) { - D_8018966C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80189674[])(void); - -void func_80171120(void *a0) { - D_80189674[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_8018967C[])(void); - -void func_801711C0(void *a0) { - D_8018967C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80189684[])(void); - -void func_80171260(void *a0) { - D_80189684[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_8018968C[])(void); - -void func_801714E4(void *a0) { - D_8018968C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8015AE2C", func_80172C50); - - -extern void (*D_801896D0[])(void); - -void func_80172CA0(void *a0) { - D_801896D0[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80189694; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80189694); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC02_026/ov_SC02_026_jr_8016AB6C.c b/src/ov_SC02_026/ov_SC02_026_jr_8016AB6C.c new file mode 100644 index 000000000..b1254c999 --- /dev/null +++ b/src/ov_SC02_026/ov_SC02_026_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80188654; +extern u8 D_801885C4; +extern u8 D_801885A0; +extern u8 D_8018857C; +extern u8 D_80188630; +extern u8 D_8018860C; +extern u8 D_801885E8; +extern u8 D_80188558; +extern void func_80145934(void); +extern u8 D_801886E4; +extern u8 D_801886C0; +extern u8 D_8018869C; +extern u8 D_80188678; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80187ADC[]; +extern unsigned char D_80187B0C[]; +extern unsigned char D_80187B5C[]; +extern unsigned char D_80187B8C[]; +extern unsigned char D_80187BBC[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80187C0C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80187CD4[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80187D5C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80187D64; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801CEF78; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801CEF7C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80187D94; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80187E3C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80187E60[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80187E50; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80187E74[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80187E80[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80187E90[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80187EA8[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80187E98; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80187EBC[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80187ED8[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80187EC8; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80187EEC[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80187F00[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80187F14; +extern void (*D_80187F3C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80187F1C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80187F88[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80187F8C[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_801883F0[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80188400[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801CEFB0; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80188428[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80188408; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80188418; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80188468[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80188470[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018843C; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018847C[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018844C; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801CEFB8; +extern s32 D_801CEFC4; +extern s32 D_801CEFC8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801884B8[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018848C[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801CEFC0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80188708[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80188528[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_801887AC[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80188900[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018871C; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80188908[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018872C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018874C; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80188910[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80188938[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80188944[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_801887B8[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_801889E8; +extern void func_8015D380(s32 a0); +extern unsigned char D_80187ACC[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_801889FC[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80188A38[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80188A80; +extern u16 D_80188A82; +extern u16 D_80188A84; +extern s32 D_80188A88; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80188A90; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_8018879C; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80188B14[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80188BC4[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80188BF4[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80188C58; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801CEFD0[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80188C7C[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801CF028[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80188CC4[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80188CB4; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801CE85C[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80188CCC[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80188D20[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80188CE8; +extern s16 D_80188D1C; +extern s16 D_80188D1A; +extern s16 D_80188D18; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80188D2C[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801CF088; +extern u8 D_801CF089; +extern u8 D_801CF08A; +extern u8 D_801CF08B; +extern u8 D_801CF08C; +extern u8 D_801CF08D; +extern u8 D_801CF08E; +extern u8 D_801CF08F; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80188D3C[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801CF0C8; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80188D80[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80188DFC[]; +extern s32 D_80188E1C[]; +extern u8 D_80188E98[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80188EB8[]; +extern u8 D_80188ED8[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80188F74[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80188FF0[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801CE86C; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80188FFC[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80189004[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_801890CC[])(void); +extern void func_80166618(void *a0); +extern void (*D_801890DC[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_801890EC[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_801890F8[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80189058[]; +extern u8 D_8018906C[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80189110[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80189118[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80189120[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80189128[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80189130[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80189138[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80189140[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_801891F4[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_801891FC[])(void); +extern void func_80169F00(void *a0); +extern char D_801891AC[]; +extern char D_8018916C[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80189234[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80189240[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80189288[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80189248[]; + extern u8 D_80189258[]; + extern u8 D_801CF398[]; + extern u8 D_801CF3C0[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80189248, D_801CF398) + 3; + func_8001CE28(obj, D_801CF398); + } else { + var_s3 = func_80024054(D_80189258, D_801CF3C0) + 9; + func_8001CE28(obj, D_801CF3C0); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80189304[])(void); + +void func_8016B4BC(void *a0) { + D_80189304[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801CF3E8; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801CF3E8); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_801892F8[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_801892F8; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_8018933C[]; +extern unsigned short D_80189344[]; +extern unsigned short D_8018934C[]; +extern unsigned char D_801CF3F0[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801CF3F0 + param_2 * 0x40); + puVar3 = D_8018933C[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80189344[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_8018934C[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801CF3E8; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801CF3E8, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80189354[])(void); + +void func_8016BBA4(void *a0) { + D_80189354[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801CF524; + extern u8 D_801CF525; + extern u8 D_801CF526; + extern M2C_UNK D_801CF528; + extern u8 D_801CF529; + extern u8 D_801CF52A; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801CF524) = 0x20; + D_801CF525 = 0x20; + D_801CF526 = 0; + (*(u8 *)&D_801CF528) = 0xc0; + D_801CF529 = 0xc0; + D_801CF52A = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801CF524; +extern M2C_UNK D_801CF528; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801CF524, &D_801CF528, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801CF525; + extern u8 D_801CF526; + extern u8 D_801CF529; + extern u8 D_801CF52A; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801CF524); + if (*p1 != 0) *p1 -= 4; + if (D_801CF525 != 0) D_801CF525 -= 4; + if (D_801CF526 != 0) D_801CF526 -= 4; + p2 = &(*(u8 *)&D_801CF528); + if (*p2 != 0) *p2 -= 4; + if (D_801CF529 != 0) D_801CF529 -= 4; + if (D_801CF52A != 0) D_801CF52A -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801CF524), &(*(int *)&D_801CF528), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801CF4B0; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801CF4B0); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80189364; + extern s32 D_8018936C; + extern s32 D_80189374; + extern s32 D_8018937C; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80189364, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_8018936C, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80189374, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_8018937C, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80189384[])(void); + +void func_8016C14C(void *a0) { + D_80189384[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801CF52C[]; +extern u8 D_801CF534[]; +extern u8 D_801CF4E4[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801CF52C, D_801CF534, D_801CF4E4); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801CF540[]; + extern u8 D_801CF600; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801CF540[1] = 0xff; + D_801CF540[2] = 0x10; + D_801CF540[0] = 0x10; + D_801CF540[6] = 0; + D_801CF540[5] = 0; + D_801CF540[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801CF540, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801CF600, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801CF540); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8016AB6C", func_8016C998); + + +extern void (*D_8018938C[])(void); + +void func_8016CB84(void *a0) { + D_8018938C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801CF600[]; + + + Blk_8016CF04_8016CF04 *p = &D_801CF600[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_801893A8[])(void); + +void func_8016D19C(void *a0) { + D_801893A8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_801893B0[])(void); + +void func_8016D428(void *a0) { + D_801893B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80189418[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80189418[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_801893BC; +extern u8 D_801893C8; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801893BC, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801893C8); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8016AB6C", func_8016DC20); + + +extern void (*D_8018944C[])(void); + +void func_8016DEA4(void *a0) { + D_8018944C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80189454[])(void); + +void func_8016DF20(void *a0) { + D_80189454[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_801894A8[])(void); + +void func_8016E5B8(void *a0) { + D_801894A8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80189468[4]; + extern s32 D_80189488; + extern s32 D_80189490; + extern s32 D_80189498; + extern s32 D_801894A0; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80189468[0], pp, &tmp); + RotTransSV(&D_80189468[1], &prim.v[1], &tmp); + RotTransSV(&D_80189468[2], &prim.v[2], &tmp); + RotTransSV(&D_80189468[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80189488; + prim.f1 = D_80189490; + prim.f2 = D_80189498; + prim.f3 = D_801894A0; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_801894E8[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_801894E8[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_801894DC[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_801894DC[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_801894CC[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_801894CC[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801894DC[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_801894DC[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_801894DC[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_801894F8; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_801894F8; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80189570[])(void); + +void func_8016F6E0(void *a0) { + D_80189570[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80189578[])(void); + +void func_8016F798(void *a0) { + D_80189578[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80189580[])(void); + +void func_8016F834(void *a0) { + D_80189580[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80189588[])(void); + +void func_8016F8E4(void *a0) { + D_80189588[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80189590[])(void); + +void func_8016F9C4(void *a0) { + D_80189590[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80189598[])(void); + +void func_8016FA84(void *a0) { + D_80189598[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_801895A4[])(void); + +void func_8016FB7C(void *a0) { + D_801895A4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_801895B0[])(void); + +void func_8016FC90(void *a0) { + D_801895B0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_801895BC[])(void); + +void func_8016FDB4(void *a0) { + D_801895BC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_801895CC[])(void); + +void func_8016FF30(void *a0) { + D_801895CC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_801895DC[])(void); + +void func_8016FFDC(void *a0) { + D_801895DC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_801895E4[])(void); + +void func_80170150(void *a0) { + D_801895E4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_801895EC[])(void); + +void func_80170240(void *a0) { + D_801895EC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_801895F4[])(void); + +void func_801702FC(void *a0) { + D_801895F4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_801895FC[])(void); + +void func_801703E0(void *a0) { + D_801895FC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80189604[])(void); + +void func_801704B0(void *a0) { + D_80189604[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_8018960C[])(void); + +void func_80170548(void *a0) { + D_8018960C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80189614[])(void); + +void func_801705F8(void *a0) { + D_80189614[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_8018961C[])(void); + +void func_801706AC(void *a0) { + D_8018961C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80189624[])(void); + +void func_80170748(void *a0) { + D_80189624[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_8018962C[])(void); + +void func_80170810(void *a0) { + D_8018962C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80189634[])(void); + +void func_80170AD8(void *a0) { + D_80189634[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_8018963C[])(void); + +void func_80170BD8(void *a0) { + D_8018963C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80189644[])(void); + +void func_80170C74(void *a0) { + D_80189644[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8016AB6C", func_80170CF0); + + +extern void (*D_8018964C[])(void); + +void func_80170D68(void *a0) { + D_8018964C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80189654[])(void); + +void func_80170E34(void *a0) { + D_80189654[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_8018965C[])(void); + +void func_80170EFC(void *a0) { + D_8018965C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80189664[])(void); + +void func_80170FB0(void *a0) { + D_80189664[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_8018966C[])(void); + +void func_80171064(void *a0) { + D_8018966C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80189674[])(void); + +void func_80171120(void *a0) { + D_80189674[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_8018967C[])(void); + +void func_801711C0(void *a0) { + D_8018967C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80189684[])(void); + +void func_80171260(void *a0) { + D_80189684[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_8018968C[])(void); + +void func_801714E4(void *a0) { + D_8018968C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8016AB6C", func_80172C50); + + +extern void (*D_801896D0[])(void); + +void func_80172CA0(void *a0) { + D_801896D0[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80189694; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80189694); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC02_027/ov_SC02_027_jr_8015AE2C.c b/src/ov_SC02_027/ov_SC02_027_jr_8015AE2C.c index 751bbd358..6a7ff745b 100644 --- a/src/ov_SC02_027/ov_SC02_027_jr_8015AE2C.c +++ b/src/ov_SC02_027/ov_SC02_027_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_8018E3AC[])(void); void func_8016AB30(void *a0) { D_8018E3AC[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_8018E428[])(void); - -void func_8016B4BC(void *a0) { - D_8018E428[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801D9158; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801D9158); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_8018E41C[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_8018E41C; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_8018E460[]; -extern unsigned short D_8018E468[]; -extern unsigned short D_8018E470[]; -extern unsigned char D_801D9160[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801D9160 + param_2 * 0x40); - puVar3 = D_8018E460[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_8018E468[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_8018E470[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801D9158; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801D9158, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_8018E478[])(void); - -void func_8016BBA4(void *a0) { - D_8018E478[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801D9294; - extern u8 D_801D9295; - extern u8 D_801D9296; - extern M2C_UNK D_801D9298; - extern u8 D_801D9299; - extern u8 D_801D929A; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801D9294) = 0x20; - D_801D9295 = 0x20; - D_801D9296 = 0; - (*(u8 *)&D_801D9298) = 0xc0; - D_801D9299 = 0xc0; - D_801D929A = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801D9294; -extern M2C_UNK D_801D9298; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801D9294, &D_801D9298, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801D9295; - extern u8 D_801D9296; - extern u8 D_801D9299; - extern u8 D_801D929A; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801D9294); - if (*p1 != 0) *p1 -= 4; - if (D_801D9295 != 0) D_801D9295 -= 4; - if (D_801D9296 != 0) D_801D9296 -= 4; - p2 = &(*(u8 *)&D_801D9298); - if (*p2 != 0) *p2 -= 4; - if (D_801D9299 != 0) D_801D9299 -= 4; - if (D_801D929A != 0) D_801D929A -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801D9294), &(*(int *)&D_801D9298), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801D9220; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801D9220); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_8018E488; - extern s32 D_8018E490; - extern s32 D_8018E498; - extern s32 D_8018E4A0; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_8018E488, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_8018E490, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_8018E498, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_8018E4A0, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_8018E4A8[])(void); - -void func_8016C14C(void *a0) { - D_8018E4A8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801D929C[]; -extern u8 D_801D92A4[]; -extern u8 D_801D9254[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801D929C, D_801D92A4, D_801D9254); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801D92B0[]; - extern u8 D_801D9370; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801D92B0[1] = 0xff; - D_801D92B0[2] = 0x10; - D_801D92B0[0] = 0x10; - D_801D92B0[6] = 0; - D_801D92B0[5] = 0; - D_801D92B0[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801D92B0, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801D9370, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801D92B0); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8015AE2C", func_8016C998); - - -extern void (*D_8018E4B0[])(void); - -void func_8016CB84(void *a0) { - D_8018E4B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801D9370[]; - - - Blk_8016CF04_8016CF04 *p = &D_801D9370[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_8018E4CC[])(void); - -void func_8016D19C(void *a0) { - D_8018E4CC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_8018E4D4[])(void); - -void func_8016D428(void *a0) { - D_8018E4D4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_8018E53C[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_8018E53C[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_8018E4E0; -extern u8 D_8018E4EC; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018E4E0, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018E4EC); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8015AE2C", func_8016DC20); - - -extern void (*D_8018E570[])(void); - -void func_8016DEA4(void *a0) { - D_8018E570[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_8018E578[])(void); - -void func_8016DF20(void *a0) { - D_8018E578[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_8018E5CC[])(void); - -void func_8016E5B8(void *a0) { - D_8018E5CC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_8018E58C[4]; - extern s32 D_8018E5AC; - extern s32 D_8018E5B4; - extern s32 D_8018E5BC; - extern s32 D_8018E5C4; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_8018E58C[0], pp, &tmp); - RotTransSV(&D_8018E58C[1], &prim.v[1], &tmp); - RotTransSV(&D_8018E58C[2], &prim.v[2], &tmp); - RotTransSV(&D_8018E58C[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_8018E5AC; - prim.f1 = D_8018E5B4; - prim.f2 = D_8018E5BC; - prim.f3 = D_8018E5C4; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_8018E60C[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_8018E60C[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_8018E600[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_8018E600[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_8018E5F0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_8018E5F0[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018E600[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_8018E600[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_8018E600[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_8018E61C; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_8018E61C; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_8018E694[])(void); - -void func_8016F6E0(void *a0) { - D_8018E694[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_8018E69C[])(void); - -void func_8016F798(void *a0) { - D_8018E69C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_8018E6A4[])(void); - -void func_8016F834(void *a0) { - D_8018E6A4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_8018E6AC[])(void); - -void func_8016F8E4(void *a0) { - D_8018E6AC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_8018E6B4[])(void); - -void func_8016F9C4(void *a0) { - D_8018E6B4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_8018E6BC[])(void); - -void func_8016FA84(void *a0) { - D_8018E6BC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_8018E6C8[])(void); - -void func_8016FB7C(void *a0) { - D_8018E6C8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_8018E6D4[])(void); - -void func_8016FC90(void *a0) { - D_8018E6D4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_8018E6E0[])(void); - -void func_8016FDB4(void *a0) { - D_8018E6E0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_8018E6F0[])(void); - -void func_8016FF30(void *a0) { - D_8018E6F0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_8018E700[])(void); - -void func_8016FFDC(void *a0) { - D_8018E700[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_8018E708[])(void); - -void func_80170150(void *a0) { - D_8018E708[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_8018E710[])(void); - -void func_80170240(void *a0) { - D_8018E710[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_8018E718[])(void); - -void func_801702FC(void *a0) { - D_8018E718[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_8018E720[])(void); - -void func_801703E0(void *a0) { - D_8018E720[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_8018E728[])(void); - -void func_801704B0(void *a0) { - D_8018E728[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_8018E730[])(void); - -void func_80170548(void *a0) { - D_8018E730[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_8018E738[])(void); - -void func_801705F8(void *a0) { - D_8018E738[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_8018E740[])(void); - -void func_801706AC(void *a0) { - D_8018E740[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_8018E748[])(void); - -void func_80170748(void *a0) { - D_8018E748[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_8018E750[])(void); - -void func_80170810(void *a0) { - D_8018E750[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_8018E758[])(void); - -void func_80170AD8(void *a0) { - D_8018E758[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_8018E760[])(void); - -void func_80170BD8(void *a0) { - D_8018E760[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_8018E768[])(void); - -void func_80170C74(void *a0) { - D_8018E768[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8015AE2C", func_80170CF0); - - -extern void (*D_8018E770[])(void); - -void func_80170D68(void *a0) { - D_8018E770[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_8018E778[])(void); - -void func_80170E34(void *a0) { - D_8018E778[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_8018E780[])(void); - -void func_80170EFC(void *a0) { - D_8018E780[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_8018E788[])(void); - -void func_80170FB0(void *a0) { - D_8018E788[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_8018E790[])(void); - -void func_80171064(void *a0) { - D_8018E790[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_8018E798[])(void); - -void func_80171120(void *a0) { - D_8018E798[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_8018E7A0[])(void); - -void func_801711C0(void *a0) { - D_8018E7A0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_8018E7A8[])(void); - -void func_80171260(void *a0) { - D_8018E7A8[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_8018E7B0[])(void); - -void func_801714E4(void *a0) { - D_8018E7B0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8015AE2C", func_80172C50); - - -extern void (*D_8018E7F4[])(void); - -void func_80172CA0(void *a0) { - D_8018E7F4[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_8018E7B8; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_8018E7B8); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC02_027/ov_SC02_027_jr_8016AB6C.c b/src/ov_SC02_027/ov_SC02_027_jr_8016AB6C.c new file mode 100644 index 000000000..e33172adb --- /dev/null +++ b/src/ov_SC02_027/ov_SC02_027_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018D778; +extern u8 D_8018D6E8; +extern u8 D_8018D6C4; +extern u8 D_8018D6A0; +extern u8 D_8018D754; +extern u8 D_8018D730; +extern u8 D_8018D70C; +extern u8 D_8018D67C; +extern void func_80145934(void); +extern u8 D_8018D808; +extern u8 D_8018D7E4; +extern u8 D_8018D7C0; +extern u8 D_8018D79C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018CC00[]; +extern unsigned char D_8018CC30[]; +extern unsigned char D_8018CC80[]; +extern unsigned char D_8018CCB0[]; +extern unsigned char D_8018CCE0[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018CD30[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018CDF8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018CE80[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018CE88; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801D8CE8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801D8CEC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018CEB8; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018CF60[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018CF84[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018CF74; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018CF98[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018CFA4[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018CFB4[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018CFCC[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018CFBC; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018CFE0[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018CFFC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018CFEC; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018D010[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018D024[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018D038; +extern void (*D_8018D060[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018D040; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018D0AC[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018D0B0[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018D514[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018D524[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801D8D20; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018D54C[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018D52C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018D53C; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018D58C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018D594[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018D560; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018D5A0[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018D570; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801D8D28; +extern s32 D_801D8D34; +extern s32 D_801D8D38; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018D5DC[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018D5B0[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801D8D30; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018D82C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018D64C[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018D8D0[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018DA24[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018D840; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018DA2C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018D850; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018D870; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_8018DA34[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_8018DA5C[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_8018DA68[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_8018D8DC[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_8018DB0C; +extern void func_8015D380(s32 a0); +extern unsigned char D_8018CBF0[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_8018DB20[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_8018DB5C[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_8018DBA4; +extern u16 D_8018DBA6; +extern u16 D_8018DBA8; +extern s32 D_8018DBAC; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_8018DBB4; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_8018D8C0; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_8018DC38[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_8018DCE8[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_8018DD18[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_8018DD7C; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801D8D40[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_8018DDA0[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801D8D98[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_8018DDE8[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_8018DDD8; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801D85C8[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_8018DDF0[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_8018DE44[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_8018DE0C; +extern s16 D_8018DE40; +extern s16 D_8018DE3E; +extern s16 D_8018DE3C; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_8018DE50[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801D8DF8; +extern u8 D_801D8DF9; +extern u8 D_801D8DFA; +extern u8 D_801D8DFB; +extern u8 D_801D8DFC; +extern u8 D_801D8DFD; +extern u8 D_801D8DFE; +extern u8 D_801D8DFF; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_8018DE60[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801D8E38; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_8018DEA4[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_8018DF20[]; +extern s32 D_8018DF40[]; +extern u8 D_8018DFBC[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_8018DFDC[]; +extern u8 D_8018DFFC[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_8018E098[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_8018E114[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801D85D8; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_8018E120[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_8018E128[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_8018E1F0[])(void); +extern void func_80166618(void *a0); +extern void (*D_8018E200[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_8018E210[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_8018E21C[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_8018E17C[]; +extern u8 D_8018E190[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_8018E234[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_8018E23C[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_8018E244[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_8018E24C[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_8018E254[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_8018E25C[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_8018E264[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_8018E318[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_8018E320[])(void); +extern void func_80169F00(void *a0); +extern char D_8018E2D0[]; +extern char D_8018E290[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_8018E358[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_8018E364[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_8018E3AC[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_8018E36C[]; + extern u8 D_8018E37C[]; + extern u8 D_801D9108[]; + extern u8 D_801D9130[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_8018E36C, D_801D9108) + 3; + func_8001CE28(obj, D_801D9108); + } else { + var_s3 = func_80024054(D_8018E37C, D_801D9130) + 9; + func_8001CE28(obj, D_801D9130); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_8018E428[])(void); + +void func_8016B4BC(void *a0) { + D_8018E428[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801D9158; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801D9158); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_8018E41C[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_8018E41C; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_8018E460[]; +extern unsigned short D_8018E468[]; +extern unsigned short D_8018E470[]; +extern unsigned char D_801D9160[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801D9160 + param_2 * 0x40); + puVar3 = D_8018E460[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_8018E468[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_8018E470[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801D9158; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801D9158, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_8018E478[])(void); + +void func_8016BBA4(void *a0) { + D_8018E478[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801D9294; + extern u8 D_801D9295; + extern u8 D_801D9296; + extern M2C_UNK D_801D9298; + extern u8 D_801D9299; + extern u8 D_801D929A; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801D9294) = 0x20; + D_801D9295 = 0x20; + D_801D9296 = 0; + (*(u8 *)&D_801D9298) = 0xc0; + D_801D9299 = 0xc0; + D_801D929A = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801D9294; +extern M2C_UNK D_801D9298; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801D9294, &D_801D9298, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801D9295; + extern u8 D_801D9296; + extern u8 D_801D9299; + extern u8 D_801D929A; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801D9294); + if (*p1 != 0) *p1 -= 4; + if (D_801D9295 != 0) D_801D9295 -= 4; + if (D_801D9296 != 0) D_801D9296 -= 4; + p2 = &(*(u8 *)&D_801D9298); + if (*p2 != 0) *p2 -= 4; + if (D_801D9299 != 0) D_801D9299 -= 4; + if (D_801D929A != 0) D_801D929A -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801D9294), &(*(int *)&D_801D9298), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801D9220; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801D9220); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_8018E488; + extern s32 D_8018E490; + extern s32 D_8018E498; + extern s32 D_8018E4A0; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_8018E488, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_8018E490, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_8018E498, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_8018E4A0, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_8018E4A8[])(void); + +void func_8016C14C(void *a0) { + D_8018E4A8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801D929C[]; +extern u8 D_801D92A4[]; +extern u8 D_801D9254[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801D929C, D_801D92A4, D_801D9254); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801D92B0[]; + extern u8 D_801D9370; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801D92B0[1] = 0xff; + D_801D92B0[2] = 0x10; + D_801D92B0[0] = 0x10; + D_801D92B0[6] = 0; + D_801D92B0[5] = 0; + D_801D92B0[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801D92B0, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801D9370, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801D92B0); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8016AB6C", func_8016C998); + + +extern void (*D_8018E4B0[])(void); + +void func_8016CB84(void *a0) { + D_8018E4B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801D9370[]; + + + Blk_8016CF04_8016CF04 *p = &D_801D9370[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_8018E4CC[])(void); + +void func_8016D19C(void *a0) { + D_8018E4CC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_8018E4D4[])(void); + +void func_8016D428(void *a0) { + D_8018E4D4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018E53C[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_8018E53C[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_8018E4E0; +extern u8 D_8018E4EC; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018E4E0, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018E4EC); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8016AB6C", func_8016DC20); + + +extern void (*D_8018E570[])(void); + +void func_8016DEA4(void *a0) { + D_8018E570[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_8018E578[])(void); + +void func_8016DF20(void *a0) { + D_8018E578[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_8018E5CC[])(void); + +void func_8016E5B8(void *a0) { + D_8018E5CC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_8018E58C[4]; + extern s32 D_8018E5AC; + extern s32 D_8018E5B4; + extern s32 D_8018E5BC; + extern s32 D_8018E5C4; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_8018E58C[0], pp, &tmp); + RotTransSV(&D_8018E58C[1], &prim.v[1], &tmp); + RotTransSV(&D_8018E58C[2], &prim.v[2], &tmp); + RotTransSV(&D_8018E58C[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_8018E5AC; + prim.f1 = D_8018E5B4; + prim.f2 = D_8018E5BC; + prim.f3 = D_8018E5C4; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_8018E60C[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_8018E60C[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_8018E600[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_8018E600[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_8018E5F0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_8018E5F0[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018E600[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_8018E600[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_8018E600[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_8018E61C; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_8018E61C; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_8018E694[])(void); + +void func_8016F6E0(void *a0) { + D_8018E694[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_8018E69C[])(void); + +void func_8016F798(void *a0) { + D_8018E69C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_8018E6A4[])(void); + +void func_8016F834(void *a0) { + D_8018E6A4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_8018E6AC[])(void); + +void func_8016F8E4(void *a0) { + D_8018E6AC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_8018E6B4[])(void); + +void func_8016F9C4(void *a0) { + D_8018E6B4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_8018E6BC[])(void); + +void func_8016FA84(void *a0) { + D_8018E6BC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_8018E6C8[])(void); + +void func_8016FB7C(void *a0) { + D_8018E6C8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_8018E6D4[])(void); + +void func_8016FC90(void *a0) { + D_8018E6D4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_8018E6E0[])(void); + +void func_8016FDB4(void *a0) { + D_8018E6E0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_8018E6F0[])(void); + +void func_8016FF30(void *a0) { + D_8018E6F0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_8018E700[])(void); + +void func_8016FFDC(void *a0) { + D_8018E700[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_8018E708[])(void); + +void func_80170150(void *a0) { + D_8018E708[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_8018E710[])(void); + +void func_80170240(void *a0) { + D_8018E710[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_8018E718[])(void); + +void func_801702FC(void *a0) { + D_8018E718[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_8018E720[])(void); + +void func_801703E0(void *a0) { + D_8018E720[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_8018E728[])(void); + +void func_801704B0(void *a0) { + D_8018E728[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_8018E730[])(void); + +void func_80170548(void *a0) { + D_8018E730[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_8018E738[])(void); + +void func_801705F8(void *a0) { + D_8018E738[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_8018E740[])(void); + +void func_801706AC(void *a0) { + D_8018E740[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_8018E748[])(void); + +void func_80170748(void *a0) { + D_8018E748[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_8018E750[])(void); + +void func_80170810(void *a0) { + D_8018E750[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_8018E758[])(void); + +void func_80170AD8(void *a0) { + D_8018E758[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_8018E760[])(void); + +void func_80170BD8(void *a0) { + D_8018E760[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_8018E768[])(void); + +void func_80170C74(void *a0) { + D_8018E768[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8016AB6C", func_80170CF0); + + +extern void (*D_8018E770[])(void); + +void func_80170D68(void *a0) { + D_8018E770[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_8018E778[])(void); + +void func_80170E34(void *a0) { + D_8018E778[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_8018E780[])(void); + +void func_80170EFC(void *a0) { + D_8018E780[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_8018E788[])(void); + +void func_80170FB0(void *a0) { + D_8018E788[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_8018E790[])(void); + +void func_80171064(void *a0) { + D_8018E790[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_8018E798[])(void); + +void func_80171120(void *a0) { + D_8018E798[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_8018E7A0[])(void); + +void func_801711C0(void *a0) { + D_8018E7A0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_8018E7A8[])(void); + +void func_80171260(void *a0) { + D_8018E7A8[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_8018E7B0[])(void); + +void func_801714E4(void *a0) { + D_8018E7B0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8016AB6C", func_80172C50); + + +extern void (*D_8018E7F4[])(void); + +void func_80172CA0(void *a0) { + D_8018E7F4[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_8018E7B8; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_8018E7B8); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC02_028/ov_SC02_028_jr_8015AE2C.c b/src/ov_SC02_028/ov_SC02_028_jr_8015AE2C.c index 5b2dcc1d7..a79a3d861 100644 --- a/src/ov_SC02_028/ov_SC02_028_jr_8015AE2C.c +++ b/src/ov_SC02_028/ov_SC02_028_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_8018E5B0[])(void); void func_8016AB30(void *a0) { D_8018E5B0[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_8018E62C[])(void); - -void func_8016B4BC(void *a0) { - D_8018E62C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801D20F8; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801D20F8); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_8018E620[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_8018E620; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_8018E664[]; -extern unsigned short D_8018E66C[]; -extern unsigned short D_8018E674[]; -extern unsigned char D_801D2100[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801D2100 + param_2 * 0x40); - puVar3 = D_8018E664[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_8018E66C[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_8018E674[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801D20F8; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801D20F8, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_8018E67C[])(void); - -void func_8016BBA4(void *a0) { - D_8018E67C[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801D2234; - extern u8 D_801D2235; - extern u8 D_801D2236; - extern M2C_UNK D_801D2238; - extern u8 D_801D2239; - extern u8 D_801D223A; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801D2234) = 0x20; - D_801D2235 = 0x20; - D_801D2236 = 0; - (*(u8 *)&D_801D2238) = 0xc0; - D_801D2239 = 0xc0; - D_801D223A = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801D2234; -extern M2C_UNK D_801D2238; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801D2234, &D_801D2238, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801D2235; - extern u8 D_801D2236; - extern u8 D_801D2239; - extern u8 D_801D223A; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801D2234); - if (*p1 != 0) *p1 -= 4; - if (D_801D2235 != 0) D_801D2235 -= 4; - if (D_801D2236 != 0) D_801D2236 -= 4; - p2 = &(*(u8 *)&D_801D2238); - if (*p2 != 0) *p2 -= 4; - if (D_801D2239 != 0) D_801D2239 -= 4; - if (D_801D223A != 0) D_801D223A -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801D2234), &(*(int *)&D_801D2238), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801D21C0; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801D21C0); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_8018E68C; - extern s32 D_8018E694; - extern s32 D_8018E69C; - extern s32 D_8018E6A4; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_8018E68C, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_8018E694, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_8018E69C, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_8018E6A4, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_8018E6AC[])(void); - -void func_8016C14C(void *a0) { - D_8018E6AC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801D223C[]; -extern u8 D_801D2244[]; -extern u8 D_801D21F4[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801D223C, D_801D2244, D_801D21F4); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801D2250[]; - extern u8 D_801D2310; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801D2250[1] = 0xff; - D_801D2250[2] = 0x10; - D_801D2250[0] = 0x10; - D_801D2250[6] = 0; - D_801D2250[5] = 0; - D_801D2250[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801D2250, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801D2310, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801D2250); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8015AE2C", func_8016C998); - - -extern void (*D_8018E6B4[])(void); - -void func_8016CB84(void *a0) { - D_8018E6B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801D2310[]; - - - Blk_8016CF04_8016CF04 *p = &D_801D2310[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_8018E6D0[])(void); - -void func_8016D19C(void *a0) { - D_8018E6D0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_8018E6D8[])(void); - -void func_8016D428(void *a0) { - D_8018E6D8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_8018E740[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_8018E740[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_8018E6E4; -extern u8 D_8018E6F0; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018E6E4, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018E6F0); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8015AE2C", func_8016DC20); - - -extern void (*D_8018E774[])(void); - -void func_8016DEA4(void *a0) { - D_8018E774[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_8018E77C[])(void); - -void func_8016DF20(void *a0) { - D_8018E77C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_8018E7D0[])(void); - -void func_8016E5B8(void *a0) { - D_8018E7D0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_8018E790[4]; - extern s32 D_8018E7B0; - extern s32 D_8018E7B8; - extern s32 D_8018E7C0; - extern s32 D_8018E7C8; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_8018E790[0], pp, &tmp); - RotTransSV(&D_8018E790[1], &prim.v[1], &tmp); - RotTransSV(&D_8018E790[2], &prim.v[2], &tmp); - RotTransSV(&D_8018E790[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_8018E7B0; - prim.f1 = D_8018E7B8; - prim.f2 = D_8018E7C0; - prim.f3 = D_8018E7C8; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_8018E810[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_8018E810[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_8018E804[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_8018E804[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_8018E7F4[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_8018E7F4[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018E804[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_8018E804[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_8018E804[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_8018E820; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_8018E820; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_8018E898[])(void); - -void func_8016F6E0(void *a0) { - D_8018E898[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_8018E8A0[])(void); - -void func_8016F798(void *a0) { - D_8018E8A0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_8018E8A8[])(void); - -void func_8016F834(void *a0) { - D_8018E8A8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_8018E8B0[])(void); - -void func_8016F8E4(void *a0) { - D_8018E8B0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_8018E8B8[])(void); - -void func_8016F9C4(void *a0) { - D_8018E8B8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_8018E8C0[])(void); - -void func_8016FA84(void *a0) { - D_8018E8C0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_8018E8CC[])(void); - -void func_8016FB7C(void *a0) { - D_8018E8CC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_8018E8D8[])(void); - -void func_8016FC90(void *a0) { - D_8018E8D8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_8018E8E4[])(void); - -void func_8016FDB4(void *a0) { - D_8018E8E4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_8018E8F4[])(void); - -void func_8016FF30(void *a0) { - D_8018E8F4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_8018E904[])(void); - -void func_8016FFDC(void *a0) { - D_8018E904[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_8018E90C[])(void); - -void func_80170150(void *a0) { - D_8018E90C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_8018E914[])(void); - -void func_80170240(void *a0) { - D_8018E914[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_8018E91C[])(void); - -void func_801702FC(void *a0) { - D_8018E91C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_8018E924[])(void); - -void func_801703E0(void *a0) { - D_8018E924[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_8018E92C[])(void); - -void func_801704B0(void *a0) { - D_8018E92C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_8018E934[])(void); - -void func_80170548(void *a0) { - D_8018E934[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_8018E93C[])(void); - -void func_801705F8(void *a0) { - D_8018E93C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_8018E944[])(void); - -void func_801706AC(void *a0) { - D_8018E944[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_8018E94C[])(void); - -void func_80170748(void *a0) { - D_8018E94C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_8018E954[])(void); - -void func_80170810(void *a0) { - D_8018E954[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_8018E95C[])(void); - -void func_80170AD8(void *a0) { - D_8018E95C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_8018E964[])(void); - -void func_80170BD8(void *a0) { - D_8018E964[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_8018E96C[])(void); - -void func_80170C74(void *a0) { - D_8018E96C[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8015AE2C", func_80170CF0); - - -extern void (*D_8018E974[])(void); - -void func_80170D68(void *a0) { - D_8018E974[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_8018E97C[])(void); - -void func_80170E34(void *a0) { - D_8018E97C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_8018E984[])(void); - -void func_80170EFC(void *a0) { - D_8018E984[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_8018E98C[])(void); - -void func_80170FB0(void *a0) { - D_8018E98C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_8018E994[])(void); - -void func_80171064(void *a0) { - D_8018E994[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_8018E99C[])(void); - -void func_80171120(void *a0) { - D_8018E99C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_8018E9A4[])(void); - -void func_801711C0(void *a0) { - D_8018E9A4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_8018E9AC[])(void); - -void func_80171260(void *a0) { - D_8018E9AC[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_8018E9B4[])(void); - -void func_801714E4(void *a0) { - D_8018E9B4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8015AE2C", func_80172C50); - - -extern void (*D_8018E9F8[])(void); - -void func_80172CA0(void *a0) { - D_8018E9F8[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_8018E9BC; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_8018E9BC); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC02_028/ov_SC02_028_jr_8016AB6C.c b/src/ov_SC02_028/ov_SC02_028_jr_8016AB6C.c new file mode 100644 index 000000000..8f51c5cee --- /dev/null +++ b/src/ov_SC02_028/ov_SC02_028_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018D97C; +extern u8 D_8018D8EC; +extern u8 D_8018D8C8; +extern u8 D_8018D8A4; +extern u8 D_8018D958; +extern u8 D_8018D934; +extern u8 D_8018D910; +extern u8 D_8018D880; +extern void func_80145934(void); +extern u8 D_8018DA0C; +extern u8 D_8018D9E8; +extern u8 D_8018D9C4; +extern u8 D_8018D9A0; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018CE04[]; +extern unsigned char D_8018CE34[]; +extern unsigned char D_8018CE84[]; +extern unsigned char D_8018CEB4[]; +extern unsigned char D_8018CEE4[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018CF34[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018CFFC[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018D084[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018D08C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801D1C88; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801D1C8C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018D0BC; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018D164[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018D188[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018D178; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018D19C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018D1A8[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018D1B8[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018D1D0[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018D1C0; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018D1E4[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018D200[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018D1F0; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018D214[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018D228[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018D23C; +extern void (*D_8018D264[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018D244; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018D2B0[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018D2B4[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018D718[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018D728[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801D1CC0; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018D750[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018D730; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018D740; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018D790[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018D798[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018D764; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018D7A4[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018D774; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801D1CC8; +extern s32 D_801D1CD4; +extern s32 D_801D1CD8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018D7E0[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018D7B4[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801D1CD0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018DA30[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018D850[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018DAD4[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018DC28[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018DA44; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018DC30[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018DA54; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018DA74; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_8018DC38[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_8018DC60[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_8018DC6C[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_8018DAE0[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_8018DD10; +extern void func_8015D380(s32 a0); +extern unsigned char D_8018CDF4[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_8018DD24[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_8018DD60[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_8018DDA8; +extern u16 D_8018DDAA; +extern u16 D_8018DDAC; +extern s32 D_8018DDB0; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_8018DDB8; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_8018DAC4; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_8018DE3C[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_8018DEEC[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_8018DF1C[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_8018DF80; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801D1CE0[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_8018DFA4[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801D1D38[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_8018DFEC[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_8018DFDC; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801D154C[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_8018DFF4[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_8018E048[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_8018E010; +extern s16 D_8018E044; +extern s16 D_8018E042; +extern s16 D_8018E040; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_8018E054[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801D1D98; +extern u8 D_801D1D99; +extern u8 D_801D1D9A; +extern u8 D_801D1D9B; +extern u8 D_801D1D9C; +extern u8 D_801D1D9D; +extern u8 D_801D1D9E; +extern u8 D_801D1D9F; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_8018E064[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801D1DD8; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_8018E0A8[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_8018E124[]; +extern s32 D_8018E144[]; +extern u8 D_8018E1C0[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_8018E1E0[]; +extern u8 D_8018E200[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_8018E29C[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_8018E318[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801D155C; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_8018E324[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_8018E32C[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_8018E3F4[])(void); +extern void func_80166618(void *a0); +extern void (*D_8018E404[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_8018E414[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_8018E420[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_8018E380[]; +extern u8 D_8018E394[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_8018E438[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_8018E440[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_8018E448[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_8018E450[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_8018E458[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_8018E460[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_8018E468[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_8018E51C[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_8018E524[])(void); +extern void func_80169F00(void *a0); +extern char D_8018E4D4[]; +extern char D_8018E494[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_8018E55C[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_8018E568[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_8018E5B0[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_8018E570[]; + extern u8 D_8018E580[]; + extern u8 D_801D20A8[]; + extern u8 D_801D20D0[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_8018E570, D_801D20A8) + 3; + func_8001CE28(obj, D_801D20A8); + } else { + var_s3 = func_80024054(D_8018E580, D_801D20D0) + 9; + func_8001CE28(obj, D_801D20D0); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_8018E62C[])(void); + +void func_8016B4BC(void *a0) { + D_8018E62C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801D20F8; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801D20F8); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_8018E620[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_8018E620; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_8018E664[]; +extern unsigned short D_8018E66C[]; +extern unsigned short D_8018E674[]; +extern unsigned char D_801D2100[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801D2100 + param_2 * 0x40); + puVar3 = D_8018E664[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_8018E66C[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_8018E674[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801D20F8; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801D20F8, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_8018E67C[])(void); + +void func_8016BBA4(void *a0) { + D_8018E67C[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801D2234; + extern u8 D_801D2235; + extern u8 D_801D2236; + extern M2C_UNK D_801D2238; + extern u8 D_801D2239; + extern u8 D_801D223A; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801D2234) = 0x20; + D_801D2235 = 0x20; + D_801D2236 = 0; + (*(u8 *)&D_801D2238) = 0xc0; + D_801D2239 = 0xc0; + D_801D223A = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801D2234; +extern M2C_UNK D_801D2238; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801D2234, &D_801D2238, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801D2235; + extern u8 D_801D2236; + extern u8 D_801D2239; + extern u8 D_801D223A; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801D2234); + if (*p1 != 0) *p1 -= 4; + if (D_801D2235 != 0) D_801D2235 -= 4; + if (D_801D2236 != 0) D_801D2236 -= 4; + p2 = &(*(u8 *)&D_801D2238); + if (*p2 != 0) *p2 -= 4; + if (D_801D2239 != 0) D_801D2239 -= 4; + if (D_801D223A != 0) D_801D223A -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801D2234), &(*(int *)&D_801D2238), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801D21C0; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801D21C0); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_8018E68C; + extern s32 D_8018E694; + extern s32 D_8018E69C; + extern s32 D_8018E6A4; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_8018E68C, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_8018E694, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_8018E69C, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_8018E6A4, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_8018E6AC[])(void); + +void func_8016C14C(void *a0) { + D_8018E6AC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801D223C[]; +extern u8 D_801D2244[]; +extern u8 D_801D21F4[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801D223C, D_801D2244, D_801D21F4); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801D2250[]; + extern u8 D_801D2310; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801D2250[1] = 0xff; + D_801D2250[2] = 0x10; + D_801D2250[0] = 0x10; + D_801D2250[6] = 0; + D_801D2250[5] = 0; + D_801D2250[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801D2250, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801D2310, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801D2250); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8016AB6C", func_8016C998); + + +extern void (*D_8018E6B4[])(void); + +void func_8016CB84(void *a0) { + D_8018E6B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801D2310[]; + + + Blk_8016CF04_8016CF04 *p = &D_801D2310[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_8018E6D0[])(void); + +void func_8016D19C(void *a0) { + D_8018E6D0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_8018E6D8[])(void); + +void func_8016D428(void *a0) { + D_8018E6D8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018E740[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_8018E740[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_8018E6E4; +extern u8 D_8018E6F0; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018E6E4, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018E6F0); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8016AB6C", func_8016DC20); + + +extern void (*D_8018E774[])(void); + +void func_8016DEA4(void *a0) { + D_8018E774[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_8018E77C[])(void); + +void func_8016DF20(void *a0) { + D_8018E77C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_8018E7D0[])(void); + +void func_8016E5B8(void *a0) { + D_8018E7D0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_8018E790[4]; + extern s32 D_8018E7B0; + extern s32 D_8018E7B8; + extern s32 D_8018E7C0; + extern s32 D_8018E7C8; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_8018E790[0], pp, &tmp); + RotTransSV(&D_8018E790[1], &prim.v[1], &tmp); + RotTransSV(&D_8018E790[2], &prim.v[2], &tmp); + RotTransSV(&D_8018E790[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_8018E7B0; + prim.f1 = D_8018E7B8; + prim.f2 = D_8018E7C0; + prim.f3 = D_8018E7C8; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_8018E810[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_8018E810[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_8018E804[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_8018E804[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_8018E7F4[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_8018E7F4[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018E804[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_8018E804[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_8018E804[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_8018E820; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_8018E820; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_8018E898[])(void); + +void func_8016F6E0(void *a0) { + D_8018E898[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_8018E8A0[])(void); + +void func_8016F798(void *a0) { + D_8018E8A0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_8018E8A8[])(void); + +void func_8016F834(void *a0) { + D_8018E8A8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_8018E8B0[])(void); + +void func_8016F8E4(void *a0) { + D_8018E8B0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_8018E8B8[])(void); + +void func_8016F9C4(void *a0) { + D_8018E8B8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_8018E8C0[])(void); + +void func_8016FA84(void *a0) { + D_8018E8C0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_8018E8CC[])(void); + +void func_8016FB7C(void *a0) { + D_8018E8CC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_8018E8D8[])(void); + +void func_8016FC90(void *a0) { + D_8018E8D8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_8018E8E4[])(void); + +void func_8016FDB4(void *a0) { + D_8018E8E4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_8018E8F4[])(void); + +void func_8016FF30(void *a0) { + D_8018E8F4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_8018E904[])(void); + +void func_8016FFDC(void *a0) { + D_8018E904[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_8018E90C[])(void); + +void func_80170150(void *a0) { + D_8018E90C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_8018E914[])(void); + +void func_80170240(void *a0) { + D_8018E914[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_8018E91C[])(void); + +void func_801702FC(void *a0) { + D_8018E91C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_8018E924[])(void); + +void func_801703E0(void *a0) { + D_8018E924[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_8018E92C[])(void); + +void func_801704B0(void *a0) { + D_8018E92C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_8018E934[])(void); + +void func_80170548(void *a0) { + D_8018E934[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_8018E93C[])(void); + +void func_801705F8(void *a0) { + D_8018E93C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_8018E944[])(void); + +void func_801706AC(void *a0) { + D_8018E944[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_8018E94C[])(void); + +void func_80170748(void *a0) { + D_8018E94C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_8018E954[])(void); + +void func_80170810(void *a0) { + D_8018E954[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_8018E95C[])(void); + +void func_80170AD8(void *a0) { + D_8018E95C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_8018E964[])(void); + +void func_80170BD8(void *a0) { + D_8018E964[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_8018E96C[])(void); + +void func_80170C74(void *a0) { + D_8018E96C[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8016AB6C", func_80170CF0); + + +extern void (*D_8018E974[])(void); + +void func_80170D68(void *a0) { + D_8018E974[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_8018E97C[])(void); + +void func_80170E34(void *a0) { + D_8018E97C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_8018E984[])(void); + +void func_80170EFC(void *a0) { + D_8018E984[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_8018E98C[])(void); + +void func_80170FB0(void *a0) { + D_8018E98C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_8018E994[])(void); + +void func_80171064(void *a0) { + D_8018E994[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_8018E99C[])(void); + +void func_80171120(void *a0) { + D_8018E99C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_8018E9A4[])(void); + +void func_801711C0(void *a0) { + D_8018E9A4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_8018E9AC[])(void); + +void func_80171260(void *a0) { + D_8018E9AC[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_8018E9B4[])(void); + +void func_801714E4(void *a0) { + D_8018E9B4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8016AB6C", func_80172C50); + + +extern void (*D_8018E9F8[])(void); + +void func_80172CA0(void *a0) { + D_8018E9F8[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_8018E9BC; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_8018E9BC); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC02_031/ov_SC02_031_jr_8015AE2C.c b/src/ov_SC02_031/ov_SC02_031_jr_8015AE2C.c index 3d6a6e9af..896aad6c9 100644 --- a/src/ov_SC02_031/ov_SC02_031_jr_8015AE2C.c +++ b/src/ov_SC02_031/ov_SC02_031_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_80187DDC[])(void); void func_8016AB30(void *a0) { D_80187DDC[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80187E58[])(void); - -void func_8016B4BC(void *a0) { - D_80187E58[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801B6870; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801B6870); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80187E4C[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80187E4C; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80187E90[]; -extern unsigned short D_80187E98[]; -extern unsigned short D_80187EA0[]; -extern unsigned char D_801B6878[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801B6878 + param_2 * 0x40); - puVar3 = D_80187E90[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80187E98[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80187EA0[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801B6870; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801B6870, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80187EA8[])(void); - -void func_8016BBA4(void *a0) { - D_80187EA8[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801B69AC; - extern u8 D_801B69AD; - extern u8 D_801B69AE; - extern M2C_UNK D_801B69B0; - extern u8 D_801B69B1; - extern u8 D_801B69B2; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801B69AC) = 0x20; - D_801B69AD = 0x20; - D_801B69AE = 0; - (*(u8 *)&D_801B69B0) = 0xc0; - D_801B69B1 = 0xc0; - D_801B69B2 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801B69AC; -extern M2C_UNK D_801B69B0; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801B69AC, &D_801B69B0, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801B69AD; - extern u8 D_801B69AE; - extern u8 D_801B69B1; - extern u8 D_801B69B2; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801B69AC); - if (*p1 != 0) *p1 -= 4; - if (D_801B69AD != 0) D_801B69AD -= 4; - if (D_801B69AE != 0) D_801B69AE -= 4; - p2 = &(*(u8 *)&D_801B69B0); - if (*p2 != 0) *p2 -= 4; - if (D_801B69B1 != 0) D_801B69B1 -= 4; - if (D_801B69B2 != 0) D_801B69B2 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801B69AC), &(*(int *)&D_801B69B0), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801B6938; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801B6938); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80187EB8; - extern s32 D_80187EC0; - extern s32 D_80187EC8; - extern s32 D_80187ED0; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80187EB8, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80187EC0, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80187EC8, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80187ED0, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80187ED8[])(void); - -void func_8016C14C(void *a0) { - D_80187ED8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801B69B4[]; -extern u8 D_801B69BC[]; -extern u8 D_801B696C[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801B69B4, D_801B69BC, D_801B696C); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801B69C8[]; - extern u8 D_801B6A88; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801B69C8[1] = 0xff; - D_801B69C8[2] = 0x10; - D_801B69C8[0] = 0x10; - D_801B69C8[6] = 0; - D_801B69C8[5] = 0; - D_801B69C8[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801B69C8, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801B6A88, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801B69C8); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8015AE2C", func_8016C998); - - -extern void (*D_80187EE0[])(void); - -void func_8016CB84(void *a0) { - D_80187EE0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801B6A88[]; - - - Blk_8016CF04_8016CF04 *p = &D_801B6A88[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80187EFC[])(void); - -void func_8016D19C(void *a0) { - D_80187EFC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80187F04[])(void); - -void func_8016D428(void *a0) { - D_80187F04[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80187F6C[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80187F6C[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80187F10; -extern u8 D_80187F1C; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80187F10, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80187F1C); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80187FA0[])(void); - -void func_8016DEA4(void *a0) { - D_80187FA0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80187FA8[])(void); - -void func_8016DF20(void *a0) { - D_80187FA8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80187FFC[])(void); - -void func_8016E5B8(void *a0) { - D_80187FFC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80187FBC[4]; - extern s32 D_80187FDC; - extern s32 D_80187FE4; - extern s32 D_80187FEC; - extern s32 D_80187FF4; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80187FBC[0], pp, &tmp); - RotTransSV(&D_80187FBC[1], &prim.v[1], &tmp); - RotTransSV(&D_80187FBC[2], &prim.v[2], &tmp); - RotTransSV(&D_80187FBC[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80187FDC; - prim.f1 = D_80187FE4; - prim.f2 = D_80187FEC; - prim.f3 = D_80187FF4; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_8018803C[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_8018803C[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80188030[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80188030[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80188020[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80188020[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80188030[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80188030[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80188030[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_8018804C; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_8018804C; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_801880C4[])(void); - -void func_8016F6E0(void *a0) { - D_801880C4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_801880CC[])(void); - -void func_8016F798(void *a0) { - D_801880CC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_801880D4[])(void); - -void func_8016F834(void *a0) { - D_801880D4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_801880DC[])(void); - -void func_8016F8E4(void *a0) { - D_801880DC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_801880E4[])(void); - -void func_8016F9C4(void *a0) { - D_801880E4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_801880EC[])(void); - -void func_8016FA84(void *a0) { - D_801880EC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_801880F8[])(void); - -void func_8016FB7C(void *a0) { - D_801880F8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80188104[])(void); - -void func_8016FC90(void *a0) { - D_80188104[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80188110[])(void); - -void func_8016FDB4(void *a0) { - D_80188110[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80188120[])(void); - -void func_8016FF30(void *a0) { - D_80188120[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80188130[])(void); - -void func_8016FFDC(void *a0) { - D_80188130[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80188138[])(void); - -void func_80170150(void *a0) { - D_80188138[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80188140[])(void); - -void func_80170240(void *a0) { - D_80188140[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80188148[])(void); - -void func_801702FC(void *a0) { - D_80188148[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80188150[])(void); - -void func_801703E0(void *a0) { - D_80188150[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80188158[])(void); - -void func_801704B0(void *a0) { - D_80188158[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80188160[])(void); - -void func_80170548(void *a0) { - D_80188160[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80188168[])(void); - -void func_801705F8(void *a0) { - D_80188168[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80188170[])(void); - -void func_801706AC(void *a0) { - D_80188170[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80188178[])(void); - -void func_80170748(void *a0) { - D_80188178[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80188180[])(void); - -void func_80170810(void *a0) { - D_80188180[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80188188[])(void); - -void func_80170AD8(void *a0) { - D_80188188[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80188190[])(void); - -void func_80170BD8(void *a0) { - D_80188190[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80188198[])(void); - -void func_80170C74(void *a0) { - D_80188198[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8015AE2C", func_80170CF0); - - -extern void (*D_801881A0[])(void); - -void func_80170D68(void *a0) { - D_801881A0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_801881A8[])(void); - -void func_80170E34(void *a0) { - D_801881A8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_801881B0[])(void); - -void func_80170EFC(void *a0) { - D_801881B0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_801881B8[])(void); - -void func_80170FB0(void *a0) { - D_801881B8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_801881C0[])(void); - -void func_80171064(void *a0) { - D_801881C0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_801881C8[])(void); - -void func_80171120(void *a0) { - D_801881C8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_801881D0[])(void); - -void func_801711C0(void *a0) { - D_801881D0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_801881D8[])(void); - -void func_80171260(void *a0) { - D_801881D8[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_801881E0[])(void); - -void func_801714E4(void *a0) { - D_801881E0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8015AE2C", func_80172C50); - - -extern void (*D_80188224[])(void); - -void func_80172CA0(void *a0) { - D_80188224[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_801881E8; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_801881E8); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC02_031/ov_SC02_031_jr_8016AB6C.c b/src/ov_SC02_031/ov_SC02_031_jr_8016AB6C.c new file mode 100644 index 000000000..c0c8137f5 --- /dev/null +++ b/src/ov_SC02_031/ov_SC02_031_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801871A8; +extern u8 D_80187118; +extern u8 D_801870F4; +extern u8 D_801870D0; +extern u8 D_80187184; +extern u8 D_80187160; +extern u8 D_8018713C; +extern u8 D_801870AC; +extern void func_80145934(void); +extern u8 D_80187238; +extern u8 D_80187214; +extern u8 D_801871F0; +extern u8 D_801871CC; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80186630[]; +extern unsigned char D_80186660[]; +extern unsigned char D_801866B0[]; +extern unsigned char D_801866E0[]; +extern unsigned char D_80186710[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80186760[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80186828[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801868B0[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801868B8; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801B6400; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801B6404; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801868E8; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80186990[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801869B4[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801869A4; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801869C8[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801869D4[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801869E4[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801869FC[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801869EC; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80186A10[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80186A2C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80186A1C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80186A40[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80186A54[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80186A68; +extern void (*D_80186A90[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80186A70; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80186ADC[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80186AE0[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80186F44[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80186F54[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801B6438; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80186F7C[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80186F5C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80186F6C; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80186FBC[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80186FC4[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80186F90; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80186FD0[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80186FA0; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801B6440; +extern s32 D_801B644C; +extern s32 D_801B6450; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018700C[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80186FE0[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801B6448; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018725C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018707C[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80187300[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80187454[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80187270; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018745C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80187280; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801872A0; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80187464[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_8018748C[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80187498[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_8018730C[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_8018753C; +extern void func_8015D380(s32 a0); +extern unsigned char D_80186620[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80187550[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_8018758C[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_801875D4; +extern u16 D_801875D6; +extern u16 D_801875D8; +extern s32 D_801875DC; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_801875E4; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_801872F0; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80187668[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80187718[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80187748[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_801877AC; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801B6458[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_801877D0[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801B64B0[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80187818[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80187808; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801B5D48[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80187820[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80187874[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_8018783C; +extern s16 D_80187870; +extern s16 D_8018786E; +extern s16 D_8018786C; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80187880[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801B6510; +extern u8 D_801B6511; +extern u8 D_801B6512; +extern u8 D_801B6513; +extern u8 D_801B6514; +extern u8 D_801B6515; +extern u8 D_801B6516; +extern u8 D_801B6517; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80187890[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801B6550; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_801878D4[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80187950[]; +extern s32 D_80187970[]; +extern u8 D_801879EC[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80187A0C[]; +extern u8 D_80187A2C[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80187AC8[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80187B44[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801B5D58; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80187B50[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80187B58[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80187C20[])(void); +extern void func_80166618(void *a0); +extern void (*D_80187C30[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80187C40[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80187C4C[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80187BAC[]; +extern u8 D_80187BC0[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80187C64[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80187C6C[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80187C74[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80187C7C[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80187C84[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80187C8C[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80187C94[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80187D48[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80187D50[])(void); +extern void func_80169F00(void *a0); +extern char D_80187D00[]; +extern char D_80187CC0[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80187D88[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80187D94[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80187DDC[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80187D9C[]; + extern u8 D_80187DAC[]; + extern u8 D_801B6820[]; + extern u8 D_801B6848[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80187D9C, D_801B6820) + 3; + func_8001CE28(obj, D_801B6820); + } else { + var_s3 = func_80024054(D_80187DAC, D_801B6848) + 9; + func_8001CE28(obj, D_801B6848); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80187E58[])(void); + +void func_8016B4BC(void *a0) { + D_80187E58[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801B6870; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801B6870); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80187E4C[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80187E4C; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80187E90[]; +extern unsigned short D_80187E98[]; +extern unsigned short D_80187EA0[]; +extern unsigned char D_801B6878[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801B6878 + param_2 * 0x40); + puVar3 = D_80187E90[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80187E98[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80187EA0[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801B6870; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801B6870, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80187EA8[])(void); + +void func_8016BBA4(void *a0) { + D_80187EA8[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801B69AC; + extern u8 D_801B69AD; + extern u8 D_801B69AE; + extern M2C_UNK D_801B69B0; + extern u8 D_801B69B1; + extern u8 D_801B69B2; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801B69AC) = 0x20; + D_801B69AD = 0x20; + D_801B69AE = 0; + (*(u8 *)&D_801B69B0) = 0xc0; + D_801B69B1 = 0xc0; + D_801B69B2 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801B69AC; +extern M2C_UNK D_801B69B0; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801B69AC, &D_801B69B0, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801B69AD; + extern u8 D_801B69AE; + extern u8 D_801B69B1; + extern u8 D_801B69B2; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801B69AC); + if (*p1 != 0) *p1 -= 4; + if (D_801B69AD != 0) D_801B69AD -= 4; + if (D_801B69AE != 0) D_801B69AE -= 4; + p2 = &(*(u8 *)&D_801B69B0); + if (*p2 != 0) *p2 -= 4; + if (D_801B69B1 != 0) D_801B69B1 -= 4; + if (D_801B69B2 != 0) D_801B69B2 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801B69AC), &(*(int *)&D_801B69B0), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801B6938; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801B6938); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80187EB8; + extern s32 D_80187EC0; + extern s32 D_80187EC8; + extern s32 D_80187ED0; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80187EB8, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80187EC0, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80187EC8, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80187ED0, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80187ED8[])(void); + +void func_8016C14C(void *a0) { + D_80187ED8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801B69B4[]; +extern u8 D_801B69BC[]; +extern u8 D_801B696C[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801B69B4, D_801B69BC, D_801B696C); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801B69C8[]; + extern u8 D_801B6A88; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801B69C8[1] = 0xff; + D_801B69C8[2] = 0x10; + D_801B69C8[0] = 0x10; + D_801B69C8[6] = 0; + D_801B69C8[5] = 0; + D_801B69C8[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801B69C8, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801B6A88, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801B69C8); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8016AB6C", func_8016C998); + + +extern void (*D_80187EE0[])(void); + +void func_8016CB84(void *a0) { + D_80187EE0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801B6A88[]; + + + Blk_8016CF04_8016CF04 *p = &D_801B6A88[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80187EFC[])(void); + +void func_8016D19C(void *a0) { + D_80187EFC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80187F04[])(void); + +void func_8016D428(void *a0) { + D_80187F04[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80187F6C[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80187F6C[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80187F10; +extern u8 D_80187F1C; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80187F10, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80187F1C); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80187FA0[])(void); + +void func_8016DEA4(void *a0) { + D_80187FA0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80187FA8[])(void); + +void func_8016DF20(void *a0) { + D_80187FA8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80187FFC[])(void); + +void func_8016E5B8(void *a0) { + D_80187FFC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80187FBC[4]; + extern s32 D_80187FDC; + extern s32 D_80187FE4; + extern s32 D_80187FEC; + extern s32 D_80187FF4; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80187FBC[0], pp, &tmp); + RotTransSV(&D_80187FBC[1], &prim.v[1], &tmp); + RotTransSV(&D_80187FBC[2], &prim.v[2], &tmp); + RotTransSV(&D_80187FBC[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80187FDC; + prim.f1 = D_80187FE4; + prim.f2 = D_80187FEC; + prim.f3 = D_80187FF4; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_8018803C[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_8018803C[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80188030[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80188030[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80188020[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80188020[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80188030[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80188030[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80188030[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_8018804C; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_8018804C; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_801880C4[])(void); + +void func_8016F6E0(void *a0) { + D_801880C4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_801880CC[])(void); + +void func_8016F798(void *a0) { + D_801880CC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_801880D4[])(void); + +void func_8016F834(void *a0) { + D_801880D4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_801880DC[])(void); + +void func_8016F8E4(void *a0) { + D_801880DC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_801880E4[])(void); + +void func_8016F9C4(void *a0) { + D_801880E4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_801880EC[])(void); + +void func_8016FA84(void *a0) { + D_801880EC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_801880F8[])(void); + +void func_8016FB7C(void *a0) { + D_801880F8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80188104[])(void); + +void func_8016FC90(void *a0) { + D_80188104[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80188110[])(void); + +void func_8016FDB4(void *a0) { + D_80188110[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80188120[])(void); + +void func_8016FF30(void *a0) { + D_80188120[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80188130[])(void); + +void func_8016FFDC(void *a0) { + D_80188130[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80188138[])(void); + +void func_80170150(void *a0) { + D_80188138[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80188140[])(void); + +void func_80170240(void *a0) { + D_80188140[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80188148[])(void); + +void func_801702FC(void *a0) { + D_80188148[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80188150[])(void); + +void func_801703E0(void *a0) { + D_80188150[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80188158[])(void); + +void func_801704B0(void *a0) { + D_80188158[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80188160[])(void); + +void func_80170548(void *a0) { + D_80188160[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80188168[])(void); + +void func_801705F8(void *a0) { + D_80188168[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80188170[])(void); + +void func_801706AC(void *a0) { + D_80188170[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80188178[])(void); + +void func_80170748(void *a0) { + D_80188178[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80188180[])(void); + +void func_80170810(void *a0) { + D_80188180[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80188188[])(void); + +void func_80170AD8(void *a0) { + D_80188188[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80188190[])(void); + +void func_80170BD8(void *a0) { + D_80188190[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80188198[])(void); + +void func_80170C74(void *a0) { + D_80188198[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8016AB6C", func_80170CF0); + + +extern void (*D_801881A0[])(void); + +void func_80170D68(void *a0) { + D_801881A0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_801881A8[])(void); + +void func_80170E34(void *a0) { + D_801881A8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_801881B0[])(void); + +void func_80170EFC(void *a0) { + D_801881B0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_801881B8[])(void); + +void func_80170FB0(void *a0) { + D_801881B8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_801881C0[])(void); + +void func_80171064(void *a0) { + D_801881C0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_801881C8[])(void); + +void func_80171120(void *a0) { + D_801881C8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_801881D0[])(void); + +void func_801711C0(void *a0) { + D_801881D0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_801881D8[])(void); + +void func_80171260(void *a0) { + D_801881D8[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_801881E0[])(void); + +void func_801714E4(void *a0) { + D_801881E0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8016AB6C", func_80172C50); + + +extern void (*D_80188224[])(void); + +void func_80172CA0(void *a0) { + D_80188224[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_801881E8; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_801881E8); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC02_035/ov_SC02_035_jr_8015AE2C.c b/src/ov_SC02_035/ov_SC02_035_jr_8015AE2C.c index 40bae354e..6b091e619 100644 --- a/src/ov_SC02_035/ov_SC02_035_jr_8015AE2C.c +++ b/src/ov_SC02_035/ov_SC02_035_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_8018763C[])(void); void func_8016AB30(void *a0) { D_8018763C[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_801876B8[])(void); - -void func_8016B4BC(void *a0) { - D_801876B8[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801BDBA0; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801BDBA0); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_801876AC[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_801876AC; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_801876F0[]; -extern unsigned short D_801876F8[]; -extern unsigned short D_80187700[]; -extern unsigned char D_801BDBA8[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801BDBA8 + param_2 * 0x40); - puVar3 = D_801876F0[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_801876F8[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80187700[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801BDBA0; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801BDBA0, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80187708[])(void); - -void func_8016BBA4(void *a0) { - D_80187708[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801BDCDC; - extern u8 D_801BDCDD; - extern u8 D_801BDCDE; - extern M2C_UNK D_801BDCE0; - extern u8 D_801BDCE1; - extern u8 D_801BDCE2; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801BDCDC) = 0x20; - D_801BDCDD = 0x20; - D_801BDCDE = 0; - (*(u8 *)&D_801BDCE0) = 0xc0; - D_801BDCE1 = 0xc0; - D_801BDCE2 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801BDCDC; -extern M2C_UNK D_801BDCE0; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801BDCDC, &D_801BDCE0, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801BDCDD; - extern u8 D_801BDCDE; - extern u8 D_801BDCE1; - extern u8 D_801BDCE2; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801BDCDC); - if (*p1 != 0) *p1 -= 4; - if (D_801BDCDD != 0) D_801BDCDD -= 4; - if (D_801BDCDE != 0) D_801BDCDE -= 4; - p2 = &(*(u8 *)&D_801BDCE0); - if (*p2 != 0) *p2 -= 4; - if (D_801BDCE1 != 0) D_801BDCE1 -= 4; - if (D_801BDCE2 != 0) D_801BDCE2 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801BDCDC), &(*(int *)&D_801BDCE0), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801BDC68; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801BDC68); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80187718; - extern s32 D_80187720; - extern s32 D_80187728; - extern s32 D_80187730; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80187718, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80187720, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80187728, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80187730, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80187738[])(void); - -void func_8016C14C(void *a0) { - D_80187738[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801BDCE4[]; -extern u8 D_801BDCEC[]; -extern u8 D_801BDC9C[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801BDCE4, D_801BDCEC, D_801BDC9C); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801BDCF8[]; - extern u8 D_801BDDB8; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801BDCF8[1] = 0xff; - D_801BDCF8[2] = 0x10; - D_801BDCF8[0] = 0x10; - D_801BDCF8[6] = 0; - D_801BDCF8[5] = 0; - D_801BDCF8[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801BDCF8, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801BDDB8, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801BDCF8); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8015AE2C", func_8016C998); - - -extern void (*D_80187740[])(void); - -void func_8016CB84(void *a0) { - D_80187740[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801BDDB8[]; - - - Blk_8016CF04_8016CF04 *p = &D_801BDDB8[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_8018775C[])(void); - -void func_8016D19C(void *a0) { - D_8018775C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80187764[])(void); - -void func_8016D428(void *a0) { - D_80187764[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_801877CC[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_801877CC[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80187770; -extern u8 D_8018777C; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80187770, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018777C); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80187800[])(void); - -void func_8016DEA4(void *a0) { - D_80187800[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80187808[])(void); - -void func_8016DF20(void *a0) { - D_80187808[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_8018785C[])(void); - -void func_8016E5B8(void *a0) { - D_8018785C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_8018781C[4]; - extern s32 D_8018783C; - extern s32 D_80187844; - extern s32 D_8018784C; - extern s32 D_80187854; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_8018781C[0], pp, &tmp); - RotTransSV(&D_8018781C[1], &prim.v[1], &tmp); - RotTransSV(&D_8018781C[2], &prim.v[2], &tmp); - RotTransSV(&D_8018781C[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_8018783C; - prim.f1 = D_80187844; - prim.f2 = D_8018784C; - prim.f3 = D_80187854; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_8018789C[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_8018789C[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80187890[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80187890[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80187880[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80187880[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80187890[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80187890[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80187890[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_801878AC; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_801878AC; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80187924[])(void); - -void func_8016F6E0(void *a0) { - D_80187924[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_8018792C[])(void); - -void func_8016F798(void *a0) { - D_8018792C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80187934[])(void); - -void func_8016F834(void *a0) { - D_80187934[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_8018793C[])(void); - -void func_8016F8E4(void *a0) { - D_8018793C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80187944[])(void); - -void func_8016F9C4(void *a0) { - D_80187944[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_8018794C[])(void); - -void func_8016FA84(void *a0) { - D_8018794C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80187958[])(void); - -void func_8016FB7C(void *a0) { - D_80187958[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80187964[])(void); - -void func_8016FC90(void *a0) { - D_80187964[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80187970[])(void); - -void func_8016FDB4(void *a0) { - D_80187970[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80187980[])(void); - -void func_8016FF30(void *a0) { - D_80187980[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80187990[])(void); - -void func_8016FFDC(void *a0) { - D_80187990[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80187998[])(void); - -void func_80170150(void *a0) { - D_80187998[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_801879A0[])(void); - -void func_80170240(void *a0) { - D_801879A0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_801879A8[])(void); - -void func_801702FC(void *a0) { - D_801879A8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_801879B0[])(void); - -void func_801703E0(void *a0) { - D_801879B0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_801879B8[])(void); - -void func_801704B0(void *a0) { - D_801879B8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_801879C0[])(void); - -void func_80170548(void *a0) { - D_801879C0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_801879C8[])(void); - -void func_801705F8(void *a0) { - D_801879C8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_801879D0[])(void); - -void func_801706AC(void *a0) { - D_801879D0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_801879D8[])(void); - -void func_80170748(void *a0) { - D_801879D8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_801879E0[])(void); - -void func_80170810(void *a0) { - D_801879E0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_801879E8[])(void); - -void func_80170AD8(void *a0) { - D_801879E8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_801879F0[])(void); - -void func_80170BD8(void *a0) { - D_801879F0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_801879F8[])(void); - -void func_80170C74(void *a0) { - D_801879F8[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80187A00[])(void); - -void func_80170D68(void *a0) { - D_80187A00[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80187A08[])(void); - -void func_80170E34(void *a0) { - D_80187A08[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80187A10[])(void); - -void func_80170EFC(void *a0) { - D_80187A10[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80187A18[])(void); - -void func_80170FB0(void *a0) { - D_80187A18[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80187A20[])(void); - -void func_80171064(void *a0) { - D_80187A20[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80187A28[])(void); - -void func_80171120(void *a0) { - D_80187A28[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80187A30[])(void); - -void func_801711C0(void *a0) { - D_80187A30[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80187A38[])(void); - -void func_80171260(void *a0) { - D_80187A38[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80187A40[])(void); - -void func_801714E4(void *a0) { - D_80187A40[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8015AE2C", func_80172C50); - - -extern void (*D_80187A84[])(void); - -void func_80172CA0(void *a0) { - D_80187A84[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80187A48; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80187A48); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC02_035/ov_SC02_035_jr_8016AB6C.c b/src/ov_SC02_035/ov_SC02_035_jr_8016AB6C.c new file mode 100644 index 000000000..bb0d5e472 --- /dev/null +++ b/src/ov_SC02_035/ov_SC02_035_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80186A08; +extern u8 D_80186978; +extern u8 D_80186954; +extern u8 D_80186930; +extern u8 D_801869E4; +extern u8 D_801869C0; +extern u8 D_8018699C; +extern u8 D_8018690C; +extern void func_80145934(void); +extern u8 D_80186A98; +extern u8 D_80186A74; +extern u8 D_80186A50; +extern u8 D_80186A2C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80185E90[]; +extern unsigned char D_80185EC0[]; +extern unsigned char D_80185F10[]; +extern unsigned char D_80185F40[]; +extern unsigned char D_80185F70[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80185FC0[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80186088[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80186110[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80186118; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801BD730; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801BD734; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80186148; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801861F0[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80186214[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80186204; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80186228[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80186234[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80186244[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018625C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018624C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80186270[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018628C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018627C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801862A0[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801862B4[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801862C8; +extern void (*D_801862F0[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801862D0; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018633C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80186340[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_801867A4[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_801867B4[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801BD768; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_801867DC[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801867BC; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_801867CC; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018681C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80186824[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_801867F0; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80186830[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80186800; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801BD770; +extern s32 D_801BD77C; +extern s32 D_801BD780; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018686C[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80186840[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801BD778; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80186ABC[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_801868DC[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80186B60[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80186CB4[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80186AD0; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80186CBC[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80186AE0; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80186B00; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80186CC4[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80186CEC[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80186CF8[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80186B6C[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80186D9C; +extern void func_8015D380(s32 a0); +extern unsigned char D_80185E80[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80186DB0[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80186DEC[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80186E34; +extern u16 D_80186E36; +extern u16 D_80186E38; +extern s32 D_80186E3C; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80186E44; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80186B50; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80186EC8[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80186F78[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80186FA8[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_8018700C; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801BD788[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80187030[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801BD7E0[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80187078[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80187068; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801BD010[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80187080[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_801870D4[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_8018709C; +extern s16 D_801870D0; +extern s16 D_801870CE; +extern s16 D_801870CC; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_801870E0[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801BD840; +extern u8 D_801BD841; +extern u8 D_801BD842; +extern u8 D_801BD843; +extern u8 D_801BD844; +extern u8 D_801BD845; +extern u8 D_801BD846; +extern u8 D_801BD847; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_801870F0[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801BD880; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80187134[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_801871B0[]; +extern s32 D_801871D0[]; +extern u8 D_8018724C[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_8018726C[]; +extern u8 D_8018728C[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80187328[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_801873A4[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801BD020; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_801873B0[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_801873B8[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80187480[])(void); +extern void func_80166618(void *a0); +extern void (*D_80187490[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_801874A0[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_801874AC[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_8018740C[]; +extern u8 D_80187420[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_801874C4[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_801874CC[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_801874D4[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_801874DC[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_801874E4[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_801874EC[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_801874F4[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_801875A8[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_801875B0[])(void); +extern void func_80169F00(void *a0); +extern char D_80187560[]; +extern char D_80187520[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_801875E8[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_801875F4[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_8018763C[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_801875FC[]; + extern u8 D_8018760C[]; + extern u8 D_801BDB50[]; + extern u8 D_801BDB78[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_801875FC, D_801BDB50) + 3; + func_8001CE28(obj, D_801BDB50); + } else { + var_s3 = func_80024054(D_8018760C, D_801BDB78) + 9; + func_8001CE28(obj, D_801BDB78); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_801876B8[])(void); + +void func_8016B4BC(void *a0) { + D_801876B8[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801BDBA0; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801BDBA0); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_801876AC[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_801876AC; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_801876F0[]; +extern unsigned short D_801876F8[]; +extern unsigned short D_80187700[]; +extern unsigned char D_801BDBA8[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801BDBA8 + param_2 * 0x40); + puVar3 = D_801876F0[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_801876F8[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80187700[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801BDBA0; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801BDBA0, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80187708[])(void); + +void func_8016BBA4(void *a0) { + D_80187708[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801BDCDC; + extern u8 D_801BDCDD; + extern u8 D_801BDCDE; + extern M2C_UNK D_801BDCE0; + extern u8 D_801BDCE1; + extern u8 D_801BDCE2; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801BDCDC) = 0x20; + D_801BDCDD = 0x20; + D_801BDCDE = 0; + (*(u8 *)&D_801BDCE0) = 0xc0; + D_801BDCE1 = 0xc0; + D_801BDCE2 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801BDCDC; +extern M2C_UNK D_801BDCE0; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801BDCDC, &D_801BDCE0, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801BDCDD; + extern u8 D_801BDCDE; + extern u8 D_801BDCE1; + extern u8 D_801BDCE2; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801BDCDC); + if (*p1 != 0) *p1 -= 4; + if (D_801BDCDD != 0) D_801BDCDD -= 4; + if (D_801BDCDE != 0) D_801BDCDE -= 4; + p2 = &(*(u8 *)&D_801BDCE0); + if (*p2 != 0) *p2 -= 4; + if (D_801BDCE1 != 0) D_801BDCE1 -= 4; + if (D_801BDCE2 != 0) D_801BDCE2 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801BDCDC), &(*(int *)&D_801BDCE0), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801BDC68; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801BDC68); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80187718; + extern s32 D_80187720; + extern s32 D_80187728; + extern s32 D_80187730; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80187718, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80187720, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80187728, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80187730, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80187738[])(void); + +void func_8016C14C(void *a0) { + D_80187738[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801BDCE4[]; +extern u8 D_801BDCEC[]; +extern u8 D_801BDC9C[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801BDCE4, D_801BDCEC, D_801BDC9C); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801BDCF8[]; + extern u8 D_801BDDB8; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801BDCF8[1] = 0xff; + D_801BDCF8[2] = 0x10; + D_801BDCF8[0] = 0x10; + D_801BDCF8[6] = 0; + D_801BDCF8[5] = 0; + D_801BDCF8[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801BDCF8, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801BDDB8, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801BDCF8); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8016AB6C", func_8016C998); + + +extern void (*D_80187740[])(void); + +void func_8016CB84(void *a0) { + D_80187740[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801BDDB8[]; + + + Blk_8016CF04_8016CF04 *p = &D_801BDDB8[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_8018775C[])(void); + +void func_8016D19C(void *a0) { + D_8018775C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80187764[])(void); + +void func_8016D428(void *a0) { + D_80187764[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_801877CC[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_801877CC[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80187770; +extern u8 D_8018777C; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80187770, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018777C); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80187800[])(void); + +void func_8016DEA4(void *a0) { + D_80187800[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80187808[])(void); + +void func_8016DF20(void *a0) { + D_80187808[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_8018785C[])(void); + +void func_8016E5B8(void *a0) { + D_8018785C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_8018781C[4]; + extern s32 D_8018783C; + extern s32 D_80187844; + extern s32 D_8018784C; + extern s32 D_80187854; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_8018781C[0], pp, &tmp); + RotTransSV(&D_8018781C[1], &prim.v[1], &tmp); + RotTransSV(&D_8018781C[2], &prim.v[2], &tmp); + RotTransSV(&D_8018781C[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_8018783C; + prim.f1 = D_80187844; + prim.f2 = D_8018784C; + prim.f3 = D_80187854; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_8018789C[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_8018789C[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80187890[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80187890[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80187880[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80187880[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80187890[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80187890[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80187890[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_801878AC; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_801878AC; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80187924[])(void); + +void func_8016F6E0(void *a0) { + D_80187924[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_8018792C[])(void); + +void func_8016F798(void *a0) { + D_8018792C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80187934[])(void); + +void func_8016F834(void *a0) { + D_80187934[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_8018793C[])(void); + +void func_8016F8E4(void *a0) { + D_8018793C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80187944[])(void); + +void func_8016F9C4(void *a0) { + D_80187944[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_8018794C[])(void); + +void func_8016FA84(void *a0) { + D_8018794C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80187958[])(void); + +void func_8016FB7C(void *a0) { + D_80187958[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80187964[])(void); + +void func_8016FC90(void *a0) { + D_80187964[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80187970[])(void); + +void func_8016FDB4(void *a0) { + D_80187970[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80187980[])(void); + +void func_8016FF30(void *a0) { + D_80187980[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80187990[])(void); + +void func_8016FFDC(void *a0) { + D_80187990[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80187998[])(void); + +void func_80170150(void *a0) { + D_80187998[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_801879A0[])(void); + +void func_80170240(void *a0) { + D_801879A0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_801879A8[])(void); + +void func_801702FC(void *a0) { + D_801879A8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_801879B0[])(void); + +void func_801703E0(void *a0) { + D_801879B0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_801879B8[])(void); + +void func_801704B0(void *a0) { + D_801879B8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_801879C0[])(void); + +void func_80170548(void *a0) { + D_801879C0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_801879C8[])(void); + +void func_801705F8(void *a0) { + D_801879C8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_801879D0[])(void); + +void func_801706AC(void *a0) { + D_801879D0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_801879D8[])(void); + +void func_80170748(void *a0) { + D_801879D8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_801879E0[])(void); + +void func_80170810(void *a0) { + D_801879E0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_801879E8[])(void); + +void func_80170AD8(void *a0) { + D_801879E8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_801879F0[])(void); + +void func_80170BD8(void *a0) { + D_801879F0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_801879F8[])(void); + +void func_80170C74(void *a0) { + D_801879F8[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80187A00[])(void); + +void func_80170D68(void *a0) { + D_80187A00[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80187A08[])(void); + +void func_80170E34(void *a0) { + D_80187A08[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80187A10[])(void); + +void func_80170EFC(void *a0) { + D_80187A10[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80187A18[])(void); + +void func_80170FB0(void *a0) { + D_80187A18[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80187A20[])(void); + +void func_80171064(void *a0) { + D_80187A20[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80187A28[])(void); + +void func_80171120(void *a0) { + D_80187A28[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80187A30[])(void); + +void func_801711C0(void *a0) { + D_80187A30[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80187A38[])(void); + +void func_80171260(void *a0) { + D_80187A38[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80187A40[])(void); + +void func_801714E4(void *a0) { + D_80187A40[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8016AB6C", func_80172C50); + + +extern void (*D_80187A84[])(void); + +void func_80172CA0(void *a0) { + D_80187A84[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80187A48; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80187A48); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC02_039/ov_SC02_039_jr_8015AE2C.c b/src/ov_SC02_039/ov_SC02_039_jr_8015AE2C.c index c84f3d587..85151ff93 100644 --- a/src/ov_SC02_039/ov_SC02_039_jr_8015AE2C.c +++ b/src/ov_SC02_039/ov_SC02_039_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_80182268[])(void); void func_8016AB30(void *a0) { D_80182268[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_801822E4[])(void); - -void func_8016B4BC(void *a0) { - D_801822E4[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_8019FF50; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_8019FF50); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_801822D8[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_801822D8; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_8018231C[]; -extern unsigned short D_80182324[]; -extern unsigned short D_8018232C[]; -extern unsigned char D_8019FF58[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_8019FF58 + param_2 * 0x40); - puVar3 = D_8018231C[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80182324[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_8018232C[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_8019FF50; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_8019FF50, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80182334[])(void); - -void func_8016BBA4(void *a0) { - D_80182334[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801A008C; - extern u8 D_801A008D; - extern u8 D_801A008E; - extern M2C_UNK D_801A0090; - extern u8 D_801A0091; - extern u8 D_801A0092; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801A008C) = 0x20; - D_801A008D = 0x20; - D_801A008E = 0; - (*(u8 *)&D_801A0090) = 0xc0; - D_801A0091 = 0xc0; - D_801A0092 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801A008C; -extern M2C_UNK D_801A0090; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801A008C, &D_801A0090, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801A008D; - extern u8 D_801A008E; - extern u8 D_801A0091; - extern u8 D_801A0092; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801A008C); - if (*p1 != 0) *p1 -= 4; - if (D_801A008D != 0) D_801A008D -= 4; - if (D_801A008E != 0) D_801A008E -= 4; - p2 = &(*(u8 *)&D_801A0090); - if (*p2 != 0) *p2 -= 4; - if (D_801A0091 != 0) D_801A0091 -= 4; - if (D_801A0092 != 0) D_801A0092 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801A008C), &(*(int *)&D_801A0090), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801A0018; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801A0018); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80182344; - extern s32 D_8018234C; - extern s32 D_80182354; - extern s32 D_8018235C; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80182344, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_8018234C, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80182354, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_8018235C, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80182364[])(void); - -void func_8016C14C(void *a0) { - D_80182364[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801A0094[]; -extern u8 D_801A009C[]; -extern u8 D_801A004C[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801A0094, D_801A009C, D_801A004C); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801A00A8[]; - extern u8 D_801A0168; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801A00A8[1] = 0xff; - D_801A00A8[2] = 0x10; - D_801A00A8[0] = 0x10; - D_801A00A8[6] = 0; - D_801A00A8[5] = 0; - D_801A00A8[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801A00A8, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801A0168, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801A00A8); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8015AE2C", func_8016C998); - - -extern void (*D_8018236C[])(void); - -void func_8016CB84(void *a0) { - D_8018236C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801A0168[]; - - - Blk_8016CF04_8016CF04 *p = &D_801A0168[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80182388[])(void); - -void func_8016D19C(void *a0) { - D_80182388[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80182390[])(void); - -void func_8016D428(void *a0) { - D_80182390[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_801823F8[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_801823F8[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_8018239C; -extern u8 D_801823A8; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018239C, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801823A8); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8015AE2C", func_8016DC20); - - -extern void (*D_8018242C[])(void); - -void func_8016DEA4(void *a0) { - D_8018242C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80182434[])(void); - -void func_8016DF20(void *a0) { - D_80182434[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80182488[])(void); - -void func_8016E5B8(void *a0) { - D_80182488[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80182448[4]; - extern s32 D_80182468; - extern s32 D_80182470; - extern s32 D_80182478; - extern s32 D_80182480; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80182448[0], pp, &tmp); - RotTransSV(&D_80182448[1], &prim.v[1], &tmp); - RotTransSV(&D_80182448[2], &prim.v[2], &tmp); - RotTransSV(&D_80182448[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80182468; - prim.f1 = D_80182470; - prim.f2 = D_80182478; - prim.f3 = D_80182480; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_801824C8[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_801824C8[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_801824BC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_801824BC[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_801824AC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_801824AC[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801824BC[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_801824BC[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_801824BC[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_801824D8; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_801824D8; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80182550[])(void); - -void func_8016F6E0(void *a0) { - D_80182550[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80182558[])(void); - -void func_8016F798(void *a0) { - D_80182558[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80182560[])(void); - -void func_8016F834(void *a0) { - D_80182560[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80182568[])(void); - -void func_8016F8E4(void *a0) { - D_80182568[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80182570[])(void); - -void func_8016F9C4(void *a0) { - D_80182570[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80182578[])(void); - -void func_8016FA84(void *a0) { - D_80182578[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80182584[])(void); - -void func_8016FB7C(void *a0) { - D_80182584[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80182590[])(void); - -void func_8016FC90(void *a0) { - D_80182590[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_8018259C[])(void); - -void func_8016FDB4(void *a0) { - D_8018259C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_801825AC[])(void); - -void func_8016FF30(void *a0) { - D_801825AC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_801825BC[])(void); - -void func_8016FFDC(void *a0) { - D_801825BC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_801825C4[])(void); - -void func_80170150(void *a0) { - D_801825C4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_801825CC[])(void); - -void func_80170240(void *a0) { - D_801825CC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_801825D4[])(void); - -void func_801702FC(void *a0) { - D_801825D4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_801825DC[])(void); - -void func_801703E0(void *a0) { - D_801825DC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_801825E4[])(void); - -void func_801704B0(void *a0) { - D_801825E4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_801825EC[])(void); - -void func_80170548(void *a0) { - D_801825EC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_801825F4[])(void); - -void func_801705F8(void *a0) { - D_801825F4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_801825FC[])(void); - -void func_801706AC(void *a0) { - D_801825FC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80182604[])(void); - -void func_80170748(void *a0) { - D_80182604[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_8018260C[])(void); - -void func_80170810(void *a0) { - D_8018260C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80182614[])(void); - -void func_80170AD8(void *a0) { - D_80182614[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_8018261C[])(void); - -void func_80170BD8(void *a0) { - D_8018261C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80182624[])(void); - -void func_80170C74(void *a0) { - D_80182624[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8015AE2C", func_80170CF0); - - -extern void (*D_8018262C[])(void); - -void func_80170D68(void *a0) { - D_8018262C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80182634[])(void); - -void func_80170E34(void *a0) { - D_80182634[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_8018263C[])(void); - -void func_80170EFC(void *a0) { - D_8018263C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80182644[])(void); - -void func_80170FB0(void *a0) { - D_80182644[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_8018264C[])(void); - -void func_80171064(void *a0) { - D_8018264C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80182654[])(void); - -void func_80171120(void *a0) { - D_80182654[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_8018265C[])(void); - -void func_801711C0(void *a0) { - D_8018265C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80182664[])(void); - -void func_80171260(void *a0) { - D_80182664[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_8018266C[])(void); - -void func_801714E4(void *a0) { - D_8018266C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8015AE2C", func_80172C50); - - -extern void (*D_801826B0[])(void); - -void func_80172CA0(void *a0) { - D_801826B0[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80182674; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80182674); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC02_039/ov_SC02_039_jr_8016AB6C.c b/src/ov_SC02_039/ov_SC02_039_jr_8016AB6C.c new file mode 100644 index 000000000..c378f9515 --- /dev/null +++ b/src/ov_SC02_039/ov_SC02_039_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80181634; +extern u8 D_801815A4; +extern u8 D_80181580; +extern u8 D_8018155C; +extern u8 D_80181610; +extern u8 D_801815EC; +extern u8 D_801815C8; +extern u8 D_80181538; +extern void func_80145934(void); +extern u8 D_801816C4; +extern u8 D_801816A0; +extern u8 D_8018167C; +extern u8 D_80181658; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80180ABC[]; +extern unsigned char D_80180AEC[]; +extern unsigned char D_80180B3C[]; +extern unsigned char D_80180B6C[]; +extern unsigned char D_80180B9C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80180BEC[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80180CB4[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80180D3C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80180D44; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8019FAE0; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019FAE4; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80180D74; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80180E1C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80180E40[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80180E30; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80180E54[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80180E60[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80180E70[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80180E88[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80180E78; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80180E9C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80180EB8[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80180EA8; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80180ECC[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80180EE0[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80180EF4; +extern void (*D_80180F1C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80180EFC; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80180F68[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80180F6C[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_801813D0[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_801813E0[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_8019FB18; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80181408[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801813E8; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_801813F8; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80181448[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80181450[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018141C; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018145C[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018142C; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_8019FB20; +extern s32 D_8019FB2C; +extern s32 D_8019FB30; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80181498[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018146C[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_8019FB28; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_801816E8[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80181508[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018178C[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_801818E0[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_801816FC; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_801818E8[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018170C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018172C; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_801818F0[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80181918[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80181924[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80181798[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_801819C8; +extern void func_8015D380(s32 a0); +extern unsigned char D_80180AAC[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_801819DC[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80181A18[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80181A60; +extern u16 D_80181A62; +extern u16 D_80181A64; +extern s32 D_80181A68; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80181A70; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_8018177C; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80181AF4[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80181BA4[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80181BD4[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80181C38; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_8019FB38[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80181C5C[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_8019FB90[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80181CA4[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80181C94; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_8019F3FC[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80181CAC[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80181D00[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80181CC8; +extern s16 D_80181CFC; +extern s16 D_80181CFA; +extern s16 D_80181CF8; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80181D0C[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_8019FBF0; +extern u8 D_8019FBF1; +extern u8 D_8019FBF2; +extern u8 D_8019FBF3; +extern u8 D_8019FBF4; +extern u8 D_8019FBF5; +extern u8 D_8019FBF6; +extern u8 D_8019FBF7; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80181D1C[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_8019FC30; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80181D60[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80181DDC[]; +extern s32 D_80181DFC[]; +extern u8 D_80181E78[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80181E98[]; +extern u8 D_80181EB8[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80181F54[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80181FD0[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_8019F40C; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80181FDC[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80181FE4[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_801820AC[])(void); +extern void func_80166618(void *a0); +extern void (*D_801820BC[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_801820CC[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_801820D8[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80182038[]; +extern u8 D_8018204C[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_801820F0[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_801820F8[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80182100[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80182108[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80182110[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80182118[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80182120[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_801821D4[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_801821DC[])(void); +extern void func_80169F00(void *a0); +extern char D_8018218C[]; +extern char D_8018214C[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80182214[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80182220[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80182268[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80182228[]; + extern u8 D_80182238[]; + extern u8 D_8019FF00[]; + extern u8 D_8019FF28[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80182228, D_8019FF00) + 3; + func_8001CE28(obj, D_8019FF00); + } else { + var_s3 = func_80024054(D_80182238, D_8019FF28) + 9; + func_8001CE28(obj, D_8019FF28); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_801822E4[])(void); + +void func_8016B4BC(void *a0) { + D_801822E4[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_8019FF50; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_8019FF50); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_801822D8[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_801822D8; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_8018231C[]; +extern unsigned short D_80182324[]; +extern unsigned short D_8018232C[]; +extern unsigned char D_8019FF58[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_8019FF58 + param_2 * 0x40); + puVar3 = D_8018231C[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80182324[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_8018232C[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_8019FF50; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_8019FF50, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80182334[])(void); + +void func_8016BBA4(void *a0) { + D_80182334[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801A008C; + extern u8 D_801A008D; + extern u8 D_801A008E; + extern M2C_UNK D_801A0090; + extern u8 D_801A0091; + extern u8 D_801A0092; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801A008C) = 0x20; + D_801A008D = 0x20; + D_801A008E = 0; + (*(u8 *)&D_801A0090) = 0xc0; + D_801A0091 = 0xc0; + D_801A0092 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801A008C; +extern M2C_UNK D_801A0090; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801A008C, &D_801A0090, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801A008D; + extern u8 D_801A008E; + extern u8 D_801A0091; + extern u8 D_801A0092; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801A008C); + if (*p1 != 0) *p1 -= 4; + if (D_801A008D != 0) D_801A008D -= 4; + if (D_801A008E != 0) D_801A008E -= 4; + p2 = &(*(u8 *)&D_801A0090); + if (*p2 != 0) *p2 -= 4; + if (D_801A0091 != 0) D_801A0091 -= 4; + if (D_801A0092 != 0) D_801A0092 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801A008C), &(*(int *)&D_801A0090), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801A0018; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801A0018); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80182344; + extern s32 D_8018234C; + extern s32 D_80182354; + extern s32 D_8018235C; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80182344, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_8018234C, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80182354, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_8018235C, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80182364[])(void); + +void func_8016C14C(void *a0) { + D_80182364[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801A0094[]; +extern u8 D_801A009C[]; +extern u8 D_801A004C[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801A0094, D_801A009C, D_801A004C); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801A00A8[]; + extern u8 D_801A0168; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801A00A8[1] = 0xff; + D_801A00A8[2] = 0x10; + D_801A00A8[0] = 0x10; + D_801A00A8[6] = 0; + D_801A00A8[5] = 0; + D_801A00A8[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801A00A8, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801A0168, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801A00A8); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8016AB6C", func_8016C998); + + +extern void (*D_8018236C[])(void); + +void func_8016CB84(void *a0) { + D_8018236C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801A0168[]; + + + Blk_8016CF04_8016CF04 *p = &D_801A0168[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80182388[])(void); + +void func_8016D19C(void *a0) { + D_80182388[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80182390[])(void); + +void func_8016D428(void *a0) { + D_80182390[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_801823F8[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_801823F8[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_8018239C; +extern u8 D_801823A8; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018239C, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801823A8); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8016AB6C", func_8016DC20); + + +extern void (*D_8018242C[])(void); + +void func_8016DEA4(void *a0) { + D_8018242C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80182434[])(void); + +void func_8016DF20(void *a0) { + D_80182434[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80182488[])(void); + +void func_8016E5B8(void *a0) { + D_80182488[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80182448[4]; + extern s32 D_80182468; + extern s32 D_80182470; + extern s32 D_80182478; + extern s32 D_80182480; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80182448[0], pp, &tmp); + RotTransSV(&D_80182448[1], &prim.v[1], &tmp); + RotTransSV(&D_80182448[2], &prim.v[2], &tmp); + RotTransSV(&D_80182448[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80182468; + prim.f1 = D_80182470; + prim.f2 = D_80182478; + prim.f3 = D_80182480; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_801824C8[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_801824C8[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_801824BC[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_801824BC[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_801824AC[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_801824AC[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801824BC[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_801824BC[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_801824BC[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_801824D8; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_801824D8; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80182550[])(void); + +void func_8016F6E0(void *a0) { + D_80182550[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80182558[])(void); + +void func_8016F798(void *a0) { + D_80182558[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80182560[])(void); + +void func_8016F834(void *a0) { + D_80182560[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80182568[])(void); + +void func_8016F8E4(void *a0) { + D_80182568[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80182570[])(void); + +void func_8016F9C4(void *a0) { + D_80182570[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80182578[])(void); + +void func_8016FA84(void *a0) { + D_80182578[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80182584[])(void); + +void func_8016FB7C(void *a0) { + D_80182584[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80182590[])(void); + +void func_8016FC90(void *a0) { + D_80182590[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_8018259C[])(void); + +void func_8016FDB4(void *a0) { + D_8018259C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_801825AC[])(void); + +void func_8016FF30(void *a0) { + D_801825AC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_801825BC[])(void); + +void func_8016FFDC(void *a0) { + D_801825BC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_801825C4[])(void); + +void func_80170150(void *a0) { + D_801825C4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_801825CC[])(void); + +void func_80170240(void *a0) { + D_801825CC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_801825D4[])(void); + +void func_801702FC(void *a0) { + D_801825D4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_801825DC[])(void); + +void func_801703E0(void *a0) { + D_801825DC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_801825E4[])(void); + +void func_801704B0(void *a0) { + D_801825E4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_801825EC[])(void); + +void func_80170548(void *a0) { + D_801825EC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_801825F4[])(void); + +void func_801705F8(void *a0) { + D_801825F4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_801825FC[])(void); + +void func_801706AC(void *a0) { + D_801825FC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80182604[])(void); + +void func_80170748(void *a0) { + D_80182604[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_8018260C[])(void); + +void func_80170810(void *a0) { + D_8018260C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80182614[])(void); + +void func_80170AD8(void *a0) { + D_80182614[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_8018261C[])(void); + +void func_80170BD8(void *a0) { + D_8018261C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80182624[])(void); + +void func_80170C74(void *a0) { + D_80182624[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8016AB6C", func_80170CF0); + + +extern void (*D_8018262C[])(void); + +void func_80170D68(void *a0) { + D_8018262C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80182634[])(void); + +void func_80170E34(void *a0) { + D_80182634[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_8018263C[])(void); + +void func_80170EFC(void *a0) { + D_8018263C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80182644[])(void); + +void func_80170FB0(void *a0) { + D_80182644[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_8018264C[])(void); + +void func_80171064(void *a0) { + D_8018264C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80182654[])(void); + +void func_80171120(void *a0) { + D_80182654[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_8018265C[])(void); + +void func_801711C0(void *a0) { + D_8018265C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80182664[])(void); + +void func_80171260(void *a0) { + D_80182664[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_8018266C[])(void); + +void func_801714E4(void *a0) { + D_8018266C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8016AB6C", func_80172C50); + + +extern void (*D_801826B0[])(void); + +void func_80172CA0(void *a0) { + D_801826B0[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80182674; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80182674); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC02_041/ov_SC02_041_jr_8015AE2C.c b/src/ov_SC02_041/ov_SC02_041_jr_8015AE2C.c index c41a6fcfc..bf39a9709 100644 --- a/src/ov_SC02_041/ov_SC02_041_jr_8015AE2C.c +++ b/src/ov_SC02_041/ov_SC02_041_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_80187F38[])(void); void func_8016AB30(void *a0) { D_80187F38[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80187FB4[])(void); - -void func_8016B4BC(void *a0) { - D_80187FB4[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801B82C8; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801B82C8); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80187FA8[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80187FA8; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80187FEC[]; -extern unsigned short D_80187FF4[]; -extern unsigned short D_80187FFC[]; -extern unsigned char D_801B82D0[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801B82D0 + param_2 * 0x40); - puVar3 = D_80187FEC[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80187FF4[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80187FFC[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801B82C8; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801B82C8, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80188004[])(void); - -void func_8016BBA4(void *a0) { - D_80188004[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801B8404; - extern u8 D_801B8405; - extern u8 D_801B8406; - extern M2C_UNK D_801B8408; - extern u8 D_801B8409; - extern u8 D_801B840A; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801B8404) = 0x20; - D_801B8405 = 0x20; - D_801B8406 = 0; - (*(u8 *)&D_801B8408) = 0xc0; - D_801B8409 = 0xc0; - D_801B840A = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801B8404; -extern M2C_UNK D_801B8408; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801B8404, &D_801B8408, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801B8405; - extern u8 D_801B8406; - extern u8 D_801B8409; - extern u8 D_801B840A; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801B8404); - if (*p1 != 0) *p1 -= 4; - if (D_801B8405 != 0) D_801B8405 -= 4; - if (D_801B8406 != 0) D_801B8406 -= 4; - p2 = &(*(u8 *)&D_801B8408); - if (*p2 != 0) *p2 -= 4; - if (D_801B8409 != 0) D_801B8409 -= 4; - if (D_801B840A != 0) D_801B840A -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801B8404), &(*(int *)&D_801B8408), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801B8390; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801B8390); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80188014; - extern s32 D_8018801C; - extern s32 D_80188024; - extern s32 D_8018802C; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80188014, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_8018801C, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80188024, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_8018802C, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80188034[])(void); - -void func_8016C14C(void *a0) { - D_80188034[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801B840C[]; -extern u8 D_801B8414[]; -extern u8 D_801B83C4[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801B840C, D_801B8414, D_801B83C4); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801B8420[]; - extern u8 D_801B84E0; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801B8420[1] = 0xff; - D_801B8420[2] = 0x10; - D_801B8420[0] = 0x10; - D_801B8420[6] = 0; - D_801B8420[5] = 0; - D_801B8420[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801B8420, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801B84E0, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801B8420); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8015AE2C", func_8016C998); - - -extern void (*D_8018803C[])(void); - -void func_8016CB84(void *a0) { - D_8018803C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801B84E0[]; - - - Blk_8016CF04_8016CF04 *p = &D_801B84E0[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80188058[])(void); - -void func_8016D19C(void *a0) { - D_80188058[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80188060[])(void); - -void func_8016D428(void *a0) { - D_80188060[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_801880C8[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_801880C8[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_8018806C; -extern u8 D_80188078; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018806C, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80188078); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8015AE2C", func_8016DC20); - - -extern void (*D_801880FC[])(void); - -void func_8016DEA4(void *a0) { - D_801880FC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80188104[])(void); - -void func_8016DF20(void *a0) { - D_80188104[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80188158[])(void); - -void func_8016E5B8(void *a0) { - D_80188158[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80188118[4]; - extern s32 D_80188138; - extern s32 D_80188140; - extern s32 D_80188148; - extern s32 D_80188150; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80188118[0], pp, &tmp); - RotTransSV(&D_80188118[1], &prim.v[1], &tmp); - RotTransSV(&D_80188118[2], &prim.v[2], &tmp); - RotTransSV(&D_80188118[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80188138; - prim.f1 = D_80188140; - prim.f2 = D_80188148; - prim.f3 = D_80188150; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80188198[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80188198[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_8018818C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_8018818C[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_8018817C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_8018817C[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018818C[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_8018818C[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_8018818C[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_801881A8; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_801881A8; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80188220[])(void); - -void func_8016F6E0(void *a0) { - D_80188220[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80188228[])(void); - -void func_8016F798(void *a0) { - D_80188228[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80188230[])(void); - -void func_8016F834(void *a0) { - D_80188230[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80188238[])(void); - -void func_8016F8E4(void *a0) { - D_80188238[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80188240[])(void); - -void func_8016F9C4(void *a0) { - D_80188240[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80188248[])(void); - -void func_8016FA84(void *a0) { - D_80188248[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80188254[])(void); - -void func_8016FB7C(void *a0) { - D_80188254[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80188260[])(void); - -void func_8016FC90(void *a0) { - D_80188260[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_8018826C[])(void); - -void func_8016FDB4(void *a0) { - D_8018826C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_8018827C[])(void); - -void func_8016FF30(void *a0) { - D_8018827C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_8018828C[])(void); - -void func_8016FFDC(void *a0) { - D_8018828C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80188294[])(void); - -void func_80170150(void *a0) { - D_80188294[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_8018829C[])(void); - -void func_80170240(void *a0) { - D_8018829C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_801882A4[])(void); - -void func_801702FC(void *a0) { - D_801882A4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_801882AC[])(void); - -void func_801703E0(void *a0) { - D_801882AC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_801882B4[])(void); - -void func_801704B0(void *a0) { - D_801882B4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_801882BC[])(void); - -void func_80170548(void *a0) { - D_801882BC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_801882C4[])(void); - -void func_801705F8(void *a0) { - D_801882C4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_801882CC[])(void); - -void func_801706AC(void *a0) { - D_801882CC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_801882D4[])(void); - -void func_80170748(void *a0) { - D_801882D4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_801882DC[])(void); - -void func_80170810(void *a0) { - D_801882DC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_801882E4[])(void); - -void func_80170AD8(void *a0) { - D_801882E4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_801882EC[])(void); - -void func_80170BD8(void *a0) { - D_801882EC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_801882F4[])(void); - -void func_80170C74(void *a0) { - D_801882F4[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8015AE2C", func_80170CF0); - - -extern void (*D_801882FC[])(void); - -void func_80170D68(void *a0) { - D_801882FC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80188304[])(void); - -void func_80170E34(void *a0) { - D_80188304[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_8018830C[])(void); - -void func_80170EFC(void *a0) { - D_8018830C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80188314[])(void); - -void func_80170FB0(void *a0) { - D_80188314[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_8018831C[])(void); - -void func_80171064(void *a0) { - D_8018831C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80188324[])(void); - -void func_80171120(void *a0) { - D_80188324[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_8018832C[])(void); - -void func_801711C0(void *a0) { - D_8018832C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80188334[])(void); - -void func_80171260(void *a0) { - D_80188334[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_8018833C[])(void); - -void func_801714E4(void *a0) { - D_8018833C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8015AE2C", func_80172C50); - - -extern void (*D_80188380[])(void); - -void func_80172CA0(void *a0) { - D_80188380[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80188344; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80188344); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC02_041/ov_SC02_041_jr_8016AB6C.c b/src/ov_SC02_041/ov_SC02_041_jr_8016AB6C.c new file mode 100644 index 000000000..bff6f0dda --- /dev/null +++ b/src/ov_SC02_041/ov_SC02_041_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80187304; +extern u8 D_80187274; +extern u8 D_80187250; +extern u8 D_8018722C; +extern u8 D_801872E0; +extern u8 D_801872BC; +extern u8 D_80187298; +extern u8 D_80187208; +extern void func_80145934(void); +extern u8 D_80187394; +extern u8 D_80187370; +extern u8 D_8018734C; +extern u8 D_80187328; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018678C[]; +extern unsigned char D_801867BC[]; +extern unsigned char D_8018680C[]; +extern unsigned char D_8018683C[]; +extern unsigned char D_8018686C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801868BC[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80186984[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80186A0C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80186A14; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801B7E58; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801B7E5C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80186A44; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80186AEC[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80186B10[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80186B00; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80186B24[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80186B30[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80186B40[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80186B58[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80186B48; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80186B6C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80186B88[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80186B78; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80186B9C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80186BB0[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80186BC4; +extern void (*D_80186BEC[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80186BCC; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80186C38[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80186C3C[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_801870A0[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_801870B0[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801B7E90; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_801870D8[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801870B8; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_801870C8; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80187118[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80187120[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_801870EC; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018712C[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_801870FC; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801B7E98; +extern s32 D_801B7EA4; +extern s32 D_801B7EA8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80187168[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018713C[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801B7EA0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_801873B8[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_801871D8[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018745C[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_801875B0[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_801873CC; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_801875B8[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_801873DC; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801873FC; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_801875C0[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_801875E8[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_801875F4[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80187468[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80187698; +extern void func_8015D380(s32 a0); +extern unsigned char D_8018677C[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_801876AC[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_801876E8[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80187730; +extern u16 D_80187732; +extern u16 D_80187734; +extern s32 D_80187738; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80187740; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_8018744C; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_801877C4[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80187874[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_801878A4[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80187908; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801B7EB0[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_8018792C[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801B7F08[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80187974[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80187964; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801B7768[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_8018797C[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_801879D0[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80187998; +extern s16 D_801879CC; +extern s16 D_801879CA; +extern s16 D_801879C8; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_801879DC[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801B7F68; +extern u8 D_801B7F69; +extern u8 D_801B7F6A; +extern u8 D_801B7F6B; +extern u8 D_801B7F6C; +extern u8 D_801B7F6D; +extern u8 D_801B7F6E; +extern u8 D_801B7F6F; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_801879EC[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801B7FA8; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80187A30[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80187AAC[]; +extern s32 D_80187ACC[]; +extern u8 D_80187B48[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80187B68[]; +extern u8 D_80187B88[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80187C24[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80187CA0[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801B7778; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80187CAC[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80187CB4[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80187D7C[])(void); +extern void func_80166618(void *a0); +extern void (*D_80187D8C[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80187D9C[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80187DA8[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80187D08[]; +extern u8 D_80187D1C[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80187DC0[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80187DC8[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80187DD0[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80187DD8[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80187DE0[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80187DE8[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80187DF0[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80187EA4[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80187EAC[])(void); +extern void func_80169F00(void *a0); +extern char D_80187E5C[]; +extern char D_80187E1C[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80187EE4[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80187EF0[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80187F38[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80187EF8[]; + extern u8 D_80187F08[]; + extern u8 D_801B8278[]; + extern u8 D_801B82A0[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80187EF8, D_801B8278) + 3; + func_8001CE28(obj, D_801B8278); + } else { + var_s3 = func_80024054(D_80187F08, D_801B82A0) + 9; + func_8001CE28(obj, D_801B82A0); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80187FB4[])(void); + +void func_8016B4BC(void *a0) { + D_80187FB4[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801B82C8; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801B82C8); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80187FA8[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80187FA8; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80187FEC[]; +extern unsigned short D_80187FF4[]; +extern unsigned short D_80187FFC[]; +extern unsigned char D_801B82D0[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801B82D0 + param_2 * 0x40); + puVar3 = D_80187FEC[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80187FF4[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80187FFC[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801B82C8; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801B82C8, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80188004[])(void); + +void func_8016BBA4(void *a0) { + D_80188004[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801B8404; + extern u8 D_801B8405; + extern u8 D_801B8406; + extern M2C_UNK D_801B8408; + extern u8 D_801B8409; + extern u8 D_801B840A; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801B8404) = 0x20; + D_801B8405 = 0x20; + D_801B8406 = 0; + (*(u8 *)&D_801B8408) = 0xc0; + D_801B8409 = 0xc0; + D_801B840A = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801B8404; +extern M2C_UNK D_801B8408; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801B8404, &D_801B8408, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801B8405; + extern u8 D_801B8406; + extern u8 D_801B8409; + extern u8 D_801B840A; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801B8404); + if (*p1 != 0) *p1 -= 4; + if (D_801B8405 != 0) D_801B8405 -= 4; + if (D_801B8406 != 0) D_801B8406 -= 4; + p2 = &(*(u8 *)&D_801B8408); + if (*p2 != 0) *p2 -= 4; + if (D_801B8409 != 0) D_801B8409 -= 4; + if (D_801B840A != 0) D_801B840A -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801B8404), &(*(int *)&D_801B8408), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801B8390; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801B8390); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80188014; + extern s32 D_8018801C; + extern s32 D_80188024; + extern s32 D_8018802C; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80188014, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_8018801C, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80188024, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_8018802C, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80188034[])(void); + +void func_8016C14C(void *a0) { + D_80188034[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801B840C[]; +extern u8 D_801B8414[]; +extern u8 D_801B83C4[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801B840C, D_801B8414, D_801B83C4); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801B8420[]; + extern u8 D_801B84E0; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801B8420[1] = 0xff; + D_801B8420[2] = 0x10; + D_801B8420[0] = 0x10; + D_801B8420[6] = 0; + D_801B8420[5] = 0; + D_801B8420[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801B8420, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801B84E0, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801B8420); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8016AB6C", func_8016C998); + + +extern void (*D_8018803C[])(void); + +void func_8016CB84(void *a0) { + D_8018803C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801B84E0[]; + + + Blk_8016CF04_8016CF04 *p = &D_801B84E0[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80188058[])(void); + +void func_8016D19C(void *a0) { + D_80188058[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80188060[])(void); + +void func_8016D428(void *a0) { + D_80188060[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_801880C8[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_801880C8[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_8018806C; +extern u8 D_80188078; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018806C, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80188078); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8016AB6C", func_8016DC20); + + +extern void (*D_801880FC[])(void); + +void func_8016DEA4(void *a0) { + D_801880FC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80188104[])(void); + +void func_8016DF20(void *a0) { + D_80188104[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80188158[])(void); + +void func_8016E5B8(void *a0) { + D_80188158[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80188118[4]; + extern s32 D_80188138; + extern s32 D_80188140; + extern s32 D_80188148; + extern s32 D_80188150; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80188118[0], pp, &tmp); + RotTransSV(&D_80188118[1], &prim.v[1], &tmp); + RotTransSV(&D_80188118[2], &prim.v[2], &tmp); + RotTransSV(&D_80188118[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80188138; + prim.f1 = D_80188140; + prim.f2 = D_80188148; + prim.f3 = D_80188150; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80188198[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80188198[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_8018818C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_8018818C[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_8018817C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_8018817C[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018818C[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_8018818C[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_8018818C[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_801881A8; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_801881A8; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80188220[])(void); + +void func_8016F6E0(void *a0) { + D_80188220[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80188228[])(void); + +void func_8016F798(void *a0) { + D_80188228[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80188230[])(void); + +void func_8016F834(void *a0) { + D_80188230[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80188238[])(void); + +void func_8016F8E4(void *a0) { + D_80188238[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80188240[])(void); + +void func_8016F9C4(void *a0) { + D_80188240[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80188248[])(void); + +void func_8016FA84(void *a0) { + D_80188248[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80188254[])(void); + +void func_8016FB7C(void *a0) { + D_80188254[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80188260[])(void); + +void func_8016FC90(void *a0) { + D_80188260[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_8018826C[])(void); + +void func_8016FDB4(void *a0) { + D_8018826C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_8018827C[])(void); + +void func_8016FF30(void *a0) { + D_8018827C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_8018828C[])(void); + +void func_8016FFDC(void *a0) { + D_8018828C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80188294[])(void); + +void func_80170150(void *a0) { + D_80188294[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_8018829C[])(void); + +void func_80170240(void *a0) { + D_8018829C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_801882A4[])(void); + +void func_801702FC(void *a0) { + D_801882A4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_801882AC[])(void); + +void func_801703E0(void *a0) { + D_801882AC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_801882B4[])(void); + +void func_801704B0(void *a0) { + D_801882B4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_801882BC[])(void); + +void func_80170548(void *a0) { + D_801882BC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_801882C4[])(void); + +void func_801705F8(void *a0) { + D_801882C4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_801882CC[])(void); + +void func_801706AC(void *a0) { + D_801882CC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_801882D4[])(void); + +void func_80170748(void *a0) { + D_801882D4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_801882DC[])(void); + +void func_80170810(void *a0) { + D_801882DC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_801882E4[])(void); + +void func_80170AD8(void *a0) { + D_801882E4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_801882EC[])(void); + +void func_80170BD8(void *a0) { + D_801882EC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_801882F4[])(void); + +void func_80170C74(void *a0) { + D_801882F4[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8016AB6C", func_80170CF0); + + +extern void (*D_801882FC[])(void); + +void func_80170D68(void *a0) { + D_801882FC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80188304[])(void); + +void func_80170E34(void *a0) { + D_80188304[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_8018830C[])(void); + +void func_80170EFC(void *a0) { + D_8018830C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80188314[])(void); + +void func_80170FB0(void *a0) { + D_80188314[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_8018831C[])(void); + +void func_80171064(void *a0) { + D_8018831C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80188324[])(void); + +void func_80171120(void *a0) { + D_80188324[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_8018832C[])(void); + +void func_801711C0(void *a0) { + D_8018832C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80188334[])(void); + +void func_80171260(void *a0) { + D_80188334[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_8018833C[])(void); + +void func_801714E4(void *a0) { + D_8018833C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8016AB6C", func_80172C50); + + +extern void (*D_80188380[])(void); + +void func_80172CA0(void *a0) { + D_80188380[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80188344; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80188344); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_001/ov_SC03_001_jr_8015AE2C.c b/src/ov_SC03_001/ov_SC03_001_jr_8015AE2C.c index 68962cbfb..c932d65ea 100644 --- a/src/ov_SC03_001/ov_SC03_001_jr_8015AE2C.c +++ b/src/ov_SC03_001/ov_SC03_001_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_80190678[])(void); void func_8016AB30(void *a0) { D_80190678[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_801906F4[])(void); - -void func_8016B4BC(void *a0) { - D_801906F4[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801ED948; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801ED948); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_801906E8[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_801906E8; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_8019072C[]; -extern unsigned short D_80190734[]; -extern unsigned short D_8019073C[]; -extern unsigned char D_801ED950[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801ED950 + param_2 * 0x40); - puVar3 = D_8019072C[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80190734[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_8019073C[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801ED948; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801ED948, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80190744[])(void); - -void func_8016BBA4(void *a0) { - D_80190744[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801EDA84; - extern u8 D_801EDA85; - extern u8 D_801EDA86; - extern M2C_UNK D_801EDA88; - extern u8 D_801EDA89; - extern u8 D_801EDA8A; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801EDA84) = 0x20; - D_801EDA85 = 0x20; - D_801EDA86 = 0; - (*(u8 *)&D_801EDA88) = 0xc0; - D_801EDA89 = 0xc0; - D_801EDA8A = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801EDA84; -extern M2C_UNK D_801EDA88; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801EDA84, &D_801EDA88, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801EDA85; - extern u8 D_801EDA86; - extern u8 D_801EDA89; - extern u8 D_801EDA8A; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801EDA84); - if (*p1 != 0) *p1 -= 4; - if (D_801EDA85 != 0) D_801EDA85 -= 4; - if (D_801EDA86 != 0) D_801EDA86 -= 4; - p2 = &(*(u8 *)&D_801EDA88); - if (*p2 != 0) *p2 -= 4; - if (D_801EDA89 != 0) D_801EDA89 -= 4; - if (D_801EDA8A != 0) D_801EDA8A -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801EDA84), &(*(int *)&D_801EDA88), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801EDA10; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801EDA10); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80190754; - extern s32 D_8019075C; - extern s32 D_80190764; - extern s32 D_8019076C; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80190754, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_8019075C, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80190764, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_8019076C, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80190774[])(void); - -void func_8016C14C(void *a0) { - D_80190774[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801EDA8C[]; -extern u8 D_801EDA94[]; -extern u8 D_801EDA44[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801EDA8C, D_801EDA94, D_801EDA44); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801EDAA0[]; - extern u8 D_801EDB60; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801EDAA0[1] = 0xff; - D_801EDAA0[2] = 0x10; - D_801EDAA0[0] = 0x10; - D_801EDAA0[6] = 0; - D_801EDAA0[5] = 0; - D_801EDAA0[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801EDAA0, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801EDB60, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801EDAA0); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8015AE2C", func_8016C998); - - -extern void (*D_8019077C[])(void); - -void func_8016CB84(void *a0) { - D_8019077C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801EDB60[]; - - - Blk_8016CF04_8016CF04 *p = &D_801EDB60[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80190798[])(void); - -void func_8016D19C(void *a0) { - D_80190798[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_801907A0[])(void); - -void func_8016D428(void *a0) { - D_801907A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80190808[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80190808[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_801907AC; -extern u8 D_801907B8; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801907AC, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801907B8); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8015AE2C", func_8016DC20); - - -extern void (*D_8019083C[])(void); - -void func_8016DEA4(void *a0) { - D_8019083C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80190844[])(void); - -void func_8016DF20(void *a0) { - D_80190844[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80190898[])(void); - -void func_8016E5B8(void *a0) { - D_80190898[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80190858[4]; - extern s32 D_80190878; - extern s32 D_80190880; - extern s32 D_80190888; - extern s32 D_80190890; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80190858[0], pp, &tmp); - RotTransSV(&D_80190858[1], &prim.v[1], &tmp); - RotTransSV(&D_80190858[2], &prim.v[2], &tmp); - RotTransSV(&D_80190858[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80190878; - prim.f1 = D_80190880; - prim.f2 = D_80190888; - prim.f3 = D_80190890; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_801908D8[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_801908D8[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_801908CC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_801908CC[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_801908BC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_801908BC[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801908CC[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_801908CC[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_801908CC[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_801908E8; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_801908E8; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80190960[])(void); - -void func_8016F6E0(void *a0) { - D_80190960[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80190968[])(void); - -void func_8016F798(void *a0) { - D_80190968[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80190970[])(void); - -void func_8016F834(void *a0) { - D_80190970[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80190978[])(void); - -void func_8016F8E4(void *a0) { - D_80190978[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80190980[])(void); - -void func_8016F9C4(void *a0) { - D_80190980[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80190988[])(void); - -void func_8016FA84(void *a0) { - D_80190988[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80190994[])(void); - -void func_8016FB7C(void *a0) { - D_80190994[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_801909A0[])(void); - -void func_8016FC90(void *a0) { - D_801909A0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_801909AC[])(void); - -void func_8016FDB4(void *a0) { - D_801909AC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_801909BC[])(void); - -void func_8016FF30(void *a0) { - D_801909BC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_801909CC[])(void); - -void func_8016FFDC(void *a0) { - D_801909CC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_801909D4[])(void); - -void func_80170150(void *a0) { - D_801909D4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_801909DC[])(void); - -void func_80170240(void *a0) { - D_801909DC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_801909E4[])(void); - -void func_801702FC(void *a0) { - D_801909E4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_801909EC[])(void); - -void func_801703E0(void *a0) { - D_801909EC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_801909F4[])(void); - -void func_801704B0(void *a0) { - D_801909F4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_801909FC[])(void); - -void func_80170548(void *a0) { - D_801909FC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80190A04[])(void); - -void func_801705F8(void *a0) { - D_80190A04[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80190A0C[])(void); - -void func_801706AC(void *a0) { - D_80190A0C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80190A14[])(void); - -void func_80170748(void *a0) { - D_80190A14[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80190A1C[])(void); - -void func_80170810(void *a0) { - D_80190A1C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80190A24[])(void); - -void func_80170AD8(void *a0) { - D_80190A24[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80190A2C[])(void); - -void func_80170BD8(void *a0) { - D_80190A2C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80190A34[])(void); - -void func_80170C74(void *a0) { - D_80190A34[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80190A3C[])(void); - -void func_80170D68(void *a0) { - D_80190A3C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80190A44[])(void); - -void func_80170E34(void *a0) { - D_80190A44[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80190A4C[])(void); - -void func_80170EFC(void *a0) { - D_80190A4C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80190A54[])(void); - -void func_80170FB0(void *a0) { - D_80190A54[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80190A5C[])(void); - -void func_80171064(void *a0) { - D_80190A5C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80190A64[])(void); - -void func_80171120(void *a0) { - D_80190A64[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80190A6C[])(void); - -void func_801711C0(void *a0) { - D_80190A6C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80190A74[])(void); - -void func_80171260(void *a0) { - D_80190A74[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80190A7C[])(void); - -void func_801714E4(void *a0) { - D_80190A7C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8015AE2C", func_80172C50); - - -extern void (*D_80190AC0[])(void); - -void func_80172CA0(void *a0) { - D_80190AC0[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80190A84; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80190A84); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_001/ov_SC03_001_jr_8016AB6C.c b/src/ov_SC03_001/ov_SC03_001_jr_8016AB6C.c new file mode 100644 index 000000000..5128d4c6e --- /dev/null +++ b/src/ov_SC03_001/ov_SC03_001_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018FA44; +extern u8 D_8018F9B4; +extern u8 D_8018F990; +extern u8 D_8018F96C; +extern u8 D_8018FA20; +extern u8 D_8018F9FC; +extern u8 D_8018F9D8; +extern u8 D_8018F948; +extern void func_80145934(void); +extern u8 D_8018FAD4; +extern u8 D_8018FAB0; +extern u8 D_8018FA8C; +extern u8 D_8018FA68; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018EECC[]; +extern unsigned char D_8018EEFC[]; +extern unsigned char D_8018EF4C[]; +extern unsigned char D_8018EF7C[]; +extern unsigned char D_8018EFAC[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018EFFC[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018F0C4[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018F14C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018F154; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801ED4D8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801ED4DC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018F184; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018F22C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018F250[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018F240; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018F264[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018F270[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018F280[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018F298[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018F288; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018F2AC[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018F2C8[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018F2B8; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018F2DC[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018F2F0[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018F304; +extern void (*D_8018F32C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018F30C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018F378[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018F37C[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018F7E0[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018F7F0[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801ED510; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018F818[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018F7F8; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018F808; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018F858[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018F860[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018F82C; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018F86C[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018F83C; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801ED518; +extern s32 D_801ED524; +extern s32 D_801ED528; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018F8A8[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018F87C[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801ED520; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018FAF8[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018F918[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018FB9C[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018FCF0[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018FB0C; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018FCF8[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018FB1C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018FB3C; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_8018FD00[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_8018FD28[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_8018FD34[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_8018FBA8[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_8018FDD8; +extern void func_8015D380(s32 a0); +extern unsigned char D_8018EEBC[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_8018FDEC[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_8018FE28[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_8018FE70; +extern u16 D_8018FE72; +extern u16 D_8018FE74; +extern s32 D_8018FE78; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_8018FE80; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_8018FB8C; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_8018FF04[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_8018FFB4[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_8018FFE4[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80190048; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801ED530[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_8019006C[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801ED588[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_801900B4[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_801900A4; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801EC888[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_801900BC[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80190110[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_801900D8; +extern s16 D_8019010C; +extern s16 D_8019010A; +extern s16 D_80190108; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_8019011C[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801ED5E8; +extern u8 D_801ED5E9; +extern u8 D_801ED5EA; +extern u8 D_801ED5EB; +extern u8 D_801ED5EC; +extern u8 D_801ED5ED; +extern u8 D_801ED5EE; +extern u8 D_801ED5EF; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_8019012C[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801ED628; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80190170[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_801901EC[]; +extern s32 D_8019020C[]; +extern u8 D_80190288[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_801902A8[]; +extern u8 D_801902C8[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80190364[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_801903E0[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801EC898; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_801903EC[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_801903F4[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_801904BC[])(void); +extern void func_80166618(void *a0); +extern void (*D_801904CC[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_801904DC[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_801904E8[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80190448[]; +extern u8 D_8019045C[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80190500[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80190508[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80190510[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80190518[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80190520[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80190528[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80190530[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_801905E4[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_801905EC[])(void); +extern void func_80169F00(void *a0); +extern char D_8019059C[]; +extern char D_8019055C[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80190624[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80190630[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80190678[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80190638[]; + extern u8 D_80190648[]; + extern u8 D_801ED8F8[]; + extern u8 D_801ED920[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80190638, D_801ED8F8) + 3; + func_8001CE28(obj, D_801ED8F8); + } else { + var_s3 = func_80024054(D_80190648, D_801ED920) + 9; + func_8001CE28(obj, D_801ED920); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_801906F4[])(void); + +void func_8016B4BC(void *a0) { + D_801906F4[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801ED948; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801ED948); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_801906E8[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_801906E8; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_8019072C[]; +extern unsigned short D_80190734[]; +extern unsigned short D_8019073C[]; +extern unsigned char D_801ED950[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801ED950 + param_2 * 0x40); + puVar3 = D_8019072C[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80190734[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_8019073C[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801ED948; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801ED948, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80190744[])(void); + +void func_8016BBA4(void *a0) { + D_80190744[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801EDA84; + extern u8 D_801EDA85; + extern u8 D_801EDA86; + extern M2C_UNK D_801EDA88; + extern u8 D_801EDA89; + extern u8 D_801EDA8A; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801EDA84) = 0x20; + D_801EDA85 = 0x20; + D_801EDA86 = 0; + (*(u8 *)&D_801EDA88) = 0xc0; + D_801EDA89 = 0xc0; + D_801EDA8A = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801EDA84; +extern M2C_UNK D_801EDA88; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801EDA84, &D_801EDA88, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801EDA85; + extern u8 D_801EDA86; + extern u8 D_801EDA89; + extern u8 D_801EDA8A; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801EDA84); + if (*p1 != 0) *p1 -= 4; + if (D_801EDA85 != 0) D_801EDA85 -= 4; + if (D_801EDA86 != 0) D_801EDA86 -= 4; + p2 = &(*(u8 *)&D_801EDA88); + if (*p2 != 0) *p2 -= 4; + if (D_801EDA89 != 0) D_801EDA89 -= 4; + if (D_801EDA8A != 0) D_801EDA8A -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801EDA84), &(*(int *)&D_801EDA88), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801EDA10; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801EDA10); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80190754; + extern s32 D_8019075C; + extern s32 D_80190764; + extern s32 D_8019076C; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80190754, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_8019075C, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80190764, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_8019076C, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80190774[])(void); + +void func_8016C14C(void *a0) { + D_80190774[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801EDA8C[]; +extern u8 D_801EDA94[]; +extern u8 D_801EDA44[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801EDA8C, D_801EDA94, D_801EDA44); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801EDAA0[]; + extern u8 D_801EDB60; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801EDAA0[1] = 0xff; + D_801EDAA0[2] = 0x10; + D_801EDAA0[0] = 0x10; + D_801EDAA0[6] = 0; + D_801EDAA0[5] = 0; + D_801EDAA0[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801EDAA0, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801EDB60, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801EDAA0); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8016AB6C", func_8016C998); + + +extern void (*D_8019077C[])(void); + +void func_8016CB84(void *a0) { + D_8019077C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801EDB60[]; + + + Blk_8016CF04_8016CF04 *p = &D_801EDB60[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80190798[])(void); + +void func_8016D19C(void *a0) { + D_80190798[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_801907A0[])(void); + +void func_8016D428(void *a0) { + D_801907A0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80190808[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80190808[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_801907AC; +extern u8 D_801907B8; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801907AC, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801907B8); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8016AB6C", func_8016DC20); + + +extern void (*D_8019083C[])(void); + +void func_8016DEA4(void *a0) { + D_8019083C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80190844[])(void); + +void func_8016DF20(void *a0) { + D_80190844[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80190898[])(void); + +void func_8016E5B8(void *a0) { + D_80190898[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80190858[4]; + extern s32 D_80190878; + extern s32 D_80190880; + extern s32 D_80190888; + extern s32 D_80190890; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80190858[0], pp, &tmp); + RotTransSV(&D_80190858[1], &prim.v[1], &tmp); + RotTransSV(&D_80190858[2], &prim.v[2], &tmp); + RotTransSV(&D_80190858[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80190878; + prim.f1 = D_80190880; + prim.f2 = D_80190888; + prim.f3 = D_80190890; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_801908D8[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_801908D8[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_801908CC[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_801908CC[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_801908BC[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_801908BC[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801908CC[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_801908CC[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_801908CC[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_801908E8; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_801908E8; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80190960[])(void); + +void func_8016F6E0(void *a0) { + D_80190960[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80190968[])(void); + +void func_8016F798(void *a0) { + D_80190968[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80190970[])(void); + +void func_8016F834(void *a0) { + D_80190970[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80190978[])(void); + +void func_8016F8E4(void *a0) { + D_80190978[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80190980[])(void); + +void func_8016F9C4(void *a0) { + D_80190980[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80190988[])(void); + +void func_8016FA84(void *a0) { + D_80190988[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80190994[])(void); + +void func_8016FB7C(void *a0) { + D_80190994[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_801909A0[])(void); + +void func_8016FC90(void *a0) { + D_801909A0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_801909AC[])(void); + +void func_8016FDB4(void *a0) { + D_801909AC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_801909BC[])(void); + +void func_8016FF30(void *a0) { + D_801909BC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_801909CC[])(void); + +void func_8016FFDC(void *a0) { + D_801909CC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_801909D4[])(void); + +void func_80170150(void *a0) { + D_801909D4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_801909DC[])(void); + +void func_80170240(void *a0) { + D_801909DC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_801909E4[])(void); + +void func_801702FC(void *a0) { + D_801909E4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_801909EC[])(void); + +void func_801703E0(void *a0) { + D_801909EC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_801909F4[])(void); + +void func_801704B0(void *a0) { + D_801909F4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_801909FC[])(void); + +void func_80170548(void *a0) { + D_801909FC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80190A04[])(void); + +void func_801705F8(void *a0) { + D_80190A04[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80190A0C[])(void); + +void func_801706AC(void *a0) { + D_80190A0C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80190A14[])(void); + +void func_80170748(void *a0) { + D_80190A14[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80190A1C[])(void); + +void func_80170810(void *a0) { + D_80190A1C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80190A24[])(void); + +void func_80170AD8(void *a0) { + D_80190A24[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80190A2C[])(void); + +void func_80170BD8(void *a0) { + D_80190A2C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80190A34[])(void); + +void func_80170C74(void *a0) { + D_80190A34[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80190A3C[])(void); + +void func_80170D68(void *a0) { + D_80190A3C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80190A44[])(void); + +void func_80170E34(void *a0) { + D_80190A44[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80190A4C[])(void); + +void func_80170EFC(void *a0) { + D_80190A4C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80190A54[])(void); + +void func_80170FB0(void *a0) { + D_80190A54[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80190A5C[])(void); + +void func_80171064(void *a0) { + D_80190A5C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80190A64[])(void); + +void func_80171120(void *a0) { + D_80190A64[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80190A6C[])(void); + +void func_801711C0(void *a0) { + D_80190A6C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80190A74[])(void); + +void func_80171260(void *a0) { + D_80190A74[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80190A7C[])(void); + +void func_801714E4(void *a0) { + D_80190A7C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8016AB6C", func_80172C50); + + +extern void (*D_80190AC0[])(void); + +void func_80172CA0(void *a0) { + D_80190AC0[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80190A84; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80190A84); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_002/ov_SC03_002_jr_8015AE2C.c b/src/ov_SC03_002/ov_SC03_002_jr_8015AE2C.c index 3d70c6dff..0e8f0c36b 100644 --- a/src/ov_SC03_002/ov_SC03_002_jr_8015AE2C.c +++ b/src/ov_SC03_002/ov_SC03_002_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_80188668[])(void); void func_8016AB30(void *a0) { D_80188668[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_801886E4[])(void); - -void func_8016B4BC(void *a0) { - D_801886E4[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801CA9C8; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801CA9C8); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_801886D8[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_801886D8; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_8018871C[]; -extern unsigned short D_80188724[]; -extern unsigned short D_8018872C[]; -extern unsigned char D_801CA9D0[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801CA9D0 + param_2 * 0x40); - puVar3 = D_8018871C[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80188724[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_8018872C[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801CA9C8; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801CA9C8, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80188734[])(void); - -void func_8016BBA4(void *a0) { - D_80188734[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801CAB04; - extern u8 D_801CAB05; - extern u8 D_801CAB06; - extern M2C_UNK D_801CAB08; - extern u8 D_801CAB09; - extern u8 D_801CAB0A; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801CAB04) = 0x20; - D_801CAB05 = 0x20; - D_801CAB06 = 0; - (*(u8 *)&D_801CAB08) = 0xc0; - D_801CAB09 = 0xc0; - D_801CAB0A = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801CAB04; -extern M2C_UNK D_801CAB08; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801CAB04, &D_801CAB08, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801CAB05; - extern u8 D_801CAB06; - extern u8 D_801CAB09; - extern u8 D_801CAB0A; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801CAB04); - if (*p1 != 0) *p1 -= 4; - if (D_801CAB05 != 0) D_801CAB05 -= 4; - if (D_801CAB06 != 0) D_801CAB06 -= 4; - p2 = &(*(u8 *)&D_801CAB08); - if (*p2 != 0) *p2 -= 4; - if (D_801CAB09 != 0) D_801CAB09 -= 4; - if (D_801CAB0A != 0) D_801CAB0A -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801CAB04), &(*(int *)&D_801CAB08), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801CAA90; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801CAA90); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80188744; - extern s32 D_8018874C; - extern s32 D_80188754; - extern s32 D_8018875C; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80188744, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_8018874C, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80188754, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_8018875C, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80188764[])(void); - -void func_8016C14C(void *a0) { - D_80188764[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801CAB0C[]; -extern u8 D_801CAB14[]; -extern u8 D_801CAAC4[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801CAB0C, D_801CAB14, D_801CAAC4); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801CAB20[]; - extern u8 D_801CABE0; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801CAB20[1] = 0xff; - D_801CAB20[2] = 0x10; - D_801CAB20[0] = 0x10; - D_801CAB20[6] = 0; - D_801CAB20[5] = 0; - D_801CAB20[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801CAB20, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801CABE0, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801CAB20); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8015AE2C", func_8016C998); - - -extern void (*D_8018876C[])(void); - -void func_8016CB84(void *a0) { - D_8018876C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801CABE0[]; - - - Blk_8016CF04_8016CF04 *p = &D_801CABE0[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80188788[])(void); - -void func_8016D19C(void *a0) { - D_80188788[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80188790[])(void); - -void func_8016D428(void *a0) { - D_80188790[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_801887F8[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_801887F8[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_8018879C; -extern u8 D_801887A8; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018879C, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801887A8); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8015AE2C", func_8016DC20); - - -extern void (*D_8018882C[])(void); - -void func_8016DEA4(void *a0) { - D_8018882C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80188834[])(void); - -void func_8016DF20(void *a0) { - D_80188834[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80188888[])(void); - -void func_8016E5B8(void *a0) { - D_80188888[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80188848[4]; - extern s32 D_80188868; - extern s32 D_80188870; - extern s32 D_80188878; - extern s32 D_80188880; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80188848[0], pp, &tmp); - RotTransSV(&D_80188848[1], &prim.v[1], &tmp); - RotTransSV(&D_80188848[2], &prim.v[2], &tmp); - RotTransSV(&D_80188848[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80188868; - prim.f1 = D_80188870; - prim.f2 = D_80188878; - prim.f3 = D_80188880; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_801888C8[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_801888C8[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_801888BC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_801888BC[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_801888AC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_801888AC[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801888BC[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_801888BC[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_801888BC[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_801888D8; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_801888D8; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80188950[])(void); - -void func_8016F6E0(void *a0) { - D_80188950[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80188958[])(void); - -void func_8016F798(void *a0) { - D_80188958[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80188960[])(void); - -void func_8016F834(void *a0) { - D_80188960[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80188968[])(void); - -void func_8016F8E4(void *a0) { - D_80188968[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80188970[])(void); - -void func_8016F9C4(void *a0) { - D_80188970[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80188978[])(void); - -void func_8016FA84(void *a0) { - D_80188978[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80188984[])(void); - -void func_8016FB7C(void *a0) { - D_80188984[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80188990[])(void); - -void func_8016FC90(void *a0) { - D_80188990[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_8018899C[])(void); - -void func_8016FDB4(void *a0) { - D_8018899C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_801889AC[])(void); - -void func_8016FF30(void *a0) { - D_801889AC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_801889BC[])(void); - -void func_8016FFDC(void *a0) { - D_801889BC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_801889C4[])(void); - -void func_80170150(void *a0) { - D_801889C4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_801889CC[])(void); - -void func_80170240(void *a0) { - D_801889CC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_801889D4[])(void); - -void func_801702FC(void *a0) { - D_801889D4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_801889DC[])(void); - -void func_801703E0(void *a0) { - D_801889DC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_801889E4[])(void); - -void func_801704B0(void *a0) { - D_801889E4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_801889EC[])(void); - -void func_80170548(void *a0) { - D_801889EC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_801889F4[])(void); - -void func_801705F8(void *a0) { - D_801889F4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_801889FC[])(void); - -void func_801706AC(void *a0) { - D_801889FC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80188A04[])(void); - -void func_80170748(void *a0) { - D_80188A04[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80188A0C[])(void); - -void func_80170810(void *a0) { - D_80188A0C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80188A14[])(void); - -void func_80170AD8(void *a0) { - D_80188A14[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80188A1C[])(void); - -void func_80170BD8(void *a0) { - D_80188A1C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80188A24[])(void); - -void func_80170C74(void *a0) { - D_80188A24[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80188A2C[])(void); - -void func_80170D68(void *a0) { - D_80188A2C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80188A34[])(void); - -void func_80170E34(void *a0) { - D_80188A34[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80188A3C[])(void); - -void func_80170EFC(void *a0) { - D_80188A3C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80188A44[])(void); - -void func_80170FB0(void *a0) { - D_80188A44[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80188A4C[])(void); - -void func_80171064(void *a0) { - D_80188A4C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80188A54[])(void); - -void func_80171120(void *a0) { - D_80188A54[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80188A5C[])(void); - -void func_801711C0(void *a0) { - D_80188A5C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80188A64[])(void); - -void func_80171260(void *a0) { - D_80188A64[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80188A6C[])(void); - -void func_801714E4(void *a0) { - D_80188A6C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8015AE2C", func_80172C50); - - -extern void (*D_80188AB0[])(void); - -void func_80172CA0(void *a0) { - D_80188AB0[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80188A74; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80188A74); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_002/ov_SC03_002_jr_8016AB6C.c b/src/ov_SC03_002/ov_SC03_002_jr_8016AB6C.c new file mode 100644 index 000000000..93bd1489f --- /dev/null +++ b/src/ov_SC03_002/ov_SC03_002_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80187A34; +extern u8 D_801879A4; +extern u8 D_80187980; +extern u8 D_8018795C; +extern u8 D_80187A10; +extern u8 D_801879EC; +extern u8 D_801879C8; +extern u8 D_80187938; +extern void func_80145934(void); +extern u8 D_80187AC4; +extern u8 D_80187AA0; +extern u8 D_80187A7C; +extern u8 D_80187A58; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80186EBC[]; +extern unsigned char D_80186EEC[]; +extern unsigned char D_80186F3C[]; +extern unsigned char D_80186F6C[]; +extern unsigned char D_80186F9C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80186FEC[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801870B4[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018713C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80187144; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801CA558; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801CA55C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80187174; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018721C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80187240[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80187230; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80187254[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80187260[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80187270[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80187288[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80187278; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018729C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801872B8[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801872A8; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801872CC[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801872E0[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801872F4; +extern void (*D_8018731C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801872FC; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80187368[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018736C[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_801877D0[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_801877E0[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801CA590; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80187808[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801877E8; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_801877F8; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80187848[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80187850[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018781C; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018785C[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018782C; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801CA598; +extern s32 D_801CA5A4; +extern s32 D_801CA5A8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80187898[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018786C[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801CA5A0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80187AE8[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80187908[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80187B8C[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80187CE0[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80187AFC; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80187CE8[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80187B0C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80187B2C; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80187CF0[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80187D18[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80187D24[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80187B98[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80187DC8; +extern void func_8015D380(s32 a0); +extern unsigned char D_80186EAC[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80187DDC[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80187E18[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80187E60; +extern u16 D_80187E62; +extern u16 D_80187E64; +extern s32 D_80187E68; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80187E70; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80187B7C; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80187EF4[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80187FA4[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80187FD4[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80188038; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801CA5B0[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_8018805C[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801CA608[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_801880A4[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80188094; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801C9DE4[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_801880AC[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80188100[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_801880C8; +extern s16 D_801880FC; +extern s16 D_801880FA; +extern s16 D_801880F8; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_8018810C[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801CA668; +extern u8 D_801CA669; +extern u8 D_801CA66A; +extern u8 D_801CA66B; +extern u8 D_801CA66C; +extern u8 D_801CA66D; +extern u8 D_801CA66E; +extern u8 D_801CA66F; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_8018811C[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801CA6A8; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80188160[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_801881DC[]; +extern s32 D_801881FC[]; +extern u8 D_80188278[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80188298[]; +extern u8 D_801882B8[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80188354[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_801883D0[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801C9DF4; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_801883DC[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_801883E4[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_801884AC[])(void); +extern void func_80166618(void *a0); +extern void (*D_801884BC[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_801884CC[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_801884D8[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80188438[]; +extern u8 D_8018844C[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_801884F0[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_801884F8[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80188500[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80188508[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80188510[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80188518[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80188520[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_801885D4[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_801885DC[])(void); +extern void func_80169F00(void *a0); +extern char D_8018858C[]; +extern char D_8018854C[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80188614[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80188620[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80188668[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80188628[]; + extern u8 D_80188638[]; + extern u8 D_801CA978[]; + extern u8 D_801CA9A0[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80188628, D_801CA978) + 3; + func_8001CE28(obj, D_801CA978); + } else { + var_s3 = func_80024054(D_80188638, D_801CA9A0) + 9; + func_8001CE28(obj, D_801CA9A0); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_801886E4[])(void); + +void func_8016B4BC(void *a0) { + D_801886E4[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801CA9C8; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801CA9C8); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_801886D8[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_801886D8; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_8018871C[]; +extern unsigned short D_80188724[]; +extern unsigned short D_8018872C[]; +extern unsigned char D_801CA9D0[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801CA9D0 + param_2 * 0x40); + puVar3 = D_8018871C[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80188724[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_8018872C[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801CA9C8; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801CA9C8, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80188734[])(void); + +void func_8016BBA4(void *a0) { + D_80188734[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801CAB04; + extern u8 D_801CAB05; + extern u8 D_801CAB06; + extern M2C_UNK D_801CAB08; + extern u8 D_801CAB09; + extern u8 D_801CAB0A; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801CAB04) = 0x20; + D_801CAB05 = 0x20; + D_801CAB06 = 0; + (*(u8 *)&D_801CAB08) = 0xc0; + D_801CAB09 = 0xc0; + D_801CAB0A = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801CAB04; +extern M2C_UNK D_801CAB08; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801CAB04, &D_801CAB08, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801CAB05; + extern u8 D_801CAB06; + extern u8 D_801CAB09; + extern u8 D_801CAB0A; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801CAB04); + if (*p1 != 0) *p1 -= 4; + if (D_801CAB05 != 0) D_801CAB05 -= 4; + if (D_801CAB06 != 0) D_801CAB06 -= 4; + p2 = &(*(u8 *)&D_801CAB08); + if (*p2 != 0) *p2 -= 4; + if (D_801CAB09 != 0) D_801CAB09 -= 4; + if (D_801CAB0A != 0) D_801CAB0A -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801CAB04), &(*(int *)&D_801CAB08), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801CAA90; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801CAA90); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80188744; + extern s32 D_8018874C; + extern s32 D_80188754; + extern s32 D_8018875C; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80188744, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_8018874C, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80188754, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_8018875C, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80188764[])(void); + +void func_8016C14C(void *a0) { + D_80188764[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801CAB0C[]; +extern u8 D_801CAB14[]; +extern u8 D_801CAAC4[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801CAB0C, D_801CAB14, D_801CAAC4); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801CAB20[]; + extern u8 D_801CABE0; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801CAB20[1] = 0xff; + D_801CAB20[2] = 0x10; + D_801CAB20[0] = 0x10; + D_801CAB20[6] = 0; + D_801CAB20[5] = 0; + D_801CAB20[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801CAB20, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801CABE0, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801CAB20); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8016AB6C", func_8016C998); + + +extern void (*D_8018876C[])(void); + +void func_8016CB84(void *a0) { + D_8018876C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801CABE0[]; + + + Blk_8016CF04_8016CF04 *p = &D_801CABE0[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80188788[])(void); + +void func_8016D19C(void *a0) { + D_80188788[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80188790[])(void); + +void func_8016D428(void *a0) { + D_80188790[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_801887F8[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_801887F8[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_8018879C; +extern u8 D_801887A8; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018879C, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801887A8); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8016AB6C", func_8016DC20); + + +extern void (*D_8018882C[])(void); + +void func_8016DEA4(void *a0) { + D_8018882C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80188834[])(void); + +void func_8016DF20(void *a0) { + D_80188834[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80188888[])(void); + +void func_8016E5B8(void *a0) { + D_80188888[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80188848[4]; + extern s32 D_80188868; + extern s32 D_80188870; + extern s32 D_80188878; + extern s32 D_80188880; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80188848[0], pp, &tmp); + RotTransSV(&D_80188848[1], &prim.v[1], &tmp); + RotTransSV(&D_80188848[2], &prim.v[2], &tmp); + RotTransSV(&D_80188848[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80188868; + prim.f1 = D_80188870; + prim.f2 = D_80188878; + prim.f3 = D_80188880; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_801888C8[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_801888C8[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_801888BC[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_801888BC[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_801888AC[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_801888AC[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801888BC[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_801888BC[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_801888BC[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_801888D8; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_801888D8; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80188950[])(void); + +void func_8016F6E0(void *a0) { + D_80188950[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80188958[])(void); + +void func_8016F798(void *a0) { + D_80188958[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80188960[])(void); + +void func_8016F834(void *a0) { + D_80188960[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80188968[])(void); + +void func_8016F8E4(void *a0) { + D_80188968[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80188970[])(void); + +void func_8016F9C4(void *a0) { + D_80188970[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80188978[])(void); + +void func_8016FA84(void *a0) { + D_80188978[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80188984[])(void); + +void func_8016FB7C(void *a0) { + D_80188984[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80188990[])(void); + +void func_8016FC90(void *a0) { + D_80188990[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_8018899C[])(void); + +void func_8016FDB4(void *a0) { + D_8018899C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_801889AC[])(void); + +void func_8016FF30(void *a0) { + D_801889AC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_801889BC[])(void); + +void func_8016FFDC(void *a0) { + D_801889BC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_801889C4[])(void); + +void func_80170150(void *a0) { + D_801889C4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_801889CC[])(void); + +void func_80170240(void *a0) { + D_801889CC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_801889D4[])(void); + +void func_801702FC(void *a0) { + D_801889D4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_801889DC[])(void); + +void func_801703E0(void *a0) { + D_801889DC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_801889E4[])(void); + +void func_801704B0(void *a0) { + D_801889E4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_801889EC[])(void); + +void func_80170548(void *a0) { + D_801889EC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_801889F4[])(void); + +void func_801705F8(void *a0) { + D_801889F4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_801889FC[])(void); + +void func_801706AC(void *a0) { + D_801889FC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80188A04[])(void); + +void func_80170748(void *a0) { + D_80188A04[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80188A0C[])(void); + +void func_80170810(void *a0) { + D_80188A0C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80188A14[])(void); + +void func_80170AD8(void *a0) { + D_80188A14[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80188A1C[])(void); + +void func_80170BD8(void *a0) { + D_80188A1C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80188A24[])(void); + +void func_80170C74(void *a0) { + D_80188A24[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80188A2C[])(void); + +void func_80170D68(void *a0) { + D_80188A2C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80188A34[])(void); + +void func_80170E34(void *a0) { + D_80188A34[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80188A3C[])(void); + +void func_80170EFC(void *a0) { + D_80188A3C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80188A44[])(void); + +void func_80170FB0(void *a0) { + D_80188A44[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80188A4C[])(void); + +void func_80171064(void *a0) { + D_80188A4C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80188A54[])(void); + +void func_80171120(void *a0) { + D_80188A54[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80188A5C[])(void); + +void func_801711C0(void *a0) { + D_80188A5C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80188A64[])(void); + +void func_80171260(void *a0) { + D_80188A64[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80188A6C[])(void); + +void func_801714E4(void *a0) { + D_80188A6C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8016AB6C", func_80172C50); + + +extern void (*D_80188AB0[])(void); + +void func_80172CA0(void *a0) { + D_80188AB0[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80188A74; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80188A74); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_003/ov_SC03_003_jr_8015AE2C.c b/src/ov_SC03_003/ov_SC03_003_jr_8015AE2C.c index d5db4936c..fca1d9fa5 100644 --- a/src/ov_SC03_003/ov_SC03_003_jr_8015AE2C.c +++ b/src/ov_SC03_003/ov_SC03_003_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_80182430[])(void); void func_8016AB30(void *a0) { D_80182430[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_801824AC[])(void); - -void func_8016B4BC(void *a0) { - D_801824AC[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_8018ECD0; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_8018ECD0); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_801824A0[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_801824A0; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_801824E4[]; -extern unsigned short D_801824EC[]; -extern unsigned short D_801824F4[]; -extern unsigned char D_8018ECD8[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_8018ECD8 + param_2 * 0x40); - puVar3 = D_801824E4[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_801824EC[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_801824F4[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_8018ECD0; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_8018ECD0, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_801824FC[])(void); - -void func_8016BBA4(void *a0) { - D_801824FC[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_8018EE0C; - extern u8 D_8018EE0D; - extern u8 D_8018EE0E; - extern M2C_UNK D_8018EE10; - extern u8 D_8018EE11; - extern u8 D_8018EE12; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_8018EE0C) = 0x20; - D_8018EE0D = 0x20; - D_8018EE0E = 0; - (*(u8 *)&D_8018EE10) = 0xc0; - D_8018EE11 = 0xc0; - D_8018EE12 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_8018EE0C; -extern M2C_UNK D_8018EE10; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_8018EE0C, &D_8018EE10, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_8018EE0D; - extern u8 D_8018EE0E; - extern u8 D_8018EE11; - extern u8 D_8018EE12; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_8018EE0C); - if (*p1 != 0) *p1 -= 4; - if (D_8018EE0D != 0) D_8018EE0D -= 4; - if (D_8018EE0E != 0) D_8018EE0E -= 4; - p2 = &(*(u8 *)&D_8018EE10); - if (*p2 != 0) *p2 -= 4; - if (D_8018EE11 != 0) D_8018EE11 -= 4; - if (D_8018EE12 != 0) D_8018EE12 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_8018EE0C), &(*(int *)&D_8018EE10), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_8018ED98; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_8018ED98); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_8018250C; - extern s32 D_80182514; - extern s32 D_8018251C; - extern s32 D_80182524; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_8018250C, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80182514, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_8018251C, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80182524, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_8018252C[])(void); - -void func_8016C14C(void *a0) { - D_8018252C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_8018EE14[]; -extern u8 D_8018EE1C[]; -extern u8 D_8018EDCC[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_8018EE14, D_8018EE1C, D_8018EDCC); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_8018EE28[]; - extern u8 D_8018EEE8; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_8018EE28[1] = 0xff; - D_8018EE28[2] = 0x10; - D_8018EE28[0] = 0x10; - D_8018EE28[6] = 0; - D_8018EE28[5] = 0; - D_8018EE28[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_8018EE28, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_8018EEE8, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_8018EE28); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8015AE2C", func_8016C998); - - -extern void (*D_80182534[])(void); - -void func_8016CB84(void *a0) { - D_80182534[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_8018EEE8[]; - - - Blk_8016CF04_8016CF04 *p = &D_8018EEE8[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80182550[])(void); - -void func_8016D19C(void *a0) { - D_80182550[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80182558[])(void); - -void func_8016D428(void *a0) { - D_80182558[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_801825C0[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_801825C0[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80182564; -extern u8 D_80182570; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80182564, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80182570); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8015AE2C", func_8016DC20); - - -extern void (*D_801825F4[])(void); - -void func_8016DEA4(void *a0) { - D_801825F4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_801825FC[])(void); - -void func_8016DF20(void *a0) { - D_801825FC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80182650[])(void); - -void func_8016E5B8(void *a0) { - D_80182650[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80182610[4]; - extern s32 D_80182630; - extern s32 D_80182638; - extern s32 D_80182640; - extern s32 D_80182648; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80182610[0], pp, &tmp); - RotTransSV(&D_80182610[1], &prim.v[1], &tmp); - RotTransSV(&D_80182610[2], &prim.v[2], &tmp); - RotTransSV(&D_80182610[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80182630; - prim.f1 = D_80182638; - prim.f2 = D_80182640; - prim.f3 = D_80182648; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80182690[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80182690[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80182684[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80182684[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80182674[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80182674[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80182684[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80182684[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80182684[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_801826A0; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_801826A0; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80182718[])(void); - -void func_8016F6E0(void *a0) { - D_80182718[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80182720[])(void); - -void func_8016F798(void *a0) { - D_80182720[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80182728[])(void); - -void func_8016F834(void *a0) { - D_80182728[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80182730[])(void); - -void func_8016F8E4(void *a0) { - D_80182730[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80182738[])(void); - -void func_8016F9C4(void *a0) { - D_80182738[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80182740[])(void); - -void func_8016FA84(void *a0) { - D_80182740[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_8018274C[])(void); - -void func_8016FB7C(void *a0) { - D_8018274C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80182758[])(void); - -void func_8016FC90(void *a0) { - D_80182758[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80182764[])(void); - -void func_8016FDB4(void *a0) { - D_80182764[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80182774[])(void); - -void func_8016FF30(void *a0) { - D_80182774[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80182784[])(void); - -void func_8016FFDC(void *a0) { - D_80182784[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_8018278C[])(void); - -void func_80170150(void *a0) { - D_8018278C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80182794[])(void); - -void func_80170240(void *a0) { - D_80182794[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_8018279C[])(void); - -void func_801702FC(void *a0) { - D_8018279C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_801827A4[])(void); - -void func_801703E0(void *a0) { - D_801827A4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_801827AC[])(void); - -void func_801704B0(void *a0) { - D_801827AC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_801827B4[])(void); - -void func_80170548(void *a0) { - D_801827B4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_801827BC[])(void); - -void func_801705F8(void *a0) { - D_801827BC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_801827C4[])(void); - -void func_801706AC(void *a0) { - D_801827C4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_801827CC[])(void); - -void func_80170748(void *a0) { - D_801827CC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_801827D4[])(void); - -void func_80170810(void *a0) { - D_801827D4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_801827DC[])(void); - -void func_80170AD8(void *a0) { - D_801827DC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_801827E4[])(void); - -void func_80170BD8(void *a0) { - D_801827E4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_801827EC[])(void); - -void func_80170C74(void *a0) { - D_801827EC[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8015AE2C", func_80170CF0); - - -extern void (*D_801827F4[])(void); - -void func_80170D68(void *a0) { - D_801827F4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_801827FC[])(void); - -void func_80170E34(void *a0) { - D_801827FC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80182804[])(void); - -void func_80170EFC(void *a0) { - D_80182804[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_8018280C[])(void); - -void func_80170FB0(void *a0) { - D_8018280C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80182814[])(void); - -void func_80171064(void *a0) { - D_80182814[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_8018281C[])(void); - -void func_80171120(void *a0) { - D_8018281C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80182824[])(void); - -void func_801711C0(void *a0) { - D_80182824[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_8018282C[])(void); - -void func_80171260(void *a0) { - D_8018282C[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80182834[])(void); - -void func_801714E4(void *a0) { - D_80182834[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8015AE2C", func_80172C50); - - -extern void (*D_80182878[])(void); - -void func_80172CA0(void *a0) { - D_80182878[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_8018283C; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_8018283C); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_003/ov_SC03_003_jr_8016AB6C.c b/src/ov_SC03_003/ov_SC03_003_jr_8016AB6C.c new file mode 100644 index 000000000..a17b869bf --- /dev/null +++ b/src/ov_SC03_003/ov_SC03_003_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801817FC; +extern u8 D_8018176C; +extern u8 D_80181748; +extern u8 D_80181724; +extern u8 D_801817D8; +extern u8 D_801817B4; +extern u8 D_80181790; +extern u8 D_80181700; +extern void func_80145934(void); +extern u8 D_8018188C; +extern u8 D_80181868; +extern u8 D_80181844; +extern u8 D_80181820; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80180C84[]; +extern unsigned char D_80180CB4[]; +extern unsigned char D_80180D04[]; +extern unsigned char D_80180D34[]; +extern unsigned char D_80180D64[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80180DB4[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80180E7C[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80180F04[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80180F0C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8018E860; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8018E864; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80180F3C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80180FE4[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80181008[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80180FF8; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018101C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80181028[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80181038[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80181050[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80181040; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80181064[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80181080[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80181070; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80181094[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801810A8[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801810BC; +extern void (*D_801810E4[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801810C4; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80181130[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80181134[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80181598[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_801815A8[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_8018E898; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_801815D0[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801815B0; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_801815C0; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80181610[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80181618[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_801815E4; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80181624[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_801815F4; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_8018E8A0; +extern s32 D_8018E8AC; +extern s32 D_8018E8B0; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80181660[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80181634[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_8018E8A8; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_801818B0[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_801816D0[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80181954[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80181AA8[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_801818C4; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80181AB0[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_801818D4; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801818F4; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80181AB8[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80181AE0[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80181AEC[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80181960[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80181B90; +extern void func_8015D380(s32 a0); +extern unsigned char D_80180C74[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80181BA4[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80181BE0[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80181C28; +extern u16 D_80181C2A; +extern u16 D_80181C2C; +extern s32 D_80181C30; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80181C38; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80181944; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80181CBC[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80181D6C[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80181D9C[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80181E00; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_8018E8B8[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80181E24[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_8018E910[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80181E6C[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80181E5C; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_8018E164[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80181E74[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80181EC8[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80181E90; +extern s16 D_80181EC4; +extern s16 D_80181EC2; +extern s16 D_80181EC0; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80181ED4[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_8018E970; +extern u8 D_8018E971; +extern u8 D_8018E972; +extern u8 D_8018E973; +extern u8 D_8018E974; +extern u8 D_8018E975; +extern u8 D_8018E976; +extern u8 D_8018E977; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80181EE4[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_8018E9B0; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80181F28[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80181FA4[]; +extern s32 D_80181FC4[]; +extern u8 D_80182040[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80182060[]; +extern u8 D_80182080[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_8018211C[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80182198[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_8018E174; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_801821A4[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_801821AC[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80182274[])(void); +extern void func_80166618(void *a0); +extern void (*D_80182284[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80182294[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_801822A0[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80182200[]; +extern u8 D_80182214[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_801822B8[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_801822C0[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_801822C8[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_801822D0[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_801822D8[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_801822E0[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_801822E8[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_8018239C[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_801823A4[])(void); +extern void func_80169F00(void *a0); +extern char D_80182354[]; +extern char D_80182314[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_801823DC[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_801823E8[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80182430[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_801823F0[]; + extern u8 D_80182400[]; + extern u8 D_8018EC80[]; + extern u8 D_8018ECA8[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_801823F0, D_8018EC80) + 3; + func_8001CE28(obj, D_8018EC80); + } else { + var_s3 = func_80024054(D_80182400, D_8018ECA8) + 9; + func_8001CE28(obj, D_8018ECA8); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_801824AC[])(void); + +void func_8016B4BC(void *a0) { + D_801824AC[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_8018ECD0; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_8018ECD0); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_801824A0[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_801824A0; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_801824E4[]; +extern unsigned short D_801824EC[]; +extern unsigned short D_801824F4[]; +extern unsigned char D_8018ECD8[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_8018ECD8 + param_2 * 0x40); + puVar3 = D_801824E4[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_801824EC[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_801824F4[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_8018ECD0; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_8018ECD0, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_801824FC[])(void); + +void func_8016BBA4(void *a0) { + D_801824FC[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_8018EE0C; + extern u8 D_8018EE0D; + extern u8 D_8018EE0E; + extern M2C_UNK D_8018EE10; + extern u8 D_8018EE11; + extern u8 D_8018EE12; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_8018EE0C) = 0x20; + D_8018EE0D = 0x20; + D_8018EE0E = 0; + (*(u8 *)&D_8018EE10) = 0xc0; + D_8018EE11 = 0xc0; + D_8018EE12 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_8018EE0C; +extern M2C_UNK D_8018EE10; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_8018EE0C, &D_8018EE10, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_8018EE0D; + extern u8 D_8018EE0E; + extern u8 D_8018EE11; + extern u8 D_8018EE12; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_8018EE0C); + if (*p1 != 0) *p1 -= 4; + if (D_8018EE0D != 0) D_8018EE0D -= 4; + if (D_8018EE0E != 0) D_8018EE0E -= 4; + p2 = &(*(u8 *)&D_8018EE10); + if (*p2 != 0) *p2 -= 4; + if (D_8018EE11 != 0) D_8018EE11 -= 4; + if (D_8018EE12 != 0) D_8018EE12 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_8018EE0C), &(*(int *)&D_8018EE10), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_8018ED98; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_8018ED98); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_8018250C; + extern s32 D_80182514; + extern s32 D_8018251C; + extern s32 D_80182524; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_8018250C, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80182514, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_8018251C, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80182524, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_8018252C[])(void); + +void func_8016C14C(void *a0) { + D_8018252C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_8018EE14[]; +extern u8 D_8018EE1C[]; +extern u8 D_8018EDCC[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_8018EE14, D_8018EE1C, D_8018EDCC); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_8018EE28[]; + extern u8 D_8018EEE8; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_8018EE28[1] = 0xff; + D_8018EE28[2] = 0x10; + D_8018EE28[0] = 0x10; + D_8018EE28[6] = 0; + D_8018EE28[5] = 0; + D_8018EE28[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_8018EE28, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_8018EEE8, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_8018EE28); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8016AB6C", func_8016C998); + + +extern void (*D_80182534[])(void); + +void func_8016CB84(void *a0) { + D_80182534[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_8018EEE8[]; + + + Blk_8016CF04_8016CF04 *p = &D_8018EEE8[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80182550[])(void); + +void func_8016D19C(void *a0) { + D_80182550[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80182558[])(void); + +void func_8016D428(void *a0) { + D_80182558[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_801825C0[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_801825C0[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80182564; +extern u8 D_80182570; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80182564, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80182570); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8016AB6C", func_8016DC20); + + +extern void (*D_801825F4[])(void); + +void func_8016DEA4(void *a0) { + D_801825F4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_801825FC[])(void); + +void func_8016DF20(void *a0) { + D_801825FC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80182650[])(void); + +void func_8016E5B8(void *a0) { + D_80182650[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80182610[4]; + extern s32 D_80182630; + extern s32 D_80182638; + extern s32 D_80182640; + extern s32 D_80182648; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80182610[0], pp, &tmp); + RotTransSV(&D_80182610[1], &prim.v[1], &tmp); + RotTransSV(&D_80182610[2], &prim.v[2], &tmp); + RotTransSV(&D_80182610[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80182630; + prim.f1 = D_80182638; + prim.f2 = D_80182640; + prim.f3 = D_80182648; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80182690[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80182690[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80182684[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80182684[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80182674[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80182674[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80182684[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80182684[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80182684[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_801826A0; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_801826A0; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80182718[])(void); + +void func_8016F6E0(void *a0) { + D_80182718[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80182720[])(void); + +void func_8016F798(void *a0) { + D_80182720[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80182728[])(void); + +void func_8016F834(void *a0) { + D_80182728[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80182730[])(void); + +void func_8016F8E4(void *a0) { + D_80182730[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80182738[])(void); + +void func_8016F9C4(void *a0) { + D_80182738[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80182740[])(void); + +void func_8016FA84(void *a0) { + D_80182740[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_8018274C[])(void); + +void func_8016FB7C(void *a0) { + D_8018274C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80182758[])(void); + +void func_8016FC90(void *a0) { + D_80182758[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80182764[])(void); + +void func_8016FDB4(void *a0) { + D_80182764[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80182774[])(void); + +void func_8016FF30(void *a0) { + D_80182774[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80182784[])(void); + +void func_8016FFDC(void *a0) { + D_80182784[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_8018278C[])(void); + +void func_80170150(void *a0) { + D_8018278C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80182794[])(void); + +void func_80170240(void *a0) { + D_80182794[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_8018279C[])(void); + +void func_801702FC(void *a0) { + D_8018279C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_801827A4[])(void); + +void func_801703E0(void *a0) { + D_801827A4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_801827AC[])(void); + +void func_801704B0(void *a0) { + D_801827AC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_801827B4[])(void); + +void func_80170548(void *a0) { + D_801827B4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_801827BC[])(void); + +void func_801705F8(void *a0) { + D_801827BC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_801827C4[])(void); + +void func_801706AC(void *a0) { + D_801827C4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_801827CC[])(void); + +void func_80170748(void *a0) { + D_801827CC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_801827D4[])(void); + +void func_80170810(void *a0) { + D_801827D4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_801827DC[])(void); + +void func_80170AD8(void *a0) { + D_801827DC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_801827E4[])(void); + +void func_80170BD8(void *a0) { + D_801827E4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_801827EC[])(void); + +void func_80170C74(void *a0) { + D_801827EC[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8016AB6C", func_80170CF0); + + +extern void (*D_801827F4[])(void); + +void func_80170D68(void *a0) { + D_801827F4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_801827FC[])(void); + +void func_80170E34(void *a0) { + D_801827FC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80182804[])(void); + +void func_80170EFC(void *a0) { + D_80182804[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_8018280C[])(void); + +void func_80170FB0(void *a0) { + D_8018280C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80182814[])(void); + +void func_80171064(void *a0) { + D_80182814[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_8018281C[])(void); + +void func_80171120(void *a0) { + D_8018281C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80182824[])(void); + +void func_801711C0(void *a0) { + D_80182824[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_8018282C[])(void); + +void func_80171260(void *a0) { + D_8018282C[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80182834[])(void); + +void func_801714E4(void *a0) { + D_80182834[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8016AB6C", func_80172C50); + + +extern void (*D_80182878[])(void); + +void func_80172CA0(void *a0) { + D_80182878[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_8018283C; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_8018283C); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_006/ov_SC03_006_jr_8015AE2C.c b/src/ov_SC03_006/ov_SC03_006_jr_8015AE2C.c index 60c57d460..d9e9cffd3 100644 --- a/src/ov_SC03_006/ov_SC03_006_jr_8015AE2C.c +++ b/src/ov_SC03_006/ov_SC03_006_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_8018F74C[])(void); void func_8016AB30(void *a0) { D_8018F74C[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_8018F7C8[])(void); - -void func_8016B4BC(void *a0) { - D_8018F7C8[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801F6648; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801F6648); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_8018F7BC[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_8018F7BC; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_8018F800[]; -extern unsigned short D_8018F808[]; -extern unsigned short D_8018F810[]; -extern unsigned char D_801F6650[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801F6650 + param_2 * 0x40); - puVar3 = D_8018F800[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_8018F808[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_8018F810[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801F6648; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801F6648, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_8018F818[])(void); - -void func_8016BBA4(void *a0) { - D_8018F818[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801F6784; - extern u8 D_801F6785; - extern u8 D_801F6786; - extern M2C_UNK D_801F6788; - extern u8 D_801F6789; - extern u8 D_801F678A; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801F6784) = 0x20; - D_801F6785 = 0x20; - D_801F6786 = 0; - (*(u8 *)&D_801F6788) = 0xc0; - D_801F6789 = 0xc0; - D_801F678A = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801F6784; -extern M2C_UNK D_801F6788; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801F6784, &D_801F6788, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801F6785; - extern u8 D_801F6786; - extern u8 D_801F6789; - extern u8 D_801F678A; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801F6784); - if (*p1 != 0) *p1 -= 4; - if (D_801F6785 != 0) D_801F6785 -= 4; - if (D_801F6786 != 0) D_801F6786 -= 4; - p2 = &(*(u8 *)&D_801F6788); - if (*p2 != 0) *p2 -= 4; - if (D_801F6789 != 0) D_801F6789 -= 4; - if (D_801F678A != 0) D_801F678A -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801F6784), &(*(int *)&D_801F6788), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801F6710; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801F6710); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_8018F828; - extern s32 D_8018F830; - extern s32 D_8018F838; - extern s32 D_8018F840; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_8018F828, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_8018F830, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_8018F838, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_8018F840, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_8018F848[])(void); - -void func_8016C14C(void *a0) { - D_8018F848[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801F678C[]; -extern u8 D_801F6794[]; -extern u8 D_801F6744[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801F678C, D_801F6794, D_801F6744); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801F67A0[]; - extern u8 D_801F6860; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801F67A0[1] = 0xff; - D_801F67A0[2] = 0x10; - D_801F67A0[0] = 0x10; - D_801F67A0[6] = 0; - D_801F67A0[5] = 0; - D_801F67A0[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801F67A0, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801F6860, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801F67A0); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8015AE2C", func_8016C998); - - -extern void (*D_8018F850[])(void); - -void func_8016CB84(void *a0) { - D_8018F850[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801F6860[]; - - - Blk_8016CF04_8016CF04 *p = &D_801F6860[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_8018F86C[])(void); - -void func_8016D19C(void *a0) { - D_8018F86C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_8018F874[])(void); - -void func_8016D428(void *a0) { - D_8018F874[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_8018F8DC[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_8018F8DC[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_8018F880; -extern u8 D_8018F88C; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018F880, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018F88C); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8015AE2C", func_8016DC20); - - -extern void (*D_8018F910[])(void); - -void func_8016DEA4(void *a0) { - D_8018F910[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_8018F918[])(void); - -void func_8016DF20(void *a0) { - D_8018F918[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_8018F96C[])(void); - -void func_8016E5B8(void *a0) { - D_8018F96C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_8018F92C[4]; - extern s32 D_8018F94C; - extern s32 D_8018F954; - extern s32 D_8018F95C; - extern s32 D_8018F964; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_8018F92C[0], pp, &tmp); - RotTransSV(&D_8018F92C[1], &prim.v[1], &tmp); - RotTransSV(&D_8018F92C[2], &prim.v[2], &tmp); - RotTransSV(&D_8018F92C[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_8018F94C; - prim.f1 = D_8018F954; - prim.f2 = D_8018F95C; - prim.f3 = D_8018F964; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_8018F9AC[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_8018F9AC[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_8018F9A0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_8018F9A0[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_8018F990[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_8018F990[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018F9A0[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_8018F9A0[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_8018F9A0[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_8018F9BC; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_8018F9BC; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_8018FA34[])(void); - -void func_8016F6E0(void *a0) { - D_8018FA34[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_8018FA3C[])(void); - -void func_8016F798(void *a0) { - D_8018FA3C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_8018FA44[])(void); - -void func_8016F834(void *a0) { - D_8018FA44[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_8018FA4C[])(void); - -void func_8016F8E4(void *a0) { - D_8018FA4C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_8018FA54[])(void); - -void func_8016F9C4(void *a0) { - D_8018FA54[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_8018FA5C[])(void); - -void func_8016FA84(void *a0) { - D_8018FA5C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_8018FA68[])(void); - -void func_8016FB7C(void *a0) { - D_8018FA68[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_8018FA74[])(void); - -void func_8016FC90(void *a0) { - D_8018FA74[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_8018FA80[])(void); - -void func_8016FDB4(void *a0) { - D_8018FA80[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_8018FA90[])(void); - -void func_8016FF30(void *a0) { - D_8018FA90[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_8018FAA0[])(void); - -void func_8016FFDC(void *a0) { - D_8018FAA0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_8018FAA8[])(void); - -void func_80170150(void *a0) { - D_8018FAA8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_8018FAB0[])(void); - -void func_80170240(void *a0) { - D_8018FAB0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_8018FAB8[])(void); - -void func_801702FC(void *a0) { - D_8018FAB8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_8018FAC0[])(void); - -void func_801703E0(void *a0) { - D_8018FAC0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_8018FAC8[])(void); - -void func_801704B0(void *a0) { - D_8018FAC8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_8018FAD0[])(void); - -void func_80170548(void *a0) { - D_8018FAD0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_8018FAD8[])(void); - -void func_801705F8(void *a0) { - D_8018FAD8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_8018FAE0[])(void); - -void func_801706AC(void *a0) { - D_8018FAE0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_8018FAE8[])(void); - -void func_80170748(void *a0) { - D_8018FAE8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_8018FAF0[])(void); - -void func_80170810(void *a0) { - D_8018FAF0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_8018FAF8[])(void); - -void func_80170AD8(void *a0) { - D_8018FAF8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_8018FB00[])(void); - -void func_80170BD8(void *a0) { - D_8018FB00[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_8018FB08[])(void); - -void func_80170C74(void *a0) { - D_8018FB08[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8015AE2C", func_80170CF0); - - -extern void (*D_8018FB10[])(void); - -void func_80170D68(void *a0) { - D_8018FB10[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_8018FB18[])(void); - -void func_80170E34(void *a0) { - D_8018FB18[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_8018FB20[])(void); - -void func_80170EFC(void *a0) { - D_8018FB20[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_8018FB28[])(void); - -void func_80170FB0(void *a0) { - D_8018FB28[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_8018FB30[])(void); - -void func_80171064(void *a0) { - D_8018FB30[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_8018FB38[])(void); - -void func_80171120(void *a0) { - D_8018FB38[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_8018FB40[])(void); - -void func_801711C0(void *a0) { - D_8018FB40[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_8018FB48[])(void); - -void func_80171260(void *a0) { - D_8018FB48[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_8018FB50[])(void); - -void func_801714E4(void *a0) { - D_8018FB50[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8015AE2C", func_80172C50); - - -extern void (*D_8018FB94[])(void); - -void func_80172CA0(void *a0) { - D_8018FB94[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_8018FB58; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_8018FB58); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_006/ov_SC03_006_jr_8016AB6C.c b/src/ov_SC03_006/ov_SC03_006_jr_8016AB6C.c new file mode 100644 index 000000000..70155a31d --- /dev/null +++ b/src/ov_SC03_006/ov_SC03_006_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018EB18; +extern u8 D_8018EA88; +extern u8 D_8018EA64; +extern u8 D_8018EA40; +extern u8 D_8018EAF4; +extern u8 D_8018EAD0; +extern u8 D_8018EAAC; +extern u8 D_8018EA1C; +extern void func_80145934(void); +extern u8 D_8018EBA8; +extern u8 D_8018EB84; +extern u8 D_8018EB60; +extern u8 D_8018EB3C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018DFA0[]; +extern unsigned char D_8018DFD0[]; +extern unsigned char D_8018E020[]; +extern unsigned char D_8018E050[]; +extern unsigned char D_8018E080[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018E0D0[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018E198[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018E220[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018E228; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801F61D8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801F61DC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018E258; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018E300[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018E324[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018E314; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018E338[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018E344[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018E354[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018E36C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018E35C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018E380[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018E39C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018E38C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018E3B0[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018E3C4[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018E3D8; +extern void (*D_8018E400[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018E3E0; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018E44C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018E450[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018E8B4[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018E8C4[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801F6210; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018E8EC[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018E8CC; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018E8DC; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018E92C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018E934[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018E900; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018E940[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018E910; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801F6218; +extern s32 D_801F6224; +extern s32 D_801F6228; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018E97C[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018E950[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801F6220; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018EBCC[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018E9EC[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018EC70[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018EDC4[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018EBE0; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018EDCC[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018EBF0; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018EC10; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_8018EDD4[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_8018EDFC[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_8018EE08[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_8018EC7C[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_8018EEAC; +extern void func_8015D380(s32 a0); +extern unsigned char D_8018DF90[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_8018EEC0[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_8018EEFC[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_8018EF44; +extern u16 D_8018EF46; +extern u16 D_8018EF48; +extern s32 D_8018EF4C; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_8018EF54; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_8018EC60; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_8018EFD8[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_8018F088[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_8018F0B8[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_8018F11C; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801F6230[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_8018F140[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801F6288[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_8018F188[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_8018F178; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801F5A20[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_8018F190[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_8018F1E4[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_8018F1AC; +extern s16 D_8018F1E0; +extern s16 D_8018F1DE; +extern s16 D_8018F1DC; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_8018F1F0[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801F62E8; +extern u8 D_801F62E9; +extern u8 D_801F62EA; +extern u8 D_801F62EB; +extern u8 D_801F62EC; +extern u8 D_801F62ED; +extern u8 D_801F62EE; +extern u8 D_801F62EF; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_8018F200[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801F6328; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_8018F244[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_8018F2C0[]; +extern s32 D_8018F2E0[]; +extern u8 D_8018F35C[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_8018F37C[]; +extern u8 D_8018F39C[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_8018F438[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_8018F4B4[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801F5A30; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_8018F4C0[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_8018F4C8[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_8018F590[])(void); +extern void func_80166618(void *a0); +extern void (*D_8018F5A0[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_8018F5B0[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_8018F5BC[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_8018F51C[]; +extern u8 D_8018F530[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_8018F5D4[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_8018F5DC[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_8018F5E4[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_8018F5EC[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_8018F5F4[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_8018F5FC[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_8018F604[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_8018F6B8[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_8018F6C0[])(void); +extern void func_80169F00(void *a0); +extern char D_8018F670[]; +extern char D_8018F630[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_8018F6F8[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_8018F704[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_8018F74C[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_8018F70C[]; + extern u8 D_8018F71C[]; + extern u8 D_801F65F8[]; + extern u8 D_801F6620[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_8018F70C, D_801F65F8) + 3; + func_8001CE28(obj, D_801F65F8); + } else { + var_s3 = func_80024054(D_8018F71C, D_801F6620) + 9; + func_8001CE28(obj, D_801F6620); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_8018F7C8[])(void); + +void func_8016B4BC(void *a0) { + D_8018F7C8[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801F6648; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801F6648); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_8018F7BC[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_8018F7BC; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_8018F800[]; +extern unsigned short D_8018F808[]; +extern unsigned short D_8018F810[]; +extern unsigned char D_801F6650[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801F6650 + param_2 * 0x40); + puVar3 = D_8018F800[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_8018F808[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_8018F810[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801F6648; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801F6648, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_8018F818[])(void); + +void func_8016BBA4(void *a0) { + D_8018F818[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801F6784; + extern u8 D_801F6785; + extern u8 D_801F6786; + extern M2C_UNK D_801F6788; + extern u8 D_801F6789; + extern u8 D_801F678A; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801F6784) = 0x20; + D_801F6785 = 0x20; + D_801F6786 = 0; + (*(u8 *)&D_801F6788) = 0xc0; + D_801F6789 = 0xc0; + D_801F678A = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801F6784; +extern M2C_UNK D_801F6788; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801F6784, &D_801F6788, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801F6785; + extern u8 D_801F6786; + extern u8 D_801F6789; + extern u8 D_801F678A; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801F6784); + if (*p1 != 0) *p1 -= 4; + if (D_801F6785 != 0) D_801F6785 -= 4; + if (D_801F6786 != 0) D_801F6786 -= 4; + p2 = &(*(u8 *)&D_801F6788); + if (*p2 != 0) *p2 -= 4; + if (D_801F6789 != 0) D_801F6789 -= 4; + if (D_801F678A != 0) D_801F678A -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801F6784), &(*(int *)&D_801F6788), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801F6710; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801F6710); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_8018F828; + extern s32 D_8018F830; + extern s32 D_8018F838; + extern s32 D_8018F840; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_8018F828, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_8018F830, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_8018F838, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_8018F840, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_8018F848[])(void); + +void func_8016C14C(void *a0) { + D_8018F848[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801F678C[]; +extern u8 D_801F6794[]; +extern u8 D_801F6744[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801F678C, D_801F6794, D_801F6744); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801F67A0[]; + extern u8 D_801F6860; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801F67A0[1] = 0xff; + D_801F67A0[2] = 0x10; + D_801F67A0[0] = 0x10; + D_801F67A0[6] = 0; + D_801F67A0[5] = 0; + D_801F67A0[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801F67A0, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801F6860, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801F67A0); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8016AB6C", func_8016C998); + + +extern void (*D_8018F850[])(void); + +void func_8016CB84(void *a0) { + D_8018F850[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801F6860[]; + + + Blk_8016CF04_8016CF04 *p = &D_801F6860[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_8018F86C[])(void); + +void func_8016D19C(void *a0) { + D_8018F86C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_8018F874[])(void); + +void func_8016D428(void *a0) { + D_8018F874[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018F8DC[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_8018F8DC[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_8018F880; +extern u8 D_8018F88C; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018F880, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018F88C); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8016AB6C", func_8016DC20); + + +extern void (*D_8018F910[])(void); + +void func_8016DEA4(void *a0) { + D_8018F910[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_8018F918[])(void); + +void func_8016DF20(void *a0) { + D_8018F918[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_8018F96C[])(void); + +void func_8016E5B8(void *a0) { + D_8018F96C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_8018F92C[4]; + extern s32 D_8018F94C; + extern s32 D_8018F954; + extern s32 D_8018F95C; + extern s32 D_8018F964; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_8018F92C[0], pp, &tmp); + RotTransSV(&D_8018F92C[1], &prim.v[1], &tmp); + RotTransSV(&D_8018F92C[2], &prim.v[2], &tmp); + RotTransSV(&D_8018F92C[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_8018F94C; + prim.f1 = D_8018F954; + prim.f2 = D_8018F95C; + prim.f3 = D_8018F964; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_8018F9AC[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_8018F9AC[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_8018F9A0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_8018F9A0[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_8018F990[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_8018F990[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018F9A0[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_8018F9A0[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_8018F9A0[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_8018F9BC; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_8018F9BC; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_8018FA34[])(void); + +void func_8016F6E0(void *a0) { + D_8018FA34[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_8018FA3C[])(void); + +void func_8016F798(void *a0) { + D_8018FA3C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_8018FA44[])(void); + +void func_8016F834(void *a0) { + D_8018FA44[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_8018FA4C[])(void); + +void func_8016F8E4(void *a0) { + D_8018FA4C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_8018FA54[])(void); + +void func_8016F9C4(void *a0) { + D_8018FA54[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_8018FA5C[])(void); + +void func_8016FA84(void *a0) { + D_8018FA5C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_8018FA68[])(void); + +void func_8016FB7C(void *a0) { + D_8018FA68[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_8018FA74[])(void); + +void func_8016FC90(void *a0) { + D_8018FA74[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_8018FA80[])(void); + +void func_8016FDB4(void *a0) { + D_8018FA80[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_8018FA90[])(void); + +void func_8016FF30(void *a0) { + D_8018FA90[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_8018FAA0[])(void); + +void func_8016FFDC(void *a0) { + D_8018FAA0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_8018FAA8[])(void); + +void func_80170150(void *a0) { + D_8018FAA8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_8018FAB0[])(void); + +void func_80170240(void *a0) { + D_8018FAB0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_8018FAB8[])(void); + +void func_801702FC(void *a0) { + D_8018FAB8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_8018FAC0[])(void); + +void func_801703E0(void *a0) { + D_8018FAC0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_8018FAC8[])(void); + +void func_801704B0(void *a0) { + D_8018FAC8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_8018FAD0[])(void); + +void func_80170548(void *a0) { + D_8018FAD0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_8018FAD8[])(void); + +void func_801705F8(void *a0) { + D_8018FAD8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_8018FAE0[])(void); + +void func_801706AC(void *a0) { + D_8018FAE0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_8018FAE8[])(void); + +void func_80170748(void *a0) { + D_8018FAE8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_8018FAF0[])(void); + +void func_80170810(void *a0) { + D_8018FAF0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_8018FAF8[])(void); + +void func_80170AD8(void *a0) { + D_8018FAF8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_8018FB00[])(void); + +void func_80170BD8(void *a0) { + D_8018FB00[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_8018FB08[])(void); + +void func_80170C74(void *a0) { + D_8018FB08[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8016AB6C", func_80170CF0); + + +extern void (*D_8018FB10[])(void); + +void func_80170D68(void *a0) { + D_8018FB10[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_8018FB18[])(void); + +void func_80170E34(void *a0) { + D_8018FB18[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_8018FB20[])(void); + +void func_80170EFC(void *a0) { + D_8018FB20[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_8018FB28[])(void); + +void func_80170FB0(void *a0) { + D_8018FB28[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_8018FB30[])(void); + +void func_80171064(void *a0) { + D_8018FB30[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_8018FB38[])(void); + +void func_80171120(void *a0) { + D_8018FB38[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_8018FB40[])(void); + +void func_801711C0(void *a0) { + D_8018FB40[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_8018FB48[])(void); + +void func_80171260(void *a0) { + D_8018FB48[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_8018FB50[])(void); + +void func_801714E4(void *a0) { + D_8018FB50[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8016AB6C", func_80172C50); + + +extern void (*D_8018FB94[])(void); + +void func_80172CA0(void *a0) { + D_8018FB94[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_8018FB58; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_8018FB58); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_007/ov_SC03_007_jr_8015AE2C.c b/src/ov_SC03_007/ov_SC03_007_jr_8015AE2C.c index 0a99abc35..bd0113a5b 100644 --- a/src/ov_SC03_007/ov_SC03_007_jr_8015AE2C.c +++ b/src/ov_SC03_007/ov_SC03_007_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_8018A544[])(void); void func_8016AB30(void *a0) { D_8018A544[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_8018A5C0[])(void); - -void func_8016B4BC(void *a0) { - D_8018A5C0[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801E8FA0; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801E8FA0); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_8018A5B4[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_8018A5B4; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_8018A5F8[]; -extern unsigned short D_8018A600[]; -extern unsigned short D_8018A608[]; -extern unsigned char D_801E8FA8[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801E8FA8 + param_2 * 0x40); - puVar3 = D_8018A5F8[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_8018A600[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_8018A608[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801E8FA0; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801E8FA0, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_8018A610[])(void); - -void func_8016BBA4(void *a0) { - D_8018A610[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801E90DC; - extern u8 D_801E90DD; - extern u8 D_801E90DE; - extern M2C_UNK D_801E90E0; - extern u8 D_801E90E1; - extern u8 D_801E90E2; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801E90DC) = 0x20; - D_801E90DD = 0x20; - D_801E90DE = 0; - (*(u8 *)&D_801E90E0) = 0xc0; - D_801E90E1 = 0xc0; - D_801E90E2 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801E90DC; -extern M2C_UNK D_801E90E0; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801E90DC, &D_801E90E0, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801E90DD; - extern u8 D_801E90DE; - extern u8 D_801E90E1; - extern u8 D_801E90E2; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801E90DC); - if (*p1 != 0) *p1 -= 4; - if (D_801E90DD != 0) D_801E90DD -= 4; - if (D_801E90DE != 0) D_801E90DE -= 4; - p2 = &(*(u8 *)&D_801E90E0); - if (*p2 != 0) *p2 -= 4; - if (D_801E90E1 != 0) D_801E90E1 -= 4; - if (D_801E90E2 != 0) D_801E90E2 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801E90DC), &(*(int *)&D_801E90E0), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801E9068; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801E9068); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_8018A620; - extern s32 D_8018A628; - extern s32 D_8018A630; - extern s32 D_8018A638; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_8018A620, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_8018A628, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_8018A630, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_8018A638, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_8018A640[])(void); - -void func_8016C14C(void *a0) { - D_8018A640[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801E90E4[]; -extern u8 D_801E90EC[]; -extern u8 D_801E909C[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801E90E4, D_801E90EC, D_801E909C); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801E90F8[]; - extern u8 D_801E91B8; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801E90F8[1] = 0xff; - D_801E90F8[2] = 0x10; - D_801E90F8[0] = 0x10; - D_801E90F8[6] = 0; - D_801E90F8[5] = 0; - D_801E90F8[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801E90F8, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801E91B8, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801E90F8); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8015AE2C", func_8016C998); - - -extern void (*D_8018A648[])(void); - -void func_8016CB84(void *a0) { - D_8018A648[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801E91B8[]; - - - Blk_8016CF04_8016CF04 *p = &D_801E91B8[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_8018A664[])(void); - -void func_8016D19C(void *a0) { - D_8018A664[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_8018A66C[])(void); - -void func_8016D428(void *a0) { - D_8018A66C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_8018A6D4[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_8018A6D4[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_8018A678; -extern u8 D_8018A684; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018A678, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018A684); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8015AE2C", func_8016DC20); - - -extern void (*D_8018A708[])(void); - -void func_8016DEA4(void *a0) { - D_8018A708[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_8018A710[])(void); - -void func_8016DF20(void *a0) { - D_8018A710[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_8018A764[])(void); - -void func_8016E5B8(void *a0) { - D_8018A764[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_8018A724[4]; - extern s32 D_8018A744; - extern s32 D_8018A74C; - extern s32 D_8018A754; - extern s32 D_8018A75C; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_8018A724[0], pp, &tmp); - RotTransSV(&D_8018A724[1], &prim.v[1], &tmp); - RotTransSV(&D_8018A724[2], &prim.v[2], &tmp); - RotTransSV(&D_8018A724[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_8018A744; - prim.f1 = D_8018A74C; - prim.f2 = D_8018A754; - prim.f3 = D_8018A75C; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_8018A7A4[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_8018A7A4[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_8018A798[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_8018A798[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_8018A788[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_8018A788[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018A798[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_8018A798[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_8018A798[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_8018A7B4; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_8018A7B4; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_8018A82C[])(void); - -void func_8016F6E0(void *a0) { - D_8018A82C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_8018A834[])(void); - -void func_8016F798(void *a0) { - D_8018A834[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_8018A83C[])(void); - -void func_8016F834(void *a0) { - D_8018A83C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_8018A844[])(void); - -void func_8016F8E4(void *a0) { - D_8018A844[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_8018A84C[])(void); - -void func_8016F9C4(void *a0) { - D_8018A84C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_8018A854[])(void); - -void func_8016FA84(void *a0) { - D_8018A854[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_8018A860[])(void); - -void func_8016FB7C(void *a0) { - D_8018A860[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_8018A86C[])(void); - -void func_8016FC90(void *a0) { - D_8018A86C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_8018A878[])(void); - -void func_8016FDB4(void *a0) { - D_8018A878[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_8018A888[])(void); - -void func_8016FF30(void *a0) { - D_8018A888[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_8018A898[])(void); - -void func_8016FFDC(void *a0) { - D_8018A898[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_8018A8A0[])(void); - -void func_80170150(void *a0) { - D_8018A8A0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_8018A8A8[])(void); - -void func_80170240(void *a0) { - D_8018A8A8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_8018A8B0[])(void); - -void func_801702FC(void *a0) { - D_8018A8B0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_8018A8B8[])(void); - -void func_801703E0(void *a0) { - D_8018A8B8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_8018A8C0[])(void); - -void func_801704B0(void *a0) { - D_8018A8C0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_8018A8C8[])(void); - -void func_80170548(void *a0) { - D_8018A8C8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_8018A8D0[])(void); - -void func_801705F8(void *a0) { - D_8018A8D0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_8018A8D8[])(void); - -void func_801706AC(void *a0) { - D_8018A8D8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_8018A8E0[])(void); - -void func_80170748(void *a0) { - D_8018A8E0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_8018A8E8[])(void); - -void func_80170810(void *a0) { - D_8018A8E8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_8018A8F0[])(void); - -void func_80170AD8(void *a0) { - D_8018A8F0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_8018A8F8[])(void); - -void func_80170BD8(void *a0) { - D_8018A8F8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_8018A900[])(void); - -void func_80170C74(void *a0) { - D_8018A900[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8015AE2C", func_80170CF0); - - -extern void (*D_8018A908[])(void); - -void func_80170D68(void *a0) { - D_8018A908[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_8018A910[])(void); - -void func_80170E34(void *a0) { - D_8018A910[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_8018A918[])(void); - -void func_80170EFC(void *a0) { - D_8018A918[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_8018A920[])(void); - -void func_80170FB0(void *a0) { - D_8018A920[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_8018A928[])(void); - -void func_80171064(void *a0) { - D_8018A928[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_8018A930[])(void); - -void func_80171120(void *a0) { - D_8018A930[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_8018A938[])(void); - -void func_801711C0(void *a0) { - D_8018A938[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_8018A940[])(void); - -void func_80171260(void *a0) { - D_8018A940[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_8018A948[])(void); - -void func_801714E4(void *a0) { - D_8018A948[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8015AE2C", func_80172C50); - - -extern void (*D_8018A98C[])(void); - -void func_80172CA0(void *a0) { - D_8018A98C[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_8018A950; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_8018A950); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_007/ov_SC03_007_jr_8016AB6C.c b/src/ov_SC03_007/ov_SC03_007_jr_8016AB6C.c new file mode 100644 index 000000000..0b457caf4 --- /dev/null +++ b/src/ov_SC03_007/ov_SC03_007_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80189910; +extern u8 D_80189880; +extern u8 D_8018985C; +extern u8 D_80189838; +extern u8 D_801898EC; +extern u8 D_801898C8; +extern u8 D_801898A4; +extern u8 D_80189814; +extern void func_80145934(void); +extern u8 D_801899A0; +extern u8 D_8018997C; +extern u8 D_80189958; +extern u8 D_80189934; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80188D98[]; +extern unsigned char D_80188DC8[]; +extern unsigned char D_80188E18[]; +extern unsigned char D_80188E48[]; +extern unsigned char D_80188E78[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80188EC8[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80188F90[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80189018[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80189020; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801E8B30; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801E8B34; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80189050; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801890F8[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018911C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018910C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80189130[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018913C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018914C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80189164[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80189154; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80189178[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80189194[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80189184; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801891A8[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801891BC[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801891D0; +extern void (*D_801891F8[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801891D8; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80189244[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80189248[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_801896AC[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_801896BC[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801E8B68; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_801896E4[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801896C4; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_801896D4; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80189724[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018972C[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_801896F8; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80189738[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80189708; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801E8B70; +extern s32 D_801E8B7C; +extern s32 D_801E8B80; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80189774[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80189748[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801E8B78; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_801899C4[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_801897E4[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80189A68[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80189BBC[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_801899D8; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80189BC4[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_801899E8; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80189A08; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80189BCC[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80189BF4[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80189C00[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80189A74[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80189CA4; +extern void func_8015D380(s32 a0); +extern unsigned char D_80188D88[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80189CB8[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80189CF4[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80189D3C; +extern u16 D_80189D3E; +extern u16 D_80189D40; +extern s32 D_80189D44; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80189D4C; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80189A58; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80189DD0[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80189E80[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80189EB0[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80189F14; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801E8B88[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80189F38[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801E8BE0[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80189F80[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80189F70; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801E83A8[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80189F88[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80189FDC[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80189FA4; +extern s16 D_80189FD8; +extern s16 D_80189FD6; +extern s16 D_80189FD4; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80189FE8[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801E8C40; +extern u8 D_801E8C41; +extern u8 D_801E8C42; +extern u8 D_801E8C43; +extern u8 D_801E8C44; +extern u8 D_801E8C45; +extern u8 D_801E8C46; +extern u8 D_801E8C47; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80189FF8[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801E8C80; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_8018A03C[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_8018A0B8[]; +extern s32 D_8018A0D8[]; +extern u8 D_8018A154[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_8018A174[]; +extern u8 D_8018A194[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_8018A230[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_8018A2AC[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801E83B8; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_8018A2B8[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_8018A2C0[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_8018A388[])(void); +extern void func_80166618(void *a0); +extern void (*D_8018A398[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_8018A3A8[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_8018A3B4[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_8018A314[]; +extern u8 D_8018A328[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_8018A3CC[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_8018A3D4[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_8018A3DC[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_8018A3E4[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_8018A3EC[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_8018A3F4[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_8018A3FC[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_8018A4B0[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_8018A4B8[])(void); +extern void func_80169F00(void *a0); +extern char D_8018A468[]; +extern char D_8018A428[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_8018A4F0[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_8018A4FC[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_8018A544[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_8018A504[]; + extern u8 D_8018A514[]; + extern u8 D_801E8F50[]; + extern u8 D_801E8F78[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_8018A504, D_801E8F50) + 3; + func_8001CE28(obj, D_801E8F50); + } else { + var_s3 = func_80024054(D_8018A514, D_801E8F78) + 9; + func_8001CE28(obj, D_801E8F78); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_8018A5C0[])(void); + +void func_8016B4BC(void *a0) { + D_8018A5C0[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801E8FA0; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801E8FA0); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_8018A5B4[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_8018A5B4; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_8018A5F8[]; +extern unsigned short D_8018A600[]; +extern unsigned short D_8018A608[]; +extern unsigned char D_801E8FA8[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801E8FA8 + param_2 * 0x40); + puVar3 = D_8018A5F8[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_8018A600[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_8018A608[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801E8FA0; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801E8FA0, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_8018A610[])(void); + +void func_8016BBA4(void *a0) { + D_8018A610[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801E90DC; + extern u8 D_801E90DD; + extern u8 D_801E90DE; + extern M2C_UNK D_801E90E0; + extern u8 D_801E90E1; + extern u8 D_801E90E2; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801E90DC) = 0x20; + D_801E90DD = 0x20; + D_801E90DE = 0; + (*(u8 *)&D_801E90E0) = 0xc0; + D_801E90E1 = 0xc0; + D_801E90E2 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801E90DC; +extern M2C_UNK D_801E90E0; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801E90DC, &D_801E90E0, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801E90DD; + extern u8 D_801E90DE; + extern u8 D_801E90E1; + extern u8 D_801E90E2; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801E90DC); + if (*p1 != 0) *p1 -= 4; + if (D_801E90DD != 0) D_801E90DD -= 4; + if (D_801E90DE != 0) D_801E90DE -= 4; + p2 = &(*(u8 *)&D_801E90E0); + if (*p2 != 0) *p2 -= 4; + if (D_801E90E1 != 0) D_801E90E1 -= 4; + if (D_801E90E2 != 0) D_801E90E2 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801E90DC), &(*(int *)&D_801E90E0), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801E9068; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801E9068); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_8018A620; + extern s32 D_8018A628; + extern s32 D_8018A630; + extern s32 D_8018A638; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_8018A620, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_8018A628, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_8018A630, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_8018A638, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_8018A640[])(void); + +void func_8016C14C(void *a0) { + D_8018A640[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801E90E4[]; +extern u8 D_801E90EC[]; +extern u8 D_801E909C[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801E90E4, D_801E90EC, D_801E909C); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801E90F8[]; + extern u8 D_801E91B8; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801E90F8[1] = 0xff; + D_801E90F8[2] = 0x10; + D_801E90F8[0] = 0x10; + D_801E90F8[6] = 0; + D_801E90F8[5] = 0; + D_801E90F8[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801E90F8, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801E91B8, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801E90F8); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8016AB6C", func_8016C998); + + +extern void (*D_8018A648[])(void); + +void func_8016CB84(void *a0) { + D_8018A648[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801E91B8[]; + + + Blk_8016CF04_8016CF04 *p = &D_801E91B8[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_8018A664[])(void); + +void func_8016D19C(void *a0) { + D_8018A664[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_8018A66C[])(void); + +void func_8016D428(void *a0) { + D_8018A66C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018A6D4[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_8018A6D4[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_8018A678; +extern u8 D_8018A684; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018A678, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018A684); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8016AB6C", func_8016DC20); + + +extern void (*D_8018A708[])(void); + +void func_8016DEA4(void *a0) { + D_8018A708[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_8018A710[])(void); + +void func_8016DF20(void *a0) { + D_8018A710[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_8018A764[])(void); + +void func_8016E5B8(void *a0) { + D_8018A764[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_8018A724[4]; + extern s32 D_8018A744; + extern s32 D_8018A74C; + extern s32 D_8018A754; + extern s32 D_8018A75C; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_8018A724[0], pp, &tmp); + RotTransSV(&D_8018A724[1], &prim.v[1], &tmp); + RotTransSV(&D_8018A724[2], &prim.v[2], &tmp); + RotTransSV(&D_8018A724[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_8018A744; + prim.f1 = D_8018A74C; + prim.f2 = D_8018A754; + prim.f3 = D_8018A75C; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_8018A7A4[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_8018A7A4[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_8018A798[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_8018A798[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_8018A788[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_8018A788[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018A798[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_8018A798[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_8018A798[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_8018A7B4; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_8018A7B4; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_8018A82C[])(void); + +void func_8016F6E0(void *a0) { + D_8018A82C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_8018A834[])(void); + +void func_8016F798(void *a0) { + D_8018A834[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_8018A83C[])(void); + +void func_8016F834(void *a0) { + D_8018A83C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_8018A844[])(void); + +void func_8016F8E4(void *a0) { + D_8018A844[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_8018A84C[])(void); + +void func_8016F9C4(void *a0) { + D_8018A84C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_8018A854[])(void); + +void func_8016FA84(void *a0) { + D_8018A854[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_8018A860[])(void); + +void func_8016FB7C(void *a0) { + D_8018A860[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_8018A86C[])(void); + +void func_8016FC90(void *a0) { + D_8018A86C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_8018A878[])(void); + +void func_8016FDB4(void *a0) { + D_8018A878[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_8018A888[])(void); + +void func_8016FF30(void *a0) { + D_8018A888[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_8018A898[])(void); + +void func_8016FFDC(void *a0) { + D_8018A898[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_8018A8A0[])(void); + +void func_80170150(void *a0) { + D_8018A8A0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_8018A8A8[])(void); + +void func_80170240(void *a0) { + D_8018A8A8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_8018A8B0[])(void); + +void func_801702FC(void *a0) { + D_8018A8B0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_8018A8B8[])(void); + +void func_801703E0(void *a0) { + D_8018A8B8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_8018A8C0[])(void); + +void func_801704B0(void *a0) { + D_8018A8C0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_8018A8C8[])(void); + +void func_80170548(void *a0) { + D_8018A8C8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_8018A8D0[])(void); + +void func_801705F8(void *a0) { + D_8018A8D0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_8018A8D8[])(void); + +void func_801706AC(void *a0) { + D_8018A8D8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_8018A8E0[])(void); + +void func_80170748(void *a0) { + D_8018A8E0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_8018A8E8[])(void); + +void func_80170810(void *a0) { + D_8018A8E8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_8018A8F0[])(void); + +void func_80170AD8(void *a0) { + D_8018A8F0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_8018A8F8[])(void); + +void func_80170BD8(void *a0) { + D_8018A8F8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_8018A900[])(void); + +void func_80170C74(void *a0) { + D_8018A900[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8016AB6C", func_80170CF0); + + +extern void (*D_8018A908[])(void); + +void func_80170D68(void *a0) { + D_8018A908[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_8018A910[])(void); + +void func_80170E34(void *a0) { + D_8018A910[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_8018A918[])(void); + +void func_80170EFC(void *a0) { + D_8018A918[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_8018A920[])(void); + +void func_80170FB0(void *a0) { + D_8018A920[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_8018A928[])(void); + +void func_80171064(void *a0) { + D_8018A928[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_8018A930[])(void); + +void func_80171120(void *a0) { + D_8018A930[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_8018A938[])(void); + +void func_801711C0(void *a0) { + D_8018A938[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_8018A940[])(void); + +void func_80171260(void *a0) { + D_8018A940[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_8018A948[])(void); + +void func_801714E4(void *a0) { + D_8018A948[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8016AB6C", func_80172C50); + + +extern void (*D_8018A98C[])(void); + +void func_80172CA0(void *a0) { + D_8018A98C[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_8018A950; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_8018A950); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_010/ov_SC03_010_jr_8015AE2C.c b/src/ov_SC03_010/ov_SC03_010_jr_8015AE2C.c index 56b1ad534..bb2a2a212 100644 --- a/src/ov_SC03_010/ov_SC03_010_jr_8015AE2C.c +++ b/src/ov_SC03_010/ov_SC03_010_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_80183064[])(void); void func_8016AB30(void *a0) { D_80183064[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_801830E0[])(void); - -void func_8016B4BC(void *a0) { - D_801830E0[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_8019F200; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_8019F200); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_801830D4[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_801830D4; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80183118[]; -extern unsigned short D_80183120[]; -extern unsigned short D_80183128[]; -extern unsigned char D_8019F208[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_8019F208 + param_2 * 0x40); - puVar3 = D_80183118[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80183120[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80183128[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_8019F200; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_8019F200, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80183130[])(void); - -void func_8016BBA4(void *a0) { - D_80183130[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_8019F33C; - extern u8 D_8019F33D; - extern u8 D_8019F33E; - extern M2C_UNK D_8019F340; - extern u8 D_8019F341; - extern u8 D_8019F342; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_8019F33C) = 0x20; - D_8019F33D = 0x20; - D_8019F33E = 0; - (*(u8 *)&D_8019F340) = 0xc0; - D_8019F341 = 0xc0; - D_8019F342 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_8019F33C; -extern M2C_UNK D_8019F340; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_8019F33C, &D_8019F340, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_8019F33D; - extern u8 D_8019F33E; - extern u8 D_8019F341; - extern u8 D_8019F342; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_8019F33C); - if (*p1 != 0) *p1 -= 4; - if (D_8019F33D != 0) D_8019F33D -= 4; - if (D_8019F33E != 0) D_8019F33E -= 4; - p2 = &(*(u8 *)&D_8019F340); - if (*p2 != 0) *p2 -= 4; - if (D_8019F341 != 0) D_8019F341 -= 4; - if (D_8019F342 != 0) D_8019F342 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_8019F33C), &(*(int *)&D_8019F340), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_8019F2C8; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_8019F2C8); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80183140; - extern s32 D_80183148; - extern s32 D_80183150; - extern s32 D_80183158; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80183140, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80183148, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80183150, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80183158, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80183160[])(void); - -void func_8016C14C(void *a0) { - D_80183160[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_8019F344[]; -extern u8 D_8019F34C[]; -extern u8 D_8019F2FC[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_8019F344, D_8019F34C, D_8019F2FC); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_8019F358[]; - extern u8 D_8019F418; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_8019F358[1] = 0xff; - D_8019F358[2] = 0x10; - D_8019F358[0] = 0x10; - D_8019F358[6] = 0; - D_8019F358[5] = 0; - D_8019F358[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_8019F358, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_8019F418, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_8019F358); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8015AE2C", func_8016C998); - - -extern void (*D_80183168[])(void); - -void func_8016CB84(void *a0) { - D_80183168[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_8019F418[]; - - - Blk_8016CF04_8016CF04 *p = &D_8019F418[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80183184[])(void); - -void func_8016D19C(void *a0) { - D_80183184[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_8018318C[])(void); - -void func_8016D428(void *a0) { - D_8018318C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_801831F4[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_801831F4[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80183198; -extern u8 D_801831A4; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80183198, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801831A4); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80183228[])(void); - -void func_8016DEA4(void *a0) { - D_80183228[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80183230[])(void); - -void func_8016DF20(void *a0) { - D_80183230[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80183284[])(void); - -void func_8016E5B8(void *a0) { - D_80183284[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80183244[4]; - extern s32 D_80183264; - extern s32 D_8018326C; - extern s32 D_80183274; - extern s32 D_8018327C; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80183244[0], pp, &tmp); - RotTransSV(&D_80183244[1], &prim.v[1], &tmp); - RotTransSV(&D_80183244[2], &prim.v[2], &tmp); - RotTransSV(&D_80183244[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80183264; - prim.f1 = D_8018326C; - prim.f2 = D_80183274; - prim.f3 = D_8018327C; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_801832C4[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_801832C4[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_801832B8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_801832B8[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_801832A8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_801832A8[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801832B8[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_801832B8[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_801832B8[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_801832D4; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_801832D4; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_8018334C[])(void); - -void func_8016F6E0(void *a0) { - D_8018334C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80183354[])(void); - -void func_8016F798(void *a0) { - D_80183354[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_8018335C[])(void); - -void func_8016F834(void *a0) { - D_8018335C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80183364[])(void); - -void func_8016F8E4(void *a0) { - D_80183364[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_8018336C[])(void); - -void func_8016F9C4(void *a0) { - D_8018336C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80183374[])(void); - -void func_8016FA84(void *a0) { - D_80183374[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80183380[])(void); - -void func_8016FB7C(void *a0) { - D_80183380[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_8018338C[])(void); - -void func_8016FC90(void *a0) { - D_8018338C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80183398[])(void); - -void func_8016FDB4(void *a0) { - D_80183398[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_801833A8[])(void); - -void func_8016FF30(void *a0) { - D_801833A8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_801833B8[])(void); - -void func_8016FFDC(void *a0) { - D_801833B8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_801833C0[])(void); - -void func_80170150(void *a0) { - D_801833C0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_801833C8[])(void); - -void func_80170240(void *a0) { - D_801833C8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_801833D0[])(void); - -void func_801702FC(void *a0) { - D_801833D0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_801833D8[])(void); - -void func_801703E0(void *a0) { - D_801833D8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_801833E0[])(void); - -void func_801704B0(void *a0) { - D_801833E0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_801833E8[])(void); - -void func_80170548(void *a0) { - D_801833E8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_801833F0[])(void); - -void func_801705F8(void *a0) { - D_801833F0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_801833F8[])(void); - -void func_801706AC(void *a0) { - D_801833F8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80183400[])(void); - -void func_80170748(void *a0) { - D_80183400[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80183408[])(void); - -void func_80170810(void *a0) { - D_80183408[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80183410[])(void); - -void func_80170AD8(void *a0) { - D_80183410[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80183418[])(void); - -void func_80170BD8(void *a0) { - D_80183418[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80183420[])(void); - -void func_80170C74(void *a0) { - D_80183420[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80183428[])(void); - -void func_80170D68(void *a0) { - D_80183428[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80183430[])(void); - -void func_80170E34(void *a0) { - D_80183430[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80183438[])(void); - -void func_80170EFC(void *a0) { - D_80183438[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80183440[])(void); - -void func_80170FB0(void *a0) { - D_80183440[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80183448[])(void); - -void func_80171064(void *a0) { - D_80183448[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80183450[])(void); - -void func_80171120(void *a0) { - D_80183450[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80183458[])(void); - -void func_801711C0(void *a0) { - D_80183458[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80183460[])(void); - -void func_80171260(void *a0) { - D_80183460[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80183468[])(void); - -void func_801714E4(void *a0) { - D_80183468[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8015AE2C", func_80172C50); - - -extern void (*D_801834AC[])(void); - -void func_80172CA0(void *a0) { - D_801834AC[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80183470; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80183470); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_010/ov_SC03_010_jr_8016AB6C.c b/src/ov_SC03_010/ov_SC03_010_jr_8016AB6C.c new file mode 100644 index 000000000..411e88e49 --- /dev/null +++ b/src/ov_SC03_010/ov_SC03_010_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80182430; +extern u8 D_801823A0; +extern u8 D_8018237C; +extern u8 D_80182358; +extern u8 D_8018240C; +extern u8 D_801823E8; +extern u8 D_801823C4; +extern u8 D_80182334; +extern void func_80145934(void); +extern u8 D_801824C0; +extern u8 D_8018249C; +extern u8 D_80182478; +extern u8 D_80182454; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801818B8[]; +extern unsigned char D_801818E8[]; +extern unsigned char D_80181938[]; +extern unsigned char D_80181968[]; +extern unsigned char D_80181998[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801819E8[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80181AB0[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80181B38[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80181B40; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8019ED90; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019ED94; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80181B70; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80181C18[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80181C3C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80181C2C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80181C50[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80181C5C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80181C6C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80181C84[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80181C74; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80181C98[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80181CB4[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80181CA4; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80181CC8[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80181CDC[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80181CF0; +extern void (*D_80181D18[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80181CF8; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80181D64[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80181D68[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_801821CC[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_801821DC[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_8019EDC8; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80182204[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801821E4; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_801821F4; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80182244[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018224C[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80182218; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80182258[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80182228; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_8019EDD0; +extern s32 D_8019EDDC; +extern s32 D_8019EDE0; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80182294[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80182268[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_8019EDD8; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_801824E4[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80182304[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80182588[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_801826DC[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_801824F8; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_801826E4[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80182508; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80182528; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_801826EC[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80182714[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80182720[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80182594[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_801827C4; +extern void func_8015D380(s32 a0); +extern unsigned char D_801818A8[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_801827D8[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80182814[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_8018285C; +extern u16 D_8018285E; +extern u16 D_80182860; +extern s32 D_80182864; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_8018286C; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80182578; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_801828F0[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_801829A0[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_801829D0[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80182A34; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_8019EDE8[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80182A58[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_8019EE40[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80182AA0[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80182A90; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_8019E684[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80182AA8[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80182AFC[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80182AC4; +extern s16 D_80182AF8; +extern s16 D_80182AF6; +extern s16 D_80182AF4; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80182B08[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_8019EEA0; +extern u8 D_8019EEA1; +extern u8 D_8019EEA2; +extern u8 D_8019EEA3; +extern u8 D_8019EEA4; +extern u8 D_8019EEA5; +extern u8 D_8019EEA6; +extern u8 D_8019EEA7; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80182B18[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_8019EEE0; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80182B5C[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80182BD8[]; +extern s32 D_80182BF8[]; +extern u8 D_80182C74[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80182C94[]; +extern u8 D_80182CB4[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80182D50[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80182DCC[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_8019E694; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80182DD8[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80182DE0[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80182EA8[])(void); +extern void func_80166618(void *a0); +extern void (*D_80182EB8[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80182EC8[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80182ED4[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80182E34[]; +extern u8 D_80182E48[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80182EEC[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80182EF4[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80182EFC[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80182F04[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80182F0C[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80182F14[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80182F1C[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80182FD0[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80182FD8[])(void); +extern void func_80169F00(void *a0); +extern char D_80182F88[]; +extern char D_80182F48[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80183010[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_8018301C[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80183064[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80183024[]; + extern u8 D_80183034[]; + extern u8 D_8019F1B0[]; + extern u8 D_8019F1D8[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80183024, D_8019F1B0) + 3; + func_8001CE28(obj, D_8019F1B0); + } else { + var_s3 = func_80024054(D_80183034, D_8019F1D8) + 9; + func_8001CE28(obj, D_8019F1D8); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_801830E0[])(void); + +void func_8016B4BC(void *a0) { + D_801830E0[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_8019F200; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_8019F200); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_801830D4[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_801830D4; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80183118[]; +extern unsigned short D_80183120[]; +extern unsigned short D_80183128[]; +extern unsigned char D_8019F208[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_8019F208 + param_2 * 0x40); + puVar3 = D_80183118[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80183120[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80183128[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_8019F200; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_8019F200, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80183130[])(void); + +void func_8016BBA4(void *a0) { + D_80183130[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_8019F33C; + extern u8 D_8019F33D; + extern u8 D_8019F33E; + extern M2C_UNK D_8019F340; + extern u8 D_8019F341; + extern u8 D_8019F342; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_8019F33C) = 0x20; + D_8019F33D = 0x20; + D_8019F33E = 0; + (*(u8 *)&D_8019F340) = 0xc0; + D_8019F341 = 0xc0; + D_8019F342 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_8019F33C; +extern M2C_UNK D_8019F340; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_8019F33C, &D_8019F340, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_8019F33D; + extern u8 D_8019F33E; + extern u8 D_8019F341; + extern u8 D_8019F342; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_8019F33C); + if (*p1 != 0) *p1 -= 4; + if (D_8019F33D != 0) D_8019F33D -= 4; + if (D_8019F33E != 0) D_8019F33E -= 4; + p2 = &(*(u8 *)&D_8019F340); + if (*p2 != 0) *p2 -= 4; + if (D_8019F341 != 0) D_8019F341 -= 4; + if (D_8019F342 != 0) D_8019F342 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_8019F33C), &(*(int *)&D_8019F340), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_8019F2C8; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_8019F2C8); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80183140; + extern s32 D_80183148; + extern s32 D_80183150; + extern s32 D_80183158; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80183140, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80183148, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80183150, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80183158, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80183160[])(void); + +void func_8016C14C(void *a0) { + D_80183160[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_8019F344[]; +extern u8 D_8019F34C[]; +extern u8 D_8019F2FC[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_8019F344, D_8019F34C, D_8019F2FC); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_8019F358[]; + extern u8 D_8019F418; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_8019F358[1] = 0xff; + D_8019F358[2] = 0x10; + D_8019F358[0] = 0x10; + D_8019F358[6] = 0; + D_8019F358[5] = 0; + D_8019F358[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_8019F358, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_8019F418, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_8019F358); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8016AB6C", func_8016C998); + + +extern void (*D_80183168[])(void); + +void func_8016CB84(void *a0) { + D_80183168[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_8019F418[]; + + + Blk_8016CF04_8016CF04 *p = &D_8019F418[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80183184[])(void); + +void func_8016D19C(void *a0) { + D_80183184[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_8018318C[])(void); + +void func_8016D428(void *a0) { + D_8018318C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_801831F4[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_801831F4[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80183198; +extern u8 D_801831A4; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80183198, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801831A4); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80183228[])(void); + +void func_8016DEA4(void *a0) { + D_80183228[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80183230[])(void); + +void func_8016DF20(void *a0) { + D_80183230[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80183284[])(void); + +void func_8016E5B8(void *a0) { + D_80183284[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80183244[4]; + extern s32 D_80183264; + extern s32 D_8018326C; + extern s32 D_80183274; + extern s32 D_8018327C; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80183244[0], pp, &tmp); + RotTransSV(&D_80183244[1], &prim.v[1], &tmp); + RotTransSV(&D_80183244[2], &prim.v[2], &tmp); + RotTransSV(&D_80183244[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80183264; + prim.f1 = D_8018326C; + prim.f2 = D_80183274; + prim.f3 = D_8018327C; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_801832C4[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_801832C4[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_801832B8[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_801832B8[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_801832A8[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_801832A8[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801832B8[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_801832B8[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_801832B8[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_801832D4; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_801832D4; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_8018334C[])(void); + +void func_8016F6E0(void *a0) { + D_8018334C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80183354[])(void); + +void func_8016F798(void *a0) { + D_80183354[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_8018335C[])(void); + +void func_8016F834(void *a0) { + D_8018335C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80183364[])(void); + +void func_8016F8E4(void *a0) { + D_80183364[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_8018336C[])(void); + +void func_8016F9C4(void *a0) { + D_8018336C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80183374[])(void); + +void func_8016FA84(void *a0) { + D_80183374[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80183380[])(void); + +void func_8016FB7C(void *a0) { + D_80183380[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_8018338C[])(void); + +void func_8016FC90(void *a0) { + D_8018338C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80183398[])(void); + +void func_8016FDB4(void *a0) { + D_80183398[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_801833A8[])(void); + +void func_8016FF30(void *a0) { + D_801833A8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_801833B8[])(void); + +void func_8016FFDC(void *a0) { + D_801833B8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_801833C0[])(void); + +void func_80170150(void *a0) { + D_801833C0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_801833C8[])(void); + +void func_80170240(void *a0) { + D_801833C8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_801833D0[])(void); + +void func_801702FC(void *a0) { + D_801833D0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_801833D8[])(void); + +void func_801703E0(void *a0) { + D_801833D8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_801833E0[])(void); + +void func_801704B0(void *a0) { + D_801833E0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_801833E8[])(void); + +void func_80170548(void *a0) { + D_801833E8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_801833F0[])(void); + +void func_801705F8(void *a0) { + D_801833F0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_801833F8[])(void); + +void func_801706AC(void *a0) { + D_801833F8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80183400[])(void); + +void func_80170748(void *a0) { + D_80183400[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80183408[])(void); + +void func_80170810(void *a0) { + D_80183408[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80183410[])(void); + +void func_80170AD8(void *a0) { + D_80183410[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80183418[])(void); + +void func_80170BD8(void *a0) { + D_80183418[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80183420[])(void); + +void func_80170C74(void *a0) { + D_80183420[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80183428[])(void); + +void func_80170D68(void *a0) { + D_80183428[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80183430[])(void); + +void func_80170E34(void *a0) { + D_80183430[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80183438[])(void); + +void func_80170EFC(void *a0) { + D_80183438[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80183440[])(void); + +void func_80170FB0(void *a0) { + D_80183440[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80183448[])(void); + +void func_80171064(void *a0) { + D_80183448[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80183450[])(void); + +void func_80171120(void *a0) { + D_80183450[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80183458[])(void); + +void func_801711C0(void *a0) { + D_80183458[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80183460[])(void); + +void func_80171260(void *a0) { + D_80183460[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80183468[])(void); + +void func_801714E4(void *a0) { + D_80183468[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8016AB6C", func_80172C50); + + +extern void (*D_801834AC[])(void); + +void func_80172CA0(void *a0) { + D_801834AC[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80183470; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80183470); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_011/ov_SC03_011_jr_8015AE2C.c b/src/ov_SC03_011/ov_SC03_011_jr_8015AE2C.c index f1e2725b2..c28969130 100644 --- a/src/ov_SC03_011/ov_SC03_011_jr_8015AE2C.c +++ b/src/ov_SC03_011/ov_SC03_011_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_801843D4[])(void); void func_8016AB30(void *a0) { D_801843D4[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80184450[])(void); - -void func_8016B4BC(void *a0) { - D_80184450[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801A1498; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801A1498); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80184444[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80184444; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80184488[]; -extern unsigned short D_80184490[]; -extern unsigned short D_80184498[]; -extern unsigned char D_801A14A0[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801A14A0 + param_2 * 0x40); - puVar3 = D_80184488[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80184490[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80184498[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801A1498; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801A1498, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_801844A0[])(void); - -void func_8016BBA4(void *a0) { - D_801844A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801A15D4; - extern u8 D_801A15D5; - extern u8 D_801A15D6; - extern M2C_UNK D_801A15D8; - extern u8 D_801A15D9; - extern u8 D_801A15DA; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801A15D4) = 0x20; - D_801A15D5 = 0x20; - D_801A15D6 = 0; - (*(u8 *)&D_801A15D8) = 0xc0; - D_801A15D9 = 0xc0; - D_801A15DA = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801A15D4; -extern M2C_UNK D_801A15D8; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801A15D4, &D_801A15D8, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801A15D5; - extern u8 D_801A15D6; - extern u8 D_801A15D9; - extern u8 D_801A15DA; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801A15D4); - if (*p1 != 0) *p1 -= 4; - if (D_801A15D5 != 0) D_801A15D5 -= 4; - if (D_801A15D6 != 0) D_801A15D6 -= 4; - p2 = &(*(u8 *)&D_801A15D8); - if (*p2 != 0) *p2 -= 4; - if (D_801A15D9 != 0) D_801A15D9 -= 4; - if (D_801A15DA != 0) D_801A15DA -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801A15D4), &(*(int *)&D_801A15D8), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801A1560; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801A1560); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_801844B0; - extern s32 D_801844B8; - extern s32 D_801844C0; - extern s32 D_801844C8; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_801844B0, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_801844B8, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_801844C0, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_801844C8, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_801844D0[])(void); - -void func_8016C14C(void *a0) { - D_801844D0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801A15DC[]; -extern u8 D_801A15E4[]; -extern u8 D_801A1594[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801A15DC, D_801A15E4, D_801A1594); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801A15F0[]; - extern u8 D_801A16B0; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801A15F0[1] = 0xff; - D_801A15F0[2] = 0x10; - D_801A15F0[0] = 0x10; - D_801A15F0[6] = 0; - D_801A15F0[5] = 0; - D_801A15F0[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801A15F0, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801A16B0, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801A15F0); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8015AE2C", func_8016C998); - - -extern void (*D_801844D8[])(void); - -void func_8016CB84(void *a0) { - D_801844D8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801A16B0[]; - - - Blk_8016CF04_8016CF04 *p = &D_801A16B0[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_801844F4[])(void); - -void func_8016D19C(void *a0) { - D_801844F4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_801844FC[])(void); - -void func_8016D428(void *a0) { - D_801844FC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80184564[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80184564[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80184508; -extern u8 D_80184514; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80184508, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80184514); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80184598[])(void); - -void func_8016DEA4(void *a0) { - D_80184598[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_801845A0[])(void); - -void func_8016DF20(void *a0) { - D_801845A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_801845F4[])(void); - -void func_8016E5B8(void *a0) { - D_801845F4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_801845B4[4]; - extern s32 D_801845D4; - extern s32 D_801845DC; - extern s32 D_801845E4; - extern s32 D_801845EC; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_801845B4[0], pp, &tmp); - RotTransSV(&D_801845B4[1], &prim.v[1], &tmp); - RotTransSV(&D_801845B4[2], &prim.v[2], &tmp); - RotTransSV(&D_801845B4[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_801845D4; - prim.f1 = D_801845DC; - prim.f2 = D_801845E4; - prim.f3 = D_801845EC; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80184634[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80184634[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80184628[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80184628[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80184618[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80184618[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80184628[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80184628[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80184628[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80184644; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80184644; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_801846BC[])(void); - -void func_8016F6E0(void *a0) { - D_801846BC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_801846C4[])(void); - -void func_8016F798(void *a0) { - D_801846C4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_801846CC[])(void); - -void func_8016F834(void *a0) { - D_801846CC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_801846D4[])(void); - -void func_8016F8E4(void *a0) { - D_801846D4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_801846DC[])(void); - -void func_8016F9C4(void *a0) { - D_801846DC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_801846E4[])(void); - -void func_8016FA84(void *a0) { - D_801846E4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_801846F0[])(void); - -void func_8016FB7C(void *a0) { - D_801846F0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_801846FC[])(void); - -void func_8016FC90(void *a0) { - D_801846FC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80184708[])(void); - -void func_8016FDB4(void *a0) { - D_80184708[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80184718[])(void); - -void func_8016FF30(void *a0) { - D_80184718[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80184728[])(void); - -void func_8016FFDC(void *a0) { - D_80184728[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80184730[])(void); - -void func_80170150(void *a0) { - D_80184730[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80184738[])(void); - -void func_80170240(void *a0) { - D_80184738[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80184740[])(void); - -void func_801702FC(void *a0) { - D_80184740[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80184748[])(void); - -void func_801703E0(void *a0) { - D_80184748[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80184750[])(void); - -void func_801704B0(void *a0) { - D_80184750[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80184758[])(void); - -void func_80170548(void *a0) { - D_80184758[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80184760[])(void); - -void func_801705F8(void *a0) { - D_80184760[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80184768[])(void); - -void func_801706AC(void *a0) { - D_80184768[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80184770[])(void); - -void func_80170748(void *a0) { - D_80184770[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80184778[])(void); - -void func_80170810(void *a0) { - D_80184778[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80184780[])(void); - -void func_80170AD8(void *a0) { - D_80184780[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80184788[])(void); - -void func_80170BD8(void *a0) { - D_80184788[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80184790[])(void); - -void func_80170C74(void *a0) { - D_80184790[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80184798[])(void); - -void func_80170D68(void *a0) { - D_80184798[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_801847A0[])(void); - -void func_80170E34(void *a0) { - D_801847A0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_801847A8[])(void); - -void func_80170EFC(void *a0) { - D_801847A8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_801847B0[])(void); - -void func_80170FB0(void *a0) { - D_801847B0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_801847B8[])(void); - -void func_80171064(void *a0) { - D_801847B8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_801847C0[])(void); - -void func_80171120(void *a0) { - D_801847C0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_801847C8[])(void); - -void func_801711C0(void *a0) { - D_801847C8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_801847D0[])(void); - -void func_80171260(void *a0) { - D_801847D0[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_801847D8[])(void); - -void func_801714E4(void *a0) { - D_801847D8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8015AE2C", func_80172C50); - - -extern void (*D_8018481C[])(void); - -void func_80172CA0(void *a0) { - D_8018481C[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_801847E0; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_801847E0); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_011/ov_SC03_011_jr_8016AB6C.c b/src/ov_SC03_011/ov_SC03_011_jr_8016AB6C.c new file mode 100644 index 000000000..fecaa22fb --- /dev/null +++ b/src/ov_SC03_011/ov_SC03_011_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801837A0; +extern u8 D_80183710; +extern u8 D_801836EC; +extern u8 D_801836C8; +extern u8 D_8018377C; +extern u8 D_80183758; +extern u8 D_80183734; +extern u8 D_801836A4; +extern void func_80145934(void); +extern u8 D_80183830; +extern u8 D_8018380C; +extern u8 D_801837E8; +extern u8 D_801837C4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80182C28[]; +extern unsigned char D_80182C58[]; +extern unsigned char D_80182CA8[]; +extern unsigned char D_80182CD8[]; +extern unsigned char D_80182D08[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80182D58[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80182E20[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80182EA8[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80182EB0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801A1028; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801A102C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80182EE0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80182F88[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80182FAC[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80182F9C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80182FC0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80182FCC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80182FDC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80182FF4[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80182FE4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80183008[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80183024[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80183014; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80183038[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018304C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80183060; +extern void (*D_80183088[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80183068; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801830D4[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801830D8[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018353C[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018354C[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801A1060; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80183574[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80183554; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80183564; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801835B4[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801835BC[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80183588; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801835C8[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80183598; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801A1068; +extern s32 D_801A1074; +extern s32 D_801A1078; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80183604[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801835D8[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801A1070; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80183854[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80183674[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_801838F8[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80183A4C[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80183868; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80183A54[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80183878; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80183898; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80183A5C[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80183A84[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80183A90[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80183904[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80183B34; +extern void func_8015D380(s32 a0); +extern unsigned char D_80182C18[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80183B48[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80183B84[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80183BCC; +extern u16 D_80183BCE; +extern u16 D_80183BD0; +extern s32 D_80183BD4; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80183BDC; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_801838E8; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80183C60[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80183D10[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80183D40[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80183DA4; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801A1080[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80183DC8[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801A10D8[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80183E10[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80183E00; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801A08F4[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80183E18[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80183E6C[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80183E34; +extern s16 D_80183E68; +extern s16 D_80183E66; +extern s16 D_80183E64; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80183E78[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801A1138; +extern u8 D_801A1139; +extern u8 D_801A113A; +extern u8 D_801A113B; +extern u8 D_801A113C; +extern u8 D_801A113D; +extern u8 D_801A113E; +extern u8 D_801A113F; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80183E88[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801A1178; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80183ECC[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80183F48[]; +extern s32 D_80183F68[]; +extern u8 D_80183FE4[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80184004[]; +extern u8 D_80184024[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_801840C0[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_8018413C[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801A0904; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80184148[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80184150[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80184218[])(void); +extern void func_80166618(void *a0); +extern void (*D_80184228[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80184238[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80184244[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_801841A4[]; +extern u8 D_801841B8[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_8018425C[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80184264[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_8018426C[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80184274[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_8018427C[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80184284[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_8018428C[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80184340[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80184348[])(void); +extern void func_80169F00(void *a0); +extern char D_801842F8[]; +extern char D_801842B8[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80184380[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_8018438C[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_801843D4[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80184394[]; + extern u8 D_801843A4[]; + extern u8 D_801A1448[]; + extern u8 D_801A1470[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80184394, D_801A1448) + 3; + func_8001CE28(obj, D_801A1448); + } else { + var_s3 = func_80024054(D_801843A4, D_801A1470) + 9; + func_8001CE28(obj, D_801A1470); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80184450[])(void); + +void func_8016B4BC(void *a0) { + D_80184450[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801A1498; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801A1498); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80184444[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80184444; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80184488[]; +extern unsigned short D_80184490[]; +extern unsigned short D_80184498[]; +extern unsigned char D_801A14A0[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801A14A0 + param_2 * 0x40); + puVar3 = D_80184488[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80184490[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80184498[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801A1498; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801A1498, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_801844A0[])(void); + +void func_8016BBA4(void *a0) { + D_801844A0[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801A15D4; + extern u8 D_801A15D5; + extern u8 D_801A15D6; + extern M2C_UNK D_801A15D8; + extern u8 D_801A15D9; + extern u8 D_801A15DA; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801A15D4) = 0x20; + D_801A15D5 = 0x20; + D_801A15D6 = 0; + (*(u8 *)&D_801A15D8) = 0xc0; + D_801A15D9 = 0xc0; + D_801A15DA = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801A15D4; +extern M2C_UNK D_801A15D8; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801A15D4, &D_801A15D8, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801A15D5; + extern u8 D_801A15D6; + extern u8 D_801A15D9; + extern u8 D_801A15DA; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801A15D4); + if (*p1 != 0) *p1 -= 4; + if (D_801A15D5 != 0) D_801A15D5 -= 4; + if (D_801A15D6 != 0) D_801A15D6 -= 4; + p2 = &(*(u8 *)&D_801A15D8); + if (*p2 != 0) *p2 -= 4; + if (D_801A15D9 != 0) D_801A15D9 -= 4; + if (D_801A15DA != 0) D_801A15DA -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801A15D4), &(*(int *)&D_801A15D8), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801A1560; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801A1560); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_801844B0; + extern s32 D_801844B8; + extern s32 D_801844C0; + extern s32 D_801844C8; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_801844B0, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_801844B8, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_801844C0, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_801844C8, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_801844D0[])(void); + +void func_8016C14C(void *a0) { + D_801844D0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801A15DC[]; +extern u8 D_801A15E4[]; +extern u8 D_801A1594[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801A15DC, D_801A15E4, D_801A1594); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801A15F0[]; + extern u8 D_801A16B0; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801A15F0[1] = 0xff; + D_801A15F0[2] = 0x10; + D_801A15F0[0] = 0x10; + D_801A15F0[6] = 0; + D_801A15F0[5] = 0; + D_801A15F0[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801A15F0, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801A16B0, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801A15F0); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8016AB6C", func_8016C998); + + +extern void (*D_801844D8[])(void); + +void func_8016CB84(void *a0) { + D_801844D8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801A16B0[]; + + + Blk_8016CF04_8016CF04 *p = &D_801A16B0[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_801844F4[])(void); + +void func_8016D19C(void *a0) { + D_801844F4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_801844FC[])(void); + +void func_8016D428(void *a0) { + D_801844FC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80184564[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80184564[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80184508; +extern u8 D_80184514; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80184508, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80184514); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80184598[])(void); + +void func_8016DEA4(void *a0) { + D_80184598[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_801845A0[])(void); + +void func_8016DF20(void *a0) { + D_801845A0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_801845F4[])(void); + +void func_8016E5B8(void *a0) { + D_801845F4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_801845B4[4]; + extern s32 D_801845D4; + extern s32 D_801845DC; + extern s32 D_801845E4; + extern s32 D_801845EC; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_801845B4[0], pp, &tmp); + RotTransSV(&D_801845B4[1], &prim.v[1], &tmp); + RotTransSV(&D_801845B4[2], &prim.v[2], &tmp); + RotTransSV(&D_801845B4[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_801845D4; + prim.f1 = D_801845DC; + prim.f2 = D_801845E4; + prim.f3 = D_801845EC; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80184634[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80184634[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80184628[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80184628[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80184618[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80184618[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80184628[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80184628[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80184628[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80184644; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80184644; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_801846BC[])(void); + +void func_8016F6E0(void *a0) { + D_801846BC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_801846C4[])(void); + +void func_8016F798(void *a0) { + D_801846C4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_801846CC[])(void); + +void func_8016F834(void *a0) { + D_801846CC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_801846D4[])(void); + +void func_8016F8E4(void *a0) { + D_801846D4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_801846DC[])(void); + +void func_8016F9C4(void *a0) { + D_801846DC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_801846E4[])(void); + +void func_8016FA84(void *a0) { + D_801846E4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_801846F0[])(void); + +void func_8016FB7C(void *a0) { + D_801846F0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_801846FC[])(void); + +void func_8016FC90(void *a0) { + D_801846FC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80184708[])(void); + +void func_8016FDB4(void *a0) { + D_80184708[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80184718[])(void); + +void func_8016FF30(void *a0) { + D_80184718[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80184728[])(void); + +void func_8016FFDC(void *a0) { + D_80184728[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80184730[])(void); + +void func_80170150(void *a0) { + D_80184730[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80184738[])(void); + +void func_80170240(void *a0) { + D_80184738[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80184740[])(void); + +void func_801702FC(void *a0) { + D_80184740[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80184748[])(void); + +void func_801703E0(void *a0) { + D_80184748[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80184750[])(void); + +void func_801704B0(void *a0) { + D_80184750[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80184758[])(void); + +void func_80170548(void *a0) { + D_80184758[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80184760[])(void); + +void func_801705F8(void *a0) { + D_80184760[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80184768[])(void); + +void func_801706AC(void *a0) { + D_80184768[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80184770[])(void); + +void func_80170748(void *a0) { + D_80184770[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80184778[])(void); + +void func_80170810(void *a0) { + D_80184778[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80184780[])(void); + +void func_80170AD8(void *a0) { + D_80184780[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80184788[])(void); + +void func_80170BD8(void *a0) { + D_80184788[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80184790[])(void); + +void func_80170C74(void *a0) { + D_80184790[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80184798[])(void); + +void func_80170D68(void *a0) { + D_80184798[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_801847A0[])(void); + +void func_80170E34(void *a0) { + D_801847A0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_801847A8[])(void); + +void func_80170EFC(void *a0) { + D_801847A8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_801847B0[])(void); + +void func_80170FB0(void *a0) { + D_801847B0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_801847B8[])(void); + +void func_80171064(void *a0) { + D_801847B8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_801847C0[])(void); + +void func_80171120(void *a0) { + D_801847C0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_801847C8[])(void); + +void func_801711C0(void *a0) { + D_801847C8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_801847D0[])(void); + +void func_80171260(void *a0) { + D_801847D0[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_801847D8[])(void); + +void func_801714E4(void *a0) { + D_801847D8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8016AB6C", func_80172C50); + + +extern void (*D_8018481C[])(void); + +void func_80172CA0(void *a0) { + D_8018481C[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_801847E0; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_801847E0); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_012/ov_SC03_012_jr_8015AE2C.c b/src/ov_SC03_012/ov_SC03_012_jr_8015AE2C.c index 78d085795..2a27e0e1e 100644 --- a/src/ov_SC03_012/ov_SC03_012_jr_8015AE2C.c +++ b/src/ov_SC03_012/ov_SC03_012_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_801812B4[])(void); void func_8016AB30(void *a0) { D_801812B4[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80181330[])(void); - -void func_8016B4BC(void *a0) { - D_80181330[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801942B8; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801942B8); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80181324[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80181324; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80181368[]; -extern unsigned short D_80181370[]; -extern unsigned short D_80181378[]; -extern unsigned char D_801942C0[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801942C0 + param_2 * 0x40); - puVar3 = D_80181368[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80181370[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80181378[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801942B8; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801942B8, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80181380[])(void); - -void func_8016BBA4(void *a0) { - D_80181380[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801943F4; - extern u8 D_801943F5; - extern u8 D_801943F6; - extern M2C_UNK D_801943F8; - extern u8 D_801943F9; - extern u8 D_801943FA; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801943F4) = 0x20; - D_801943F5 = 0x20; - D_801943F6 = 0; - (*(u8 *)&D_801943F8) = 0xc0; - D_801943F9 = 0xc0; - D_801943FA = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801943F4; -extern M2C_UNK D_801943F8; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801943F4, &D_801943F8, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801943F5; - extern u8 D_801943F6; - extern u8 D_801943F9; - extern u8 D_801943FA; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801943F4); - if (*p1 != 0) *p1 -= 4; - if (D_801943F5 != 0) D_801943F5 -= 4; - if (D_801943F6 != 0) D_801943F6 -= 4; - p2 = &(*(u8 *)&D_801943F8); - if (*p2 != 0) *p2 -= 4; - if (D_801943F9 != 0) D_801943F9 -= 4; - if (D_801943FA != 0) D_801943FA -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801943F4), &(*(int *)&D_801943F8), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_80194380; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_80194380); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80181390; - extern s32 D_80181398; - extern s32 D_801813A0; - extern s32 D_801813A8; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80181390, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80181398, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_801813A0, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_801813A8, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_801813B0[])(void); - -void func_8016C14C(void *a0) { - D_801813B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801943FC[]; -extern u8 D_80194404[]; -extern u8 D_801943B4[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801943FC, D_80194404, D_801943B4); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_80194410[]; - extern u8 D_801944D0; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_80194410[1] = 0xff; - D_80194410[2] = 0x10; - D_80194410[0] = 0x10; - D_80194410[6] = 0; - D_80194410[5] = 0; - D_80194410[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_80194410, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801944D0, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_80194410); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8015AE2C", func_8016C998); - - -extern void (*D_801813B8[])(void); - -void func_8016CB84(void *a0) { - D_801813B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801944D0[]; - - - Blk_8016CF04_8016CF04 *p = &D_801944D0[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_801813D4[])(void); - -void func_8016D19C(void *a0) { - D_801813D4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_801813DC[])(void); - -void func_8016D428(void *a0) { - D_801813DC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80181444[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80181444[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_801813E8; -extern u8 D_801813F4; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801813E8, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801813F4); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80181478[])(void); - -void func_8016DEA4(void *a0) { - D_80181478[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80181480[])(void); - -void func_8016DF20(void *a0) { - D_80181480[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_801814D4[])(void); - -void func_8016E5B8(void *a0) { - D_801814D4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80181494[4]; - extern s32 D_801814B4; - extern s32 D_801814BC; - extern s32 D_801814C4; - extern s32 D_801814CC; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80181494[0], pp, &tmp); - RotTransSV(&D_80181494[1], &prim.v[1], &tmp); - RotTransSV(&D_80181494[2], &prim.v[2], &tmp); - RotTransSV(&D_80181494[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_801814B4; - prim.f1 = D_801814BC; - prim.f2 = D_801814C4; - prim.f3 = D_801814CC; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80181514[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80181514[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80181508[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80181508[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_801814F8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_801814F8[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80181508[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80181508[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80181508[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80181524; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80181524; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_8018159C[])(void); - -void func_8016F6E0(void *a0) { - D_8018159C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_801815A4[])(void); - -void func_8016F798(void *a0) { - D_801815A4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_801815AC[])(void); - -void func_8016F834(void *a0) { - D_801815AC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_801815B4[])(void); - -void func_8016F8E4(void *a0) { - D_801815B4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_801815BC[])(void); - -void func_8016F9C4(void *a0) { - D_801815BC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_801815C4[])(void); - -void func_8016FA84(void *a0) { - D_801815C4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_801815D0[])(void); - -void func_8016FB7C(void *a0) { - D_801815D0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_801815DC[])(void); - -void func_8016FC90(void *a0) { - D_801815DC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_801815E8[])(void); - -void func_8016FDB4(void *a0) { - D_801815E8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_801815F8[])(void); - -void func_8016FF30(void *a0) { - D_801815F8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80181608[])(void); - -void func_8016FFDC(void *a0) { - D_80181608[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80181610[])(void); - -void func_80170150(void *a0) { - D_80181610[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80181618[])(void); - -void func_80170240(void *a0) { - D_80181618[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80181620[])(void); - -void func_801702FC(void *a0) { - D_80181620[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80181628[])(void); - -void func_801703E0(void *a0) { - D_80181628[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80181630[])(void); - -void func_801704B0(void *a0) { - D_80181630[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80181638[])(void); - -void func_80170548(void *a0) { - D_80181638[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80181640[])(void); - -void func_801705F8(void *a0) { - D_80181640[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80181648[])(void); - -void func_801706AC(void *a0) { - D_80181648[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80181650[])(void); - -void func_80170748(void *a0) { - D_80181650[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80181658[])(void); - -void func_80170810(void *a0) { - D_80181658[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80181660[])(void); - -void func_80170AD8(void *a0) { - D_80181660[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80181668[])(void); - -void func_80170BD8(void *a0) { - D_80181668[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80181670[])(void); - -void func_80170C74(void *a0) { - D_80181670[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80181678[])(void); - -void func_80170D68(void *a0) { - D_80181678[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80181680[])(void); - -void func_80170E34(void *a0) { - D_80181680[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80181688[])(void); - -void func_80170EFC(void *a0) { - D_80181688[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80181690[])(void); - -void func_80170FB0(void *a0) { - D_80181690[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80181698[])(void); - -void func_80171064(void *a0) { - D_80181698[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_801816A0[])(void); - -void func_80171120(void *a0) { - D_801816A0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_801816A8[])(void); - -void func_801711C0(void *a0) { - D_801816A8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_801816B0[])(void); - -void func_80171260(void *a0) { - D_801816B0[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_801816B8[])(void); - -void func_801714E4(void *a0) { - D_801816B8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8015AE2C", func_80172C50); - - -extern void (*D_801816FC[])(void); - -void func_80172CA0(void *a0) { - D_801816FC[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_801816C0; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_801816C0); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_012/ov_SC03_012_jr_8016AB6C.c b/src/ov_SC03_012/ov_SC03_012_jr_8016AB6C.c new file mode 100644 index 000000000..da2621444 --- /dev/null +++ b/src/ov_SC03_012/ov_SC03_012_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80180680; +extern u8 D_801805F0; +extern u8 D_801805CC; +extern u8 D_801805A8; +extern u8 D_8018065C; +extern u8 D_80180638; +extern u8 D_80180614; +extern u8 D_80180584; +extern void func_80145934(void); +extern u8 D_80180710; +extern u8 D_801806EC; +extern u8 D_801806C8; +extern u8 D_801806A4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8017FB08[]; +extern unsigned char D_8017FB38[]; +extern unsigned char D_8017FB88[]; +extern unsigned char D_8017FBB8[]; +extern unsigned char D_8017FBE8[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8017FC38[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8017FD00[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8017FD88[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8017FD90; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_80193E48; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_80193E4C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8017FDC0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8017FE68[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8017FE8C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8017FE7C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8017FEA0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8017FEAC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8017FEBC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8017FED4[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8017FEC4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8017FEE8[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8017FF04[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8017FEF4; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8017FF18[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8017FF2C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8017FF40; +extern void (*D_8017FF68[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8017FF48; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8017FFB4[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8017FFB8[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018041C[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018042C[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_80193E80; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80180454[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80180434; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80180444; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80180494[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018049C[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80180468; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801804A8[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80180478; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_80193E88; +extern s32 D_80193E94; +extern s32 D_80193E98; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801804E4[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801804B8[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_80193E90; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80180734[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80180554[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_801807D8[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018092C[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80180748; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80180934[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80180758; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80180778; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_8018093C[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80180964[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80180970[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_801807E4[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80180A14; +extern void func_8015D380(s32 a0); +extern unsigned char D_8017FAF8[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80180A28[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80180A64[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80180AAC; +extern u16 D_80180AAE; +extern u16 D_80180AB0; +extern s32 D_80180AB4; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80180ABC; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_801807C8; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80180B40[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80180BF0[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80180C20[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80180C84; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_80193EA0[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80180CA8[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_80193EF8[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80180CF0[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80180CE0; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_80193750[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80180CF8[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80180D4C[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80180D14; +extern s16 D_80180D48; +extern s16 D_80180D46; +extern s16 D_80180D44; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80180D58[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_80193F58; +extern u8 D_80193F59; +extern u8 D_80193F5A; +extern u8 D_80193F5B; +extern u8 D_80193F5C; +extern u8 D_80193F5D; +extern u8 D_80193F5E; +extern u8 D_80193F5F; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80180D68[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_80193F98; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80180DAC[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80180E28[]; +extern s32 D_80180E48[]; +extern u8 D_80180EC4[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80180EE4[]; +extern u8 D_80180F04[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80180FA0[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_8018101C[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_80193760; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80181028[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80181030[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_801810F8[])(void); +extern void func_80166618(void *a0); +extern void (*D_80181108[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80181118[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80181124[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80181084[]; +extern u8 D_80181098[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_8018113C[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80181144[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_8018114C[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80181154[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_8018115C[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80181164[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_8018116C[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80181220[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80181228[])(void); +extern void func_80169F00(void *a0); +extern char D_801811D8[]; +extern char D_80181198[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80181260[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_8018126C[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_801812B4[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80181274[]; + extern u8 D_80181284[]; + extern u8 D_80194268[]; + extern u8 D_80194290[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80181274, D_80194268) + 3; + func_8001CE28(obj, D_80194268); + } else { + var_s3 = func_80024054(D_80181284, D_80194290) + 9; + func_8001CE28(obj, D_80194290); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80181330[])(void); + +void func_8016B4BC(void *a0) { + D_80181330[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801942B8; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801942B8); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80181324[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80181324; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80181368[]; +extern unsigned short D_80181370[]; +extern unsigned short D_80181378[]; +extern unsigned char D_801942C0[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801942C0 + param_2 * 0x40); + puVar3 = D_80181368[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80181370[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80181378[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801942B8; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801942B8, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80181380[])(void); + +void func_8016BBA4(void *a0) { + D_80181380[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801943F4; + extern u8 D_801943F5; + extern u8 D_801943F6; + extern M2C_UNK D_801943F8; + extern u8 D_801943F9; + extern u8 D_801943FA; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801943F4) = 0x20; + D_801943F5 = 0x20; + D_801943F6 = 0; + (*(u8 *)&D_801943F8) = 0xc0; + D_801943F9 = 0xc0; + D_801943FA = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801943F4; +extern M2C_UNK D_801943F8; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801943F4, &D_801943F8, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801943F5; + extern u8 D_801943F6; + extern u8 D_801943F9; + extern u8 D_801943FA; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801943F4); + if (*p1 != 0) *p1 -= 4; + if (D_801943F5 != 0) D_801943F5 -= 4; + if (D_801943F6 != 0) D_801943F6 -= 4; + p2 = &(*(u8 *)&D_801943F8); + if (*p2 != 0) *p2 -= 4; + if (D_801943F9 != 0) D_801943F9 -= 4; + if (D_801943FA != 0) D_801943FA -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801943F4), &(*(int *)&D_801943F8), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_80194380; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_80194380); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80181390; + extern s32 D_80181398; + extern s32 D_801813A0; + extern s32 D_801813A8; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80181390, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80181398, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_801813A0, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_801813A8, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_801813B0[])(void); + +void func_8016C14C(void *a0) { + D_801813B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801943FC[]; +extern u8 D_80194404[]; +extern u8 D_801943B4[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801943FC, D_80194404, D_801943B4); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_80194410[]; + extern u8 D_801944D0; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_80194410[1] = 0xff; + D_80194410[2] = 0x10; + D_80194410[0] = 0x10; + D_80194410[6] = 0; + D_80194410[5] = 0; + D_80194410[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_80194410, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801944D0, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_80194410); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8016AB6C", func_8016C998); + + +extern void (*D_801813B8[])(void); + +void func_8016CB84(void *a0) { + D_801813B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801944D0[]; + + + Blk_8016CF04_8016CF04 *p = &D_801944D0[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_801813D4[])(void); + +void func_8016D19C(void *a0) { + D_801813D4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_801813DC[])(void); + +void func_8016D428(void *a0) { + D_801813DC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80181444[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80181444[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_801813E8; +extern u8 D_801813F4; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801813E8, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801813F4); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80181478[])(void); + +void func_8016DEA4(void *a0) { + D_80181478[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80181480[])(void); + +void func_8016DF20(void *a0) { + D_80181480[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_801814D4[])(void); + +void func_8016E5B8(void *a0) { + D_801814D4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80181494[4]; + extern s32 D_801814B4; + extern s32 D_801814BC; + extern s32 D_801814C4; + extern s32 D_801814CC; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80181494[0], pp, &tmp); + RotTransSV(&D_80181494[1], &prim.v[1], &tmp); + RotTransSV(&D_80181494[2], &prim.v[2], &tmp); + RotTransSV(&D_80181494[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_801814B4; + prim.f1 = D_801814BC; + prim.f2 = D_801814C4; + prim.f3 = D_801814CC; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80181514[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80181514[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80181508[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80181508[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_801814F8[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_801814F8[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80181508[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80181508[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80181508[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80181524; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80181524; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_8018159C[])(void); + +void func_8016F6E0(void *a0) { + D_8018159C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_801815A4[])(void); + +void func_8016F798(void *a0) { + D_801815A4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_801815AC[])(void); + +void func_8016F834(void *a0) { + D_801815AC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_801815B4[])(void); + +void func_8016F8E4(void *a0) { + D_801815B4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_801815BC[])(void); + +void func_8016F9C4(void *a0) { + D_801815BC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_801815C4[])(void); + +void func_8016FA84(void *a0) { + D_801815C4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_801815D0[])(void); + +void func_8016FB7C(void *a0) { + D_801815D0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_801815DC[])(void); + +void func_8016FC90(void *a0) { + D_801815DC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_801815E8[])(void); + +void func_8016FDB4(void *a0) { + D_801815E8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_801815F8[])(void); + +void func_8016FF30(void *a0) { + D_801815F8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80181608[])(void); + +void func_8016FFDC(void *a0) { + D_80181608[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80181610[])(void); + +void func_80170150(void *a0) { + D_80181610[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80181618[])(void); + +void func_80170240(void *a0) { + D_80181618[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80181620[])(void); + +void func_801702FC(void *a0) { + D_80181620[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80181628[])(void); + +void func_801703E0(void *a0) { + D_80181628[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80181630[])(void); + +void func_801704B0(void *a0) { + D_80181630[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80181638[])(void); + +void func_80170548(void *a0) { + D_80181638[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80181640[])(void); + +void func_801705F8(void *a0) { + D_80181640[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80181648[])(void); + +void func_801706AC(void *a0) { + D_80181648[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80181650[])(void); + +void func_80170748(void *a0) { + D_80181650[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80181658[])(void); + +void func_80170810(void *a0) { + D_80181658[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80181660[])(void); + +void func_80170AD8(void *a0) { + D_80181660[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80181668[])(void); + +void func_80170BD8(void *a0) { + D_80181668[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80181670[])(void); + +void func_80170C74(void *a0) { + D_80181670[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80181678[])(void); + +void func_80170D68(void *a0) { + D_80181678[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80181680[])(void); + +void func_80170E34(void *a0) { + D_80181680[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80181688[])(void); + +void func_80170EFC(void *a0) { + D_80181688[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80181690[])(void); + +void func_80170FB0(void *a0) { + D_80181690[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80181698[])(void); + +void func_80171064(void *a0) { + D_80181698[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_801816A0[])(void); + +void func_80171120(void *a0) { + D_801816A0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_801816A8[])(void); + +void func_801711C0(void *a0) { + D_801816A8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_801816B0[])(void); + +void func_80171260(void *a0) { + D_801816B0[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_801816B8[])(void); + +void func_801714E4(void *a0) { + D_801816B8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8016AB6C", func_80172C50); + + +extern void (*D_801816FC[])(void); + +void func_80172CA0(void *a0) { + D_801816FC[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_801816C0; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_801816C0); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_013/ov_SC03_013_jr_8015AE2C.c b/src/ov_SC03_013/ov_SC03_013_jr_8015AE2C.c index 4bf8163db..1d75c07d9 100644 --- a/src/ov_SC03_013/ov_SC03_013_jr_8015AE2C.c +++ b/src/ov_SC03_013/ov_SC03_013_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_8018409C[])(void); void func_8016AB30(void *a0) { D_8018409C[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80184118[])(void); - -void func_8016B4BC(void *a0) { - D_80184118[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801AC588; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801AC588); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_8018410C[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_8018410C; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80184150[]; -extern unsigned short D_80184158[]; -extern unsigned short D_80184160[]; -extern unsigned char D_801AC590[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801AC590 + param_2 * 0x40); - puVar3 = D_80184150[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80184158[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80184160[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801AC588; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801AC588, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80184168[])(void); - -void func_8016BBA4(void *a0) { - D_80184168[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801AC6C4; - extern u8 D_801AC6C5; - extern u8 D_801AC6C6; - extern M2C_UNK D_801AC6C8; - extern u8 D_801AC6C9; - extern u8 D_801AC6CA; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801AC6C4) = 0x20; - D_801AC6C5 = 0x20; - D_801AC6C6 = 0; - (*(u8 *)&D_801AC6C8) = 0xc0; - D_801AC6C9 = 0xc0; - D_801AC6CA = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801AC6C4; -extern M2C_UNK D_801AC6C8; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801AC6C4, &D_801AC6C8, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801AC6C5; - extern u8 D_801AC6C6; - extern u8 D_801AC6C9; - extern u8 D_801AC6CA; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801AC6C4); - if (*p1 != 0) *p1 -= 4; - if (D_801AC6C5 != 0) D_801AC6C5 -= 4; - if (D_801AC6C6 != 0) D_801AC6C6 -= 4; - p2 = &(*(u8 *)&D_801AC6C8); - if (*p2 != 0) *p2 -= 4; - if (D_801AC6C9 != 0) D_801AC6C9 -= 4; - if (D_801AC6CA != 0) D_801AC6CA -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801AC6C4), &(*(int *)&D_801AC6C8), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801AC650; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801AC650); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80184178; - extern s32 D_80184180; - extern s32 D_80184188; - extern s32 D_80184190; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80184178, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80184180, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80184188, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80184190, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80184198[])(void); - -void func_8016C14C(void *a0) { - D_80184198[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801AC6CC[]; -extern u8 D_801AC6D4[]; -extern u8 D_801AC684[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801AC6CC, D_801AC6D4, D_801AC684); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801AC6E0[]; - extern u8 D_801AC7A0; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801AC6E0[1] = 0xff; - D_801AC6E0[2] = 0x10; - D_801AC6E0[0] = 0x10; - D_801AC6E0[6] = 0; - D_801AC6E0[5] = 0; - D_801AC6E0[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801AC6E0, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801AC7A0, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801AC6E0); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8015AE2C", func_8016C998); - - -extern void (*D_801841A0[])(void); - -void func_8016CB84(void *a0) { - D_801841A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801AC7A0[]; - - - Blk_8016CF04_8016CF04 *p = &D_801AC7A0[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_801841BC[])(void); - -void func_8016D19C(void *a0) { - D_801841BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_801841C4[])(void); - -void func_8016D428(void *a0) { - D_801841C4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_8018422C[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_8018422C[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_801841D0; -extern u8 D_801841DC; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801841D0, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801841DC); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80184260[])(void); - -void func_8016DEA4(void *a0) { - D_80184260[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80184268[])(void); - -void func_8016DF20(void *a0) { - D_80184268[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_801842BC[])(void); - -void func_8016E5B8(void *a0) { - D_801842BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_8018427C[4]; - extern s32 D_8018429C; - extern s32 D_801842A4; - extern s32 D_801842AC; - extern s32 D_801842B4; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_8018427C[0], pp, &tmp); - RotTransSV(&D_8018427C[1], &prim.v[1], &tmp); - RotTransSV(&D_8018427C[2], &prim.v[2], &tmp); - RotTransSV(&D_8018427C[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_8018429C; - prim.f1 = D_801842A4; - prim.f2 = D_801842AC; - prim.f3 = D_801842B4; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_801842FC[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_801842FC[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_801842F0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_801842F0[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_801842E0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_801842E0[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801842F0[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_801842F0[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_801842F0[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_8018430C; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_8018430C; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80184384[])(void); - -void func_8016F6E0(void *a0) { - D_80184384[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_8018438C[])(void); - -void func_8016F798(void *a0) { - D_8018438C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80184394[])(void); - -void func_8016F834(void *a0) { - D_80184394[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_8018439C[])(void); - -void func_8016F8E4(void *a0) { - D_8018439C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_801843A4[])(void); - -void func_8016F9C4(void *a0) { - D_801843A4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_801843AC[])(void); - -void func_8016FA84(void *a0) { - D_801843AC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_801843B8[])(void); - -void func_8016FB7C(void *a0) { - D_801843B8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_801843C4[])(void); - -void func_8016FC90(void *a0) { - D_801843C4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_801843D0[])(void); - -void func_8016FDB4(void *a0) { - D_801843D0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_801843E0[])(void); - -void func_8016FF30(void *a0) { - D_801843E0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_801843F0[])(void); - -void func_8016FFDC(void *a0) { - D_801843F0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_801843F8[])(void); - -void func_80170150(void *a0) { - D_801843F8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80184400[])(void); - -void func_80170240(void *a0) { - D_80184400[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80184408[])(void); - -void func_801702FC(void *a0) { - D_80184408[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80184410[])(void); - -void func_801703E0(void *a0) { - D_80184410[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80184418[])(void); - -void func_801704B0(void *a0) { - D_80184418[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80184420[])(void); - -void func_80170548(void *a0) { - D_80184420[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80184428[])(void); - -void func_801705F8(void *a0) { - D_80184428[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80184430[])(void); - -void func_801706AC(void *a0) { - D_80184430[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80184438[])(void); - -void func_80170748(void *a0) { - D_80184438[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80184440[])(void); - -void func_80170810(void *a0) { - D_80184440[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80184448[])(void); - -void func_80170AD8(void *a0) { - D_80184448[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80184450[])(void); - -void func_80170BD8(void *a0) { - D_80184450[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80184458[])(void); - -void func_80170C74(void *a0) { - D_80184458[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80184460[])(void); - -void func_80170D68(void *a0) { - D_80184460[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80184468[])(void); - -void func_80170E34(void *a0) { - D_80184468[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80184470[])(void); - -void func_80170EFC(void *a0) { - D_80184470[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80184478[])(void); - -void func_80170FB0(void *a0) { - D_80184478[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80184480[])(void); - -void func_80171064(void *a0) { - D_80184480[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80184488[])(void); - -void func_80171120(void *a0) { - D_80184488[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80184490[])(void); - -void func_801711C0(void *a0) { - D_80184490[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80184498[])(void); - -void func_80171260(void *a0) { - D_80184498[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_801844A0[])(void); - -void func_801714E4(void *a0) { - D_801844A0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8015AE2C", func_80172C50); - - -extern void (*D_801844E4[])(void); - -void func_80172CA0(void *a0) { - D_801844E4[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_801844A8; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_801844A8); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_013/ov_SC03_013_jr_8016AB6C.c b/src/ov_SC03_013/ov_SC03_013_jr_8016AB6C.c new file mode 100644 index 000000000..e5772fa39 --- /dev/null +++ b/src/ov_SC03_013/ov_SC03_013_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80183468; +extern u8 D_801833D8; +extern u8 D_801833B4; +extern u8 D_80183390; +extern u8 D_80183444; +extern u8 D_80183420; +extern u8 D_801833FC; +extern u8 D_8018336C; +extern void func_80145934(void); +extern u8 D_801834F8; +extern u8 D_801834D4; +extern u8 D_801834B0; +extern u8 D_8018348C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801828F0[]; +extern unsigned char D_80182920[]; +extern unsigned char D_80182970[]; +extern unsigned char D_801829A0[]; +extern unsigned char D_801829D0[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80182A20[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80182AE8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80182B70[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80182B78; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801AC118; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801AC11C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80182BA8; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80182C50[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80182C74[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80182C64; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80182C88[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80182C94[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80182CA4[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80182CBC[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80182CAC; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80182CD0[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80182CEC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80182CDC; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80182D00[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80182D14[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80182D28; +extern void (*D_80182D50[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80182D30; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80182D9C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80182DA0[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80183204[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80183214[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801AC150; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018323C[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018321C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018322C; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018327C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80183284[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80183250; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80183290[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80183260; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801AC158; +extern s32 D_801AC164; +extern s32 D_801AC168; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801832CC[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801832A0[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801AC160; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018351C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018333C[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_801835C0[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80183714[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80183530; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018371C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80183540; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80183560; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80183724[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_8018374C[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80183758[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_801835CC[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_801837FC; +extern void func_8015D380(s32 a0); +extern unsigned char D_801828E0[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80183810[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_8018384C[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80183894; +extern u16 D_80183896; +extern u16 D_80183898; +extern s32 D_8018389C; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_801838A4; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_801835B0; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80183928[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_801839D8[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80183A08[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80183A6C; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801AC170[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80183A90[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801AC1C8[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80183AD8[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80183AC8; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801AB9E8[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80183AE0[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80183B34[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80183AFC; +extern s16 D_80183B30; +extern s16 D_80183B2E; +extern s16 D_80183B2C; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80183B40[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801AC228; +extern u8 D_801AC229; +extern u8 D_801AC22A; +extern u8 D_801AC22B; +extern u8 D_801AC22C; +extern u8 D_801AC22D; +extern u8 D_801AC22E; +extern u8 D_801AC22F; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80183B50[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801AC268; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80183B94[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80183C10[]; +extern s32 D_80183C30[]; +extern u8 D_80183CAC[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80183CCC[]; +extern u8 D_80183CEC[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80183D88[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80183E04[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801AB9F8; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80183E10[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80183E18[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80183EE0[])(void); +extern void func_80166618(void *a0); +extern void (*D_80183EF0[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80183F00[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80183F0C[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80183E6C[]; +extern u8 D_80183E80[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80183F24[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80183F2C[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80183F34[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80183F3C[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80183F44[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80183F4C[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80183F54[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80184008[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80184010[])(void); +extern void func_80169F00(void *a0); +extern char D_80183FC0[]; +extern char D_80183F80[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80184048[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80184054[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_8018409C[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_8018405C[]; + extern u8 D_8018406C[]; + extern u8 D_801AC538[]; + extern u8 D_801AC560[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_8018405C, D_801AC538) + 3; + func_8001CE28(obj, D_801AC538); + } else { + var_s3 = func_80024054(D_8018406C, D_801AC560) + 9; + func_8001CE28(obj, D_801AC560); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80184118[])(void); + +void func_8016B4BC(void *a0) { + D_80184118[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801AC588; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801AC588); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_8018410C[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_8018410C; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80184150[]; +extern unsigned short D_80184158[]; +extern unsigned short D_80184160[]; +extern unsigned char D_801AC590[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801AC590 + param_2 * 0x40); + puVar3 = D_80184150[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80184158[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80184160[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801AC588; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801AC588, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80184168[])(void); + +void func_8016BBA4(void *a0) { + D_80184168[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801AC6C4; + extern u8 D_801AC6C5; + extern u8 D_801AC6C6; + extern M2C_UNK D_801AC6C8; + extern u8 D_801AC6C9; + extern u8 D_801AC6CA; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801AC6C4) = 0x20; + D_801AC6C5 = 0x20; + D_801AC6C6 = 0; + (*(u8 *)&D_801AC6C8) = 0xc0; + D_801AC6C9 = 0xc0; + D_801AC6CA = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801AC6C4; +extern M2C_UNK D_801AC6C8; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801AC6C4, &D_801AC6C8, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801AC6C5; + extern u8 D_801AC6C6; + extern u8 D_801AC6C9; + extern u8 D_801AC6CA; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801AC6C4); + if (*p1 != 0) *p1 -= 4; + if (D_801AC6C5 != 0) D_801AC6C5 -= 4; + if (D_801AC6C6 != 0) D_801AC6C6 -= 4; + p2 = &(*(u8 *)&D_801AC6C8); + if (*p2 != 0) *p2 -= 4; + if (D_801AC6C9 != 0) D_801AC6C9 -= 4; + if (D_801AC6CA != 0) D_801AC6CA -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801AC6C4), &(*(int *)&D_801AC6C8), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801AC650; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801AC650); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80184178; + extern s32 D_80184180; + extern s32 D_80184188; + extern s32 D_80184190; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80184178, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80184180, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80184188, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80184190, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80184198[])(void); + +void func_8016C14C(void *a0) { + D_80184198[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801AC6CC[]; +extern u8 D_801AC6D4[]; +extern u8 D_801AC684[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801AC6CC, D_801AC6D4, D_801AC684); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801AC6E0[]; + extern u8 D_801AC7A0; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801AC6E0[1] = 0xff; + D_801AC6E0[2] = 0x10; + D_801AC6E0[0] = 0x10; + D_801AC6E0[6] = 0; + D_801AC6E0[5] = 0; + D_801AC6E0[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801AC6E0, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801AC7A0, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801AC6E0); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8016AB6C", func_8016C998); + + +extern void (*D_801841A0[])(void); + +void func_8016CB84(void *a0) { + D_801841A0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801AC7A0[]; + + + Blk_8016CF04_8016CF04 *p = &D_801AC7A0[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_801841BC[])(void); + +void func_8016D19C(void *a0) { + D_801841BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_801841C4[])(void); + +void func_8016D428(void *a0) { + D_801841C4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018422C[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_8018422C[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_801841D0; +extern u8 D_801841DC; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801841D0, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801841DC); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80184260[])(void); + +void func_8016DEA4(void *a0) { + D_80184260[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80184268[])(void); + +void func_8016DF20(void *a0) { + D_80184268[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_801842BC[])(void); + +void func_8016E5B8(void *a0) { + D_801842BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_8018427C[4]; + extern s32 D_8018429C; + extern s32 D_801842A4; + extern s32 D_801842AC; + extern s32 D_801842B4; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_8018427C[0], pp, &tmp); + RotTransSV(&D_8018427C[1], &prim.v[1], &tmp); + RotTransSV(&D_8018427C[2], &prim.v[2], &tmp); + RotTransSV(&D_8018427C[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_8018429C; + prim.f1 = D_801842A4; + prim.f2 = D_801842AC; + prim.f3 = D_801842B4; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_801842FC[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_801842FC[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_801842F0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_801842F0[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_801842E0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_801842E0[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801842F0[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_801842F0[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_801842F0[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_8018430C; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_8018430C; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80184384[])(void); + +void func_8016F6E0(void *a0) { + D_80184384[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_8018438C[])(void); + +void func_8016F798(void *a0) { + D_8018438C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80184394[])(void); + +void func_8016F834(void *a0) { + D_80184394[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_8018439C[])(void); + +void func_8016F8E4(void *a0) { + D_8018439C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_801843A4[])(void); + +void func_8016F9C4(void *a0) { + D_801843A4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_801843AC[])(void); + +void func_8016FA84(void *a0) { + D_801843AC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_801843B8[])(void); + +void func_8016FB7C(void *a0) { + D_801843B8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_801843C4[])(void); + +void func_8016FC90(void *a0) { + D_801843C4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_801843D0[])(void); + +void func_8016FDB4(void *a0) { + D_801843D0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_801843E0[])(void); + +void func_8016FF30(void *a0) { + D_801843E0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_801843F0[])(void); + +void func_8016FFDC(void *a0) { + D_801843F0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_801843F8[])(void); + +void func_80170150(void *a0) { + D_801843F8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80184400[])(void); + +void func_80170240(void *a0) { + D_80184400[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80184408[])(void); + +void func_801702FC(void *a0) { + D_80184408[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80184410[])(void); + +void func_801703E0(void *a0) { + D_80184410[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80184418[])(void); + +void func_801704B0(void *a0) { + D_80184418[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80184420[])(void); + +void func_80170548(void *a0) { + D_80184420[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80184428[])(void); + +void func_801705F8(void *a0) { + D_80184428[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80184430[])(void); + +void func_801706AC(void *a0) { + D_80184430[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80184438[])(void); + +void func_80170748(void *a0) { + D_80184438[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80184440[])(void); + +void func_80170810(void *a0) { + D_80184440[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80184448[])(void); + +void func_80170AD8(void *a0) { + D_80184448[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80184450[])(void); + +void func_80170BD8(void *a0) { + D_80184450[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80184458[])(void); + +void func_80170C74(void *a0) { + D_80184458[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80184460[])(void); + +void func_80170D68(void *a0) { + D_80184460[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80184468[])(void); + +void func_80170E34(void *a0) { + D_80184468[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80184470[])(void); + +void func_80170EFC(void *a0) { + D_80184470[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80184478[])(void); + +void func_80170FB0(void *a0) { + D_80184478[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80184480[])(void); + +void func_80171064(void *a0) { + D_80184480[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80184488[])(void); + +void func_80171120(void *a0) { + D_80184488[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80184490[])(void); + +void func_801711C0(void *a0) { + D_80184490[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80184498[])(void); + +void func_80171260(void *a0) { + D_80184498[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_801844A0[])(void); + +void func_801714E4(void *a0) { + D_801844A0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8016AB6C", func_80172C50); + + +extern void (*D_801844E4[])(void); + +void func_80172CA0(void *a0) { + D_801844E4[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_801844A8; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_801844A8); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_014/ov_SC03_014_jr_8015AE2C.c b/src/ov_SC03_014/ov_SC03_014_jr_8015AE2C.c index c91e84573..e9f1f6ec8 100644 --- a/src/ov_SC03_014/ov_SC03_014_jr_8015AE2C.c +++ b/src/ov_SC03_014/ov_SC03_014_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_8018E6D8[])(void); void func_8016AB30(void *a0) { D_8018E6D8[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_8018E754[])(void); - -void func_8016B4BC(void *a0) { - D_8018E754[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801E9B08; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801E9B08); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_8018E748[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_8018E748; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_8018E78C[]; -extern unsigned short D_8018E794[]; -extern unsigned short D_8018E79C[]; -extern unsigned char D_801E9B10[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801E9B10 + param_2 * 0x40); - puVar3 = D_8018E78C[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_8018E794[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_8018E79C[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801E9B08; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801E9B08, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_8018E7A4[])(void); - -void func_8016BBA4(void *a0) { - D_8018E7A4[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801E9C44; - extern u8 D_801E9C45; - extern u8 D_801E9C46; - extern M2C_UNK D_801E9C48; - extern u8 D_801E9C49; - extern u8 D_801E9C4A; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801E9C44) = 0x20; - D_801E9C45 = 0x20; - D_801E9C46 = 0; - (*(u8 *)&D_801E9C48) = 0xc0; - D_801E9C49 = 0xc0; - D_801E9C4A = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801E9C44; -extern M2C_UNK D_801E9C48; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801E9C44, &D_801E9C48, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801E9C45; - extern u8 D_801E9C46; - extern u8 D_801E9C49; - extern u8 D_801E9C4A; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801E9C44); - if (*p1 != 0) *p1 -= 4; - if (D_801E9C45 != 0) D_801E9C45 -= 4; - if (D_801E9C46 != 0) D_801E9C46 -= 4; - p2 = &(*(u8 *)&D_801E9C48); - if (*p2 != 0) *p2 -= 4; - if (D_801E9C49 != 0) D_801E9C49 -= 4; - if (D_801E9C4A != 0) D_801E9C4A -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801E9C44), &(*(int *)&D_801E9C48), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801E9BD0; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801E9BD0); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_8018E7B4; - extern s32 D_8018E7BC; - extern s32 D_8018E7C4; - extern s32 D_8018E7CC; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_8018E7B4, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_8018E7BC, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_8018E7C4, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_8018E7CC, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_8018E7D4[])(void); - -void func_8016C14C(void *a0) { - D_8018E7D4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801E9C4C[]; -extern u8 D_801E9C54[]; -extern u8 D_801E9C04[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801E9C4C, D_801E9C54, D_801E9C04); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801E9C60[]; - extern u8 D_801E9D20; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801E9C60[1] = 0xff; - D_801E9C60[2] = 0x10; - D_801E9C60[0] = 0x10; - D_801E9C60[6] = 0; - D_801E9C60[5] = 0; - D_801E9C60[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801E9C60, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801E9D20, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801E9C60); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8015AE2C", func_8016C998); - - -extern void (*D_8018E7DC[])(void); - -void func_8016CB84(void *a0) { - D_8018E7DC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801E9D20[]; - - - Blk_8016CF04_8016CF04 *p = &D_801E9D20[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_8018E7F8[])(void); - -void func_8016D19C(void *a0) { - D_8018E7F8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_8018E800[])(void); - -void func_8016D428(void *a0) { - D_8018E800[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_8018E868[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_8018E868[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_8018E80C; -extern u8 D_8018E818; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018E80C, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018E818); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8015AE2C", func_8016DC20); - - -extern void (*D_8018E89C[])(void); - -void func_8016DEA4(void *a0) { - D_8018E89C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_8018E8A4[])(void); - -void func_8016DF20(void *a0) { - D_8018E8A4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_8018E8F8[])(void); - -void func_8016E5B8(void *a0) { - D_8018E8F8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_8018E8B8[4]; - extern s32 D_8018E8D8; - extern s32 D_8018E8E0; - extern s32 D_8018E8E8; - extern s32 D_8018E8F0; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_8018E8B8[0], pp, &tmp); - RotTransSV(&D_8018E8B8[1], &prim.v[1], &tmp); - RotTransSV(&D_8018E8B8[2], &prim.v[2], &tmp); - RotTransSV(&D_8018E8B8[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_8018E8D8; - prim.f1 = D_8018E8E0; - prim.f2 = D_8018E8E8; - prim.f3 = D_8018E8F0; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_8018E938[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_8018E938[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_8018E92C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_8018E92C[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_8018E91C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_8018E91C[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018E92C[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_8018E92C[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_8018E92C[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_8018E948; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_8018E948; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_8018E9C0[])(void); - -void func_8016F6E0(void *a0) { - D_8018E9C0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_8018E9C8[])(void); - -void func_8016F798(void *a0) { - D_8018E9C8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_8018E9D0[])(void); - -void func_8016F834(void *a0) { - D_8018E9D0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_8018E9D8[])(void); - -void func_8016F8E4(void *a0) { - D_8018E9D8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_8018E9E0[])(void); - -void func_8016F9C4(void *a0) { - D_8018E9E0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_8018E9E8[])(void); - -void func_8016FA84(void *a0) { - D_8018E9E8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_8018E9F4[])(void); - -void func_8016FB7C(void *a0) { - D_8018E9F4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_8018EA00[])(void); - -void func_8016FC90(void *a0) { - D_8018EA00[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_8018EA0C[])(void); - -void func_8016FDB4(void *a0) { - D_8018EA0C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_8018EA1C[])(void); - -void func_8016FF30(void *a0) { - D_8018EA1C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_8018EA2C[])(void); - -void func_8016FFDC(void *a0) { - D_8018EA2C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_8018EA34[])(void); - -void func_80170150(void *a0) { - D_8018EA34[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_8018EA3C[])(void); - -void func_80170240(void *a0) { - D_8018EA3C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_8018EA44[])(void); - -void func_801702FC(void *a0) { - D_8018EA44[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_8018EA4C[])(void); - -void func_801703E0(void *a0) { - D_8018EA4C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_8018EA54[])(void); - -void func_801704B0(void *a0) { - D_8018EA54[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_8018EA5C[])(void); - -void func_80170548(void *a0) { - D_8018EA5C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_8018EA64[])(void); - -void func_801705F8(void *a0) { - D_8018EA64[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_8018EA6C[])(void); - -void func_801706AC(void *a0) { - D_8018EA6C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_8018EA74[])(void); - -void func_80170748(void *a0) { - D_8018EA74[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_8018EA7C[])(void); - -void func_80170810(void *a0) { - D_8018EA7C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_8018EA84[])(void); - -void func_80170AD8(void *a0) { - D_8018EA84[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_8018EA8C[])(void); - -void func_80170BD8(void *a0) { - D_8018EA8C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_8018EA94[])(void); - -void func_80170C74(void *a0) { - D_8018EA94[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8015AE2C", func_80170CF0); - - -extern void (*D_8018EA9C[])(void); - -void func_80170D68(void *a0) { - D_8018EA9C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_8018EAA4[])(void); - -void func_80170E34(void *a0) { - D_8018EAA4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_8018EAAC[])(void); - -void func_80170EFC(void *a0) { - D_8018EAAC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_8018EAB4[])(void); - -void func_80170FB0(void *a0) { - D_8018EAB4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_8018EABC[])(void); - -void func_80171064(void *a0) { - D_8018EABC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_8018EAC4[])(void); - -void func_80171120(void *a0) { - D_8018EAC4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_8018EACC[])(void); - -void func_801711C0(void *a0) { - D_8018EACC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_8018EAD4[])(void); - -void func_80171260(void *a0) { - D_8018EAD4[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_8018EADC[])(void); - -void func_801714E4(void *a0) { - D_8018EADC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8015AE2C", func_80172C50); - - -extern void (*D_8018EB20[])(void); - -void func_80172CA0(void *a0) { - D_8018EB20[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_8018EAE4; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_8018EAE4); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_014/ov_SC03_014_jr_8016AB6C.c b/src/ov_SC03_014/ov_SC03_014_jr_8016AB6C.c new file mode 100644 index 000000000..06a6505db --- /dev/null +++ b/src/ov_SC03_014/ov_SC03_014_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018DAA4; +extern u8 D_8018DA14; +extern u8 D_8018D9F0; +extern u8 D_8018D9CC; +extern u8 D_8018DA80; +extern u8 D_8018DA5C; +extern u8 D_8018DA38; +extern u8 D_8018D9A8; +extern void func_80145934(void); +extern u8 D_8018DB34; +extern u8 D_8018DB10; +extern u8 D_8018DAEC; +extern u8 D_8018DAC8; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018CF2C[]; +extern unsigned char D_8018CF5C[]; +extern unsigned char D_8018CFAC[]; +extern unsigned char D_8018CFDC[]; +extern unsigned char D_8018D00C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018D05C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018D124[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018D1AC[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018D1B4; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801E9698; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801E969C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018D1E4; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018D28C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018D2B0[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018D2A0; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018D2C4[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018D2D0[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018D2E0[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018D2F8[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018D2E8; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018D30C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018D328[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018D318; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018D33C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018D350[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018D364; +extern void (*D_8018D38C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018D36C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018D3D8[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018D3DC[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018D840[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018D850[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801E96D0; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018D878[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018D858; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018D868; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018D8B8[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018D8C0[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018D88C; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018D8CC[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018D89C; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801E96D8; +extern s32 D_801E96E4; +extern s32 D_801E96E8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018D908[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018D8DC[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801E96E0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018DB58[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018D978[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018DBFC[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018DD50[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018DB6C; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018DD58[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018DB7C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018DB9C; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_8018DD60[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_8018DD88[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_8018DD94[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_8018DC08[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_8018DE38; +extern void func_8015D380(s32 a0); +extern unsigned char D_8018CF1C[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_8018DE4C[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_8018DE88[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_8018DED0; +extern u16 D_8018DED2; +extern u16 D_8018DED4; +extern s32 D_8018DED8; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_8018DEE0; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_8018DBEC; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_8018DF64[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_8018E014[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_8018E044[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_8018E0A8; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801E96F0[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_8018E0CC[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801E9748[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_8018E114[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_8018E104; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801E8DBC[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_8018E11C[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_8018E170[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_8018E138; +extern s16 D_8018E16C; +extern s16 D_8018E16A; +extern s16 D_8018E168; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_8018E17C[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801E97A8; +extern u8 D_801E97A9; +extern u8 D_801E97AA; +extern u8 D_801E97AB; +extern u8 D_801E97AC; +extern u8 D_801E97AD; +extern u8 D_801E97AE; +extern u8 D_801E97AF; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_8018E18C[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801E97E8; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_8018E1D0[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_8018E24C[]; +extern s32 D_8018E26C[]; +extern u8 D_8018E2E8[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_8018E308[]; +extern u8 D_8018E328[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_8018E3C4[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_8018E440[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801E8DCC; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_8018E44C[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_8018E454[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_8018E51C[])(void); +extern void func_80166618(void *a0); +extern void (*D_8018E52C[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_8018E53C[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_8018E548[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_8018E4A8[]; +extern u8 D_8018E4BC[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_8018E560[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_8018E568[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_8018E570[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_8018E578[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_8018E580[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_8018E588[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_8018E590[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_8018E644[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_8018E64C[])(void); +extern void func_80169F00(void *a0); +extern char D_8018E5FC[]; +extern char D_8018E5BC[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_8018E684[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_8018E690[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_8018E6D8[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_8018E698[]; + extern u8 D_8018E6A8[]; + extern u8 D_801E9AB8[]; + extern u8 D_801E9AE0[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_8018E698, D_801E9AB8) + 3; + func_8001CE28(obj, D_801E9AB8); + } else { + var_s3 = func_80024054(D_8018E6A8, D_801E9AE0) + 9; + func_8001CE28(obj, D_801E9AE0); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_8018E754[])(void); + +void func_8016B4BC(void *a0) { + D_8018E754[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801E9B08; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801E9B08); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_8018E748[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_8018E748; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_8018E78C[]; +extern unsigned short D_8018E794[]; +extern unsigned short D_8018E79C[]; +extern unsigned char D_801E9B10[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801E9B10 + param_2 * 0x40); + puVar3 = D_8018E78C[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_8018E794[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_8018E79C[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801E9B08; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801E9B08, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_8018E7A4[])(void); + +void func_8016BBA4(void *a0) { + D_8018E7A4[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801E9C44; + extern u8 D_801E9C45; + extern u8 D_801E9C46; + extern M2C_UNK D_801E9C48; + extern u8 D_801E9C49; + extern u8 D_801E9C4A; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801E9C44) = 0x20; + D_801E9C45 = 0x20; + D_801E9C46 = 0; + (*(u8 *)&D_801E9C48) = 0xc0; + D_801E9C49 = 0xc0; + D_801E9C4A = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801E9C44; +extern M2C_UNK D_801E9C48; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801E9C44, &D_801E9C48, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801E9C45; + extern u8 D_801E9C46; + extern u8 D_801E9C49; + extern u8 D_801E9C4A; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801E9C44); + if (*p1 != 0) *p1 -= 4; + if (D_801E9C45 != 0) D_801E9C45 -= 4; + if (D_801E9C46 != 0) D_801E9C46 -= 4; + p2 = &(*(u8 *)&D_801E9C48); + if (*p2 != 0) *p2 -= 4; + if (D_801E9C49 != 0) D_801E9C49 -= 4; + if (D_801E9C4A != 0) D_801E9C4A -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801E9C44), &(*(int *)&D_801E9C48), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801E9BD0; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801E9BD0); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_8018E7B4; + extern s32 D_8018E7BC; + extern s32 D_8018E7C4; + extern s32 D_8018E7CC; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_8018E7B4, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_8018E7BC, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_8018E7C4, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_8018E7CC, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_8018E7D4[])(void); + +void func_8016C14C(void *a0) { + D_8018E7D4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801E9C4C[]; +extern u8 D_801E9C54[]; +extern u8 D_801E9C04[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801E9C4C, D_801E9C54, D_801E9C04); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801E9C60[]; + extern u8 D_801E9D20; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801E9C60[1] = 0xff; + D_801E9C60[2] = 0x10; + D_801E9C60[0] = 0x10; + D_801E9C60[6] = 0; + D_801E9C60[5] = 0; + D_801E9C60[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801E9C60, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801E9D20, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801E9C60); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8016AB6C", func_8016C998); + + +extern void (*D_8018E7DC[])(void); + +void func_8016CB84(void *a0) { + D_8018E7DC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801E9D20[]; + + + Blk_8016CF04_8016CF04 *p = &D_801E9D20[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_8018E7F8[])(void); + +void func_8016D19C(void *a0) { + D_8018E7F8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_8018E800[])(void); + +void func_8016D428(void *a0) { + D_8018E800[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018E868[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_8018E868[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_8018E80C; +extern u8 D_8018E818; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018E80C, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018E818); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8016AB6C", func_8016DC20); + + +extern void (*D_8018E89C[])(void); + +void func_8016DEA4(void *a0) { + D_8018E89C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_8018E8A4[])(void); + +void func_8016DF20(void *a0) { + D_8018E8A4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_8018E8F8[])(void); + +void func_8016E5B8(void *a0) { + D_8018E8F8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_8018E8B8[4]; + extern s32 D_8018E8D8; + extern s32 D_8018E8E0; + extern s32 D_8018E8E8; + extern s32 D_8018E8F0; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_8018E8B8[0], pp, &tmp); + RotTransSV(&D_8018E8B8[1], &prim.v[1], &tmp); + RotTransSV(&D_8018E8B8[2], &prim.v[2], &tmp); + RotTransSV(&D_8018E8B8[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_8018E8D8; + prim.f1 = D_8018E8E0; + prim.f2 = D_8018E8E8; + prim.f3 = D_8018E8F0; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_8018E938[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_8018E938[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_8018E92C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_8018E92C[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_8018E91C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_8018E91C[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018E92C[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_8018E92C[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_8018E92C[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_8018E948; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_8018E948; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_8018E9C0[])(void); + +void func_8016F6E0(void *a0) { + D_8018E9C0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_8018E9C8[])(void); + +void func_8016F798(void *a0) { + D_8018E9C8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_8018E9D0[])(void); + +void func_8016F834(void *a0) { + D_8018E9D0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_8018E9D8[])(void); + +void func_8016F8E4(void *a0) { + D_8018E9D8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_8018E9E0[])(void); + +void func_8016F9C4(void *a0) { + D_8018E9E0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_8018E9E8[])(void); + +void func_8016FA84(void *a0) { + D_8018E9E8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_8018E9F4[])(void); + +void func_8016FB7C(void *a0) { + D_8018E9F4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_8018EA00[])(void); + +void func_8016FC90(void *a0) { + D_8018EA00[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_8018EA0C[])(void); + +void func_8016FDB4(void *a0) { + D_8018EA0C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_8018EA1C[])(void); + +void func_8016FF30(void *a0) { + D_8018EA1C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_8018EA2C[])(void); + +void func_8016FFDC(void *a0) { + D_8018EA2C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_8018EA34[])(void); + +void func_80170150(void *a0) { + D_8018EA34[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_8018EA3C[])(void); + +void func_80170240(void *a0) { + D_8018EA3C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_8018EA44[])(void); + +void func_801702FC(void *a0) { + D_8018EA44[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_8018EA4C[])(void); + +void func_801703E0(void *a0) { + D_8018EA4C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_8018EA54[])(void); + +void func_801704B0(void *a0) { + D_8018EA54[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_8018EA5C[])(void); + +void func_80170548(void *a0) { + D_8018EA5C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_8018EA64[])(void); + +void func_801705F8(void *a0) { + D_8018EA64[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_8018EA6C[])(void); + +void func_801706AC(void *a0) { + D_8018EA6C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_8018EA74[])(void); + +void func_80170748(void *a0) { + D_8018EA74[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_8018EA7C[])(void); + +void func_80170810(void *a0) { + D_8018EA7C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_8018EA84[])(void); + +void func_80170AD8(void *a0) { + D_8018EA84[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_8018EA8C[])(void); + +void func_80170BD8(void *a0) { + D_8018EA8C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_8018EA94[])(void); + +void func_80170C74(void *a0) { + D_8018EA94[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8016AB6C", func_80170CF0); + + +extern void (*D_8018EA9C[])(void); + +void func_80170D68(void *a0) { + D_8018EA9C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_8018EAA4[])(void); + +void func_80170E34(void *a0) { + D_8018EAA4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_8018EAAC[])(void); + +void func_80170EFC(void *a0) { + D_8018EAAC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_8018EAB4[])(void); + +void func_80170FB0(void *a0) { + D_8018EAB4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_8018EABC[])(void); + +void func_80171064(void *a0) { + D_8018EABC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_8018EAC4[])(void); + +void func_80171120(void *a0) { + D_8018EAC4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_8018EACC[])(void); + +void func_801711C0(void *a0) { + D_8018EACC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_8018EAD4[])(void); + +void func_80171260(void *a0) { + D_8018EAD4[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_8018EADC[])(void); + +void func_801714E4(void *a0) { + D_8018EADC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8016AB6C", func_80172C50); + + +extern void (*D_8018EB20[])(void); + +void func_80172CA0(void *a0) { + D_8018EB20[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_8018EAE4; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_8018EAE4); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_015/ov_SC03_015_jr_8015AE2C.c b/src/ov_SC03_015/ov_SC03_015_jr_8015AE2C.c index c87520eb7..aadb02d7e 100644 --- a/src/ov_SC03_015/ov_SC03_015_jr_8015AE2C.c +++ b/src/ov_SC03_015/ov_SC03_015_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_8018E6D8[])(void); void func_8016AB30(void *a0) { D_8018E6D8[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_8018E754[])(void); - -void func_8016B4BC(void *a0) { - D_8018E754[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801E9B08; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801E9B08); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_8018E748[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_8018E748; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_8018E78C[]; -extern unsigned short D_8018E794[]; -extern unsigned short D_8018E79C[]; -extern unsigned char D_801E9B10[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801E9B10 + param_2 * 0x40); - puVar3 = D_8018E78C[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_8018E794[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_8018E79C[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801E9B08; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801E9B08, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_8018E7A4[])(void); - -void func_8016BBA4(void *a0) { - D_8018E7A4[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801E9C44; - extern u8 D_801E9C45; - extern u8 D_801E9C46; - extern M2C_UNK D_801E9C48; - extern u8 D_801E9C49; - extern u8 D_801E9C4A; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801E9C44) = 0x20; - D_801E9C45 = 0x20; - D_801E9C46 = 0; - (*(u8 *)&D_801E9C48) = 0xc0; - D_801E9C49 = 0xc0; - D_801E9C4A = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801E9C44; -extern M2C_UNK D_801E9C48; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801E9C44, &D_801E9C48, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801E9C45; - extern u8 D_801E9C46; - extern u8 D_801E9C49; - extern u8 D_801E9C4A; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801E9C44); - if (*p1 != 0) *p1 -= 4; - if (D_801E9C45 != 0) D_801E9C45 -= 4; - if (D_801E9C46 != 0) D_801E9C46 -= 4; - p2 = &(*(u8 *)&D_801E9C48); - if (*p2 != 0) *p2 -= 4; - if (D_801E9C49 != 0) D_801E9C49 -= 4; - if (D_801E9C4A != 0) D_801E9C4A -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801E9C44), &(*(int *)&D_801E9C48), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801E9BD0; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801E9BD0); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_8018E7B4; - extern s32 D_8018E7BC; - extern s32 D_8018E7C4; - extern s32 D_8018E7CC; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_8018E7B4, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_8018E7BC, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_8018E7C4, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_8018E7CC, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_8018E7D4[])(void); - -void func_8016C14C(void *a0) { - D_8018E7D4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801E9C4C[]; -extern u8 D_801E9C54[]; -extern u8 D_801E9C04[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801E9C4C, D_801E9C54, D_801E9C04); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801E9C60[]; - extern u8 D_801E9D20; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801E9C60[1] = 0xff; - D_801E9C60[2] = 0x10; - D_801E9C60[0] = 0x10; - D_801E9C60[6] = 0; - D_801E9C60[5] = 0; - D_801E9C60[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801E9C60, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801E9D20, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801E9C60); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8015AE2C", func_8016C998); - - -extern void (*D_8018E7DC[])(void); - -void func_8016CB84(void *a0) { - D_8018E7DC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801E9D20[]; - - - Blk_8016CF04_8016CF04 *p = &D_801E9D20[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_8018E7F8[])(void); - -void func_8016D19C(void *a0) { - D_8018E7F8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_8018E800[])(void); - -void func_8016D428(void *a0) { - D_8018E800[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_8018E868[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_8018E868[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_8018E80C; -extern u8 D_8018E818; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018E80C, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018E818); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8015AE2C", func_8016DC20); - - -extern void (*D_8018E89C[])(void); - -void func_8016DEA4(void *a0) { - D_8018E89C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_8018E8A4[])(void); - -void func_8016DF20(void *a0) { - D_8018E8A4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_8018E8F8[])(void); - -void func_8016E5B8(void *a0) { - D_8018E8F8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_8018E8B8[4]; - extern s32 D_8018E8D8; - extern s32 D_8018E8E0; - extern s32 D_8018E8E8; - extern s32 D_8018E8F0; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_8018E8B8[0], pp, &tmp); - RotTransSV(&D_8018E8B8[1], &prim.v[1], &tmp); - RotTransSV(&D_8018E8B8[2], &prim.v[2], &tmp); - RotTransSV(&D_8018E8B8[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_8018E8D8; - prim.f1 = D_8018E8E0; - prim.f2 = D_8018E8E8; - prim.f3 = D_8018E8F0; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_8018E938[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_8018E938[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_8018E92C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_8018E92C[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_8018E91C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_8018E91C[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018E92C[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_8018E92C[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_8018E92C[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_8018E948; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_8018E948; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_8018E9C0[])(void); - -void func_8016F6E0(void *a0) { - D_8018E9C0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_8018E9C8[])(void); - -void func_8016F798(void *a0) { - D_8018E9C8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_8018E9D0[])(void); - -void func_8016F834(void *a0) { - D_8018E9D0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_8018E9D8[])(void); - -void func_8016F8E4(void *a0) { - D_8018E9D8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_8018E9E0[])(void); - -void func_8016F9C4(void *a0) { - D_8018E9E0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_8018E9E8[])(void); - -void func_8016FA84(void *a0) { - D_8018E9E8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_8018E9F4[])(void); - -void func_8016FB7C(void *a0) { - D_8018E9F4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_8018EA00[])(void); - -void func_8016FC90(void *a0) { - D_8018EA00[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_8018EA0C[])(void); - -void func_8016FDB4(void *a0) { - D_8018EA0C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_8018EA1C[])(void); - -void func_8016FF30(void *a0) { - D_8018EA1C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_8018EA2C[])(void); - -void func_8016FFDC(void *a0) { - D_8018EA2C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_8018EA34[])(void); - -void func_80170150(void *a0) { - D_8018EA34[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_8018EA3C[])(void); - -void func_80170240(void *a0) { - D_8018EA3C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_8018EA44[])(void); - -void func_801702FC(void *a0) { - D_8018EA44[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_8018EA4C[])(void); - -void func_801703E0(void *a0) { - D_8018EA4C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_8018EA54[])(void); - -void func_801704B0(void *a0) { - D_8018EA54[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_8018EA5C[])(void); - -void func_80170548(void *a0) { - D_8018EA5C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_8018EA64[])(void); - -void func_801705F8(void *a0) { - D_8018EA64[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_8018EA6C[])(void); - -void func_801706AC(void *a0) { - D_8018EA6C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_8018EA74[])(void); - -void func_80170748(void *a0) { - D_8018EA74[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_8018EA7C[])(void); - -void func_80170810(void *a0) { - D_8018EA7C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_8018EA84[])(void); - -void func_80170AD8(void *a0) { - D_8018EA84[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_8018EA8C[])(void); - -void func_80170BD8(void *a0) { - D_8018EA8C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_8018EA94[])(void); - -void func_80170C74(void *a0) { - D_8018EA94[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8015AE2C", func_80170CF0); - - -extern void (*D_8018EA9C[])(void); - -void func_80170D68(void *a0) { - D_8018EA9C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_8018EAA4[])(void); - -void func_80170E34(void *a0) { - D_8018EAA4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_8018EAAC[])(void); - -void func_80170EFC(void *a0) { - D_8018EAAC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_8018EAB4[])(void); - -void func_80170FB0(void *a0) { - D_8018EAB4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_8018EABC[])(void); - -void func_80171064(void *a0) { - D_8018EABC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_8018EAC4[])(void); - -void func_80171120(void *a0) { - D_8018EAC4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_8018EACC[])(void); - -void func_801711C0(void *a0) { - D_8018EACC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_8018EAD4[])(void); - -void func_80171260(void *a0) { - D_8018EAD4[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_8018EADC[])(void); - -void func_801714E4(void *a0) { - D_8018EADC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8015AE2C", func_80172C50); - - -extern void (*D_8018EB20[])(void); - -void func_80172CA0(void *a0) { - D_8018EB20[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_8018EAE4; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_8018EAE4); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_015/ov_SC03_015_jr_8016AB6C.c b/src/ov_SC03_015/ov_SC03_015_jr_8016AB6C.c new file mode 100644 index 000000000..a59195e0a --- /dev/null +++ b/src/ov_SC03_015/ov_SC03_015_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018DAA4; +extern u8 D_8018DA14; +extern u8 D_8018D9F0; +extern u8 D_8018D9CC; +extern u8 D_8018DA80; +extern u8 D_8018DA5C; +extern u8 D_8018DA38; +extern u8 D_8018D9A8; +extern void func_80145934(void); +extern u8 D_8018DB34; +extern u8 D_8018DB10; +extern u8 D_8018DAEC; +extern u8 D_8018DAC8; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018CF2C[]; +extern unsigned char D_8018CF5C[]; +extern unsigned char D_8018CFAC[]; +extern unsigned char D_8018CFDC[]; +extern unsigned char D_8018D00C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018D05C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018D124[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018D1AC[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018D1B4; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801E9698; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801E969C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018D1E4; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018D28C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018D2B0[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018D2A0; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018D2C4[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018D2D0[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018D2E0[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018D2F8[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018D2E8; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018D30C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018D328[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018D318; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018D33C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018D350[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018D364; +extern void (*D_8018D38C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018D36C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018D3D8[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018D3DC[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018D840[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018D850[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801E96D0; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018D878[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018D858; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018D868; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018D8B8[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018D8C0[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018D88C; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018D8CC[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018D89C; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801E96D8; +extern s32 D_801E96E4; +extern s32 D_801E96E8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018D908[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018D8DC[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801E96E0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018DB58[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018D978[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018DBFC[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018DD50[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018DB6C; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018DD58[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018DB7C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018DB9C; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_8018DD60[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_8018DD88[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_8018DD94[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_8018DC08[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_8018DE38; +extern void func_8015D380(s32 a0); +extern unsigned char D_8018CF1C[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_8018DE4C[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_8018DE88[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_8018DED0; +extern u16 D_8018DED2; +extern u16 D_8018DED4; +extern s32 D_8018DED8; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_8018DEE0; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_8018DBEC; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_8018DF64[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_8018E014[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_8018E044[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_8018E0A8; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801E96F0[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_8018E0CC[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801E9748[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_8018E114[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_8018E104; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801E8DBC[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_8018E11C[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_8018E170[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_8018E138; +extern s16 D_8018E16C; +extern s16 D_8018E16A; +extern s16 D_8018E168; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_8018E17C[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801E97A8; +extern u8 D_801E97A9; +extern u8 D_801E97AA; +extern u8 D_801E97AB; +extern u8 D_801E97AC; +extern u8 D_801E97AD; +extern u8 D_801E97AE; +extern u8 D_801E97AF; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_8018E18C[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801E97E8; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_8018E1D0[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_8018E24C[]; +extern s32 D_8018E26C[]; +extern u8 D_8018E2E8[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_8018E308[]; +extern u8 D_8018E328[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_8018E3C4[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_8018E440[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801E8DCC; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_8018E44C[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_8018E454[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_8018E51C[])(void); +extern void func_80166618(void *a0); +extern void (*D_8018E52C[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_8018E53C[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_8018E548[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_8018E4A8[]; +extern u8 D_8018E4BC[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_8018E560[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_8018E568[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_8018E570[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_8018E578[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_8018E580[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_8018E588[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_8018E590[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_8018E644[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_8018E64C[])(void); +extern void func_80169F00(void *a0); +extern char D_8018E5FC[]; +extern char D_8018E5BC[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_8018E684[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_8018E690[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_8018E6D8[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_8018E698[]; + extern u8 D_8018E6A8[]; + extern u8 D_801E9AB8[]; + extern u8 D_801E9AE0[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_8018E698, D_801E9AB8) + 3; + func_8001CE28(obj, D_801E9AB8); + } else { + var_s3 = func_80024054(D_8018E6A8, D_801E9AE0) + 9; + func_8001CE28(obj, D_801E9AE0); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_8018E754[])(void); + +void func_8016B4BC(void *a0) { + D_8018E754[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801E9B08; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801E9B08); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_8018E748[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_8018E748; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_8018E78C[]; +extern unsigned short D_8018E794[]; +extern unsigned short D_8018E79C[]; +extern unsigned char D_801E9B10[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801E9B10 + param_2 * 0x40); + puVar3 = D_8018E78C[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_8018E794[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_8018E79C[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801E9B08; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801E9B08, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_8018E7A4[])(void); + +void func_8016BBA4(void *a0) { + D_8018E7A4[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801E9C44; + extern u8 D_801E9C45; + extern u8 D_801E9C46; + extern M2C_UNK D_801E9C48; + extern u8 D_801E9C49; + extern u8 D_801E9C4A; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801E9C44) = 0x20; + D_801E9C45 = 0x20; + D_801E9C46 = 0; + (*(u8 *)&D_801E9C48) = 0xc0; + D_801E9C49 = 0xc0; + D_801E9C4A = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801E9C44; +extern M2C_UNK D_801E9C48; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801E9C44, &D_801E9C48, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801E9C45; + extern u8 D_801E9C46; + extern u8 D_801E9C49; + extern u8 D_801E9C4A; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801E9C44); + if (*p1 != 0) *p1 -= 4; + if (D_801E9C45 != 0) D_801E9C45 -= 4; + if (D_801E9C46 != 0) D_801E9C46 -= 4; + p2 = &(*(u8 *)&D_801E9C48); + if (*p2 != 0) *p2 -= 4; + if (D_801E9C49 != 0) D_801E9C49 -= 4; + if (D_801E9C4A != 0) D_801E9C4A -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801E9C44), &(*(int *)&D_801E9C48), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801E9BD0; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801E9BD0); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_8018E7B4; + extern s32 D_8018E7BC; + extern s32 D_8018E7C4; + extern s32 D_8018E7CC; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_8018E7B4, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_8018E7BC, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_8018E7C4, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_8018E7CC, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_8018E7D4[])(void); + +void func_8016C14C(void *a0) { + D_8018E7D4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801E9C4C[]; +extern u8 D_801E9C54[]; +extern u8 D_801E9C04[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801E9C4C, D_801E9C54, D_801E9C04); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801E9C60[]; + extern u8 D_801E9D20; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801E9C60[1] = 0xff; + D_801E9C60[2] = 0x10; + D_801E9C60[0] = 0x10; + D_801E9C60[6] = 0; + D_801E9C60[5] = 0; + D_801E9C60[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801E9C60, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801E9D20, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801E9C60); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8016AB6C", func_8016C998); + + +extern void (*D_8018E7DC[])(void); + +void func_8016CB84(void *a0) { + D_8018E7DC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801E9D20[]; + + + Blk_8016CF04_8016CF04 *p = &D_801E9D20[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_8018E7F8[])(void); + +void func_8016D19C(void *a0) { + D_8018E7F8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_8018E800[])(void); + +void func_8016D428(void *a0) { + D_8018E800[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018E868[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_8018E868[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_8018E80C; +extern u8 D_8018E818; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018E80C, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018E818); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8016AB6C", func_8016DC20); + + +extern void (*D_8018E89C[])(void); + +void func_8016DEA4(void *a0) { + D_8018E89C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_8018E8A4[])(void); + +void func_8016DF20(void *a0) { + D_8018E8A4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_8018E8F8[])(void); + +void func_8016E5B8(void *a0) { + D_8018E8F8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_8018E8B8[4]; + extern s32 D_8018E8D8; + extern s32 D_8018E8E0; + extern s32 D_8018E8E8; + extern s32 D_8018E8F0; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_8018E8B8[0], pp, &tmp); + RotTransSV(&D_8018E8B8[1], &prim.v[1], &tmp); + RotTransSV(&D_8018E8B8[2], &prim.v[2], &tmp); + RotTransSV(&D_8018E8B8[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_8018E8D8; + prim.f1 = D_8018E8E0; + prim.f2 = D_8018E8E8; + prim.f3 = D_8018E8F0; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_8018E938[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_8018E938[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_8018E92C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_8018E92C[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_8018E91C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_8018E91C[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018E92C[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_8018E92C[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_8018E92C[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_8018E948; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_8018E948; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_8018E9C0[])(void); + +void func_8016F6E0(void *a0) { + D_8018E9C0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_8018E9C8[])(void); + +void func_8016F798(void *a0) { + D_8018E9C8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_8018E9D0[])(void); + +void func_8016F834(void *a0) { + D_8018E9D0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_8018E9D8[])(void); + +void func_8016F8E4(void *a0) { + D_8018E9D8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_8018E9E0[])(void); + +void func_8016F9C4(void *a0) { + D_8018E9E0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_8018E9E8[])(void); + +void func_8016FA84(void *a0) { + D_8018E9E8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_8018E9F4[])(void); + +void func_8016FB7C(void *a0) { + D_8018E9F4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_8018EA00[])(void); + +void func_8016FC90(void *a0) { + D_8018EA00[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_8018EA0C[])(void); + +void func_8016FDB4(void *a0) { + D_8018EA0C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_8018EA1C[])(void); + +void func_8016FF30(void *a0) { + D_8018EA1C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_8018EA2C[])(void); + +void func_8016FFDC(void *a0) { + D_8018EA2C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_8018EA34[])(void); + +void func_80170150(void *a0) { + D_8018EA34[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_8018EA3C[])(void); + +void func_80170240(void *a0) { + D_8018EA3C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_8018EA44[])(void); + +void func_801702FC(void *a0) { + D_8018EA44[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_8018EA4C[])(void); + +void func_801703E0(void *a0) { + D_8018EA4C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_8018EA54[])(void); + +void func_801704B0(void *a0) { + D_8018EA54[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_8018EA5C[])(void); + +void func_80170548(void *a0) { + D_8018EA5C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_8018EA64[])(void); + +void func_801705F8(void *a0) { + D_8018EA64[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_8018EA6C[])(void); + +void func_801706AC(void *a0) { + D_8018EA6C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_8018EA74[])(void); + +void func_80170748(void *a0) { + D_8018EA74[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_8018EA7C[])(void); + +void func_80170810(void *a0) { + D_8018EA7C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_8018EA84[])(void); + +void func_80170AD8(void *a0) { + D_8018EA84[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_8018EA8C[])(void); + +void func_80170BD8(void *a0) { + D_8018EA8C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_8018EA94[])(void); + +void func_80170C74(void *a0) { + D_8018EA94[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8016AB6C", func_80170CF0); + + +extern void (*D_8018EA9C[])(void); + +void func_80170D68(void *a0) { + D_8018EA9C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_8018EAA4[])(void); + +void func_80170E34(void *a0) { + D_8018EAA4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_8018EAAC[])(void); + +void func_80170EFC(void *a0) { + D_8018EAAC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_8018EAB4[])(void); + +void func_80170FB0(void *a0) { + D_8018EAB4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_8018EABC[])(void); + +void func_80171064(void *a0) { + D_8018EABC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_8018EAC4[])(void); + +void func_80171120(void *a0) { + D_8018EAC4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_8018EACC[])(void); + +void func_801711C0(void *a0) { + D_8018EACC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_8018EAD4[])(void); + +void func_80171260(void *a0) { + D_8018EAD4[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_8018EADC[])(void); + +void func_801714E4(void *a0) { + D_8018EADC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8016AB6C", func_80172C50); + + +extern void (*D_8018EB20[])(void); + +void func_80172CA0(void *a0) { + D_8018EB20[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_8018EAE4; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_8018EAE4); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_023/ov_SC03_023_jr_8015AE2C.c b/src/ov_SC03_023/ov_SC03_023_jr_8015AE2C.c index 33e1eae02..73a8cf2f6 100644 --- a/src/ov_SC03_023/ov_SC03_023_jr_8015AE2C.c +++ b/src/ov_SC03_023/ov_SC03_023_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_80182054[])(void); void func_8016AB30(void *a0) { D_80182054[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_801820D0[])(void); - -void func_8016B4BC(void *a0) { - D_801820D0[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_80197EE0; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_80197EE0); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_801820C4[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_801820C4; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80182108[]; -extern unsigned short D_80182110[]; -extern unsigned short D_80182118[]; -extern unsigned char D_80197EE8[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_80197EE8 + param_2 * 0x40); - puVar3 = D_80182108[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80182110[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80182118[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_80197EE0; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_80197EE0, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80182120[])(void); - -void func_8016BBA4(void *a0) { - D_80182120[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_8019801C; - extern u8 D_8019801D; - extern u8 D_8019801E; - extern M2C_UNK D_80198020; - extern u8 D_80198021; - extern u8 D_80198022; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_8019801C) = 0x20; - D_8019801D = 0x20; - D_8019801E = 0; - (*(u8 *)&D_80198020) = 0xc0; - D_80198021 = 0xc0; - D_80198022 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_8019801C; -extern M2C_UNK D_80198020; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_8019801C, &D_80198020, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_8019801D; - extern u8 D_8019801E; - extern u8 D_80198021; - extern u8 D_80198022; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_8019801C); - if (*p1 != 0) *p1 -= 4; - if (D_8019801D != 0) D_8019801D -= 4; - if (D_8019801E != 0) D_8019801E -= 4; - p2 = &(*(u8 *)&D_80198020); - if (*p2 != 0) *p2 -= 4; - if (D_80198021 != 0) D_80198021 -= 4; - if (D_80198022 != 0) D_80198022 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_8019801C), &(*(int *)&D_80198020), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_80197FA8; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_80197FA8); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80182130; - extern s32 D_80182138; - extern s32 D_80182140; - extern s32 D_80182148; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80182130, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80182138, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80182140, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80182148, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80182150[])(void); - -void func_8016C14C(void *a0) { - D_80182150[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_80198024[]; -extern u8 D_8019802C[]; -extern u8 D_80197FDC[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_80198024, D_8019802C, D_80197FDC); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_80198038[]; - extern u8 D_801980F8; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_80198038[1] = 0xff; - D_80198038[2] = 0x10; - D_80198038[0] = 0x10; - D_80198038[6] = 0; - D_80198038[5] = 0; - D_80198038[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_80198038, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801980F8, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_80198038); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8015AE2C", func_8016C998); - - -extern void (*D_80182158[])(void); - -void func_8016CB84(void *a0) { - D_80182158[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801980F8[]; - - - Blk_8016CF04_8016CF04 *p = &D_801980F8[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80182174[])(void); - -void func_8016D19C(void *a0) { - D_80182174[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_8018217C[])(void); - -void func_8016D428(void *a0) { - D_8018217C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_801821E4[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_801821E4[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80182188; -extern u8 D_80182194; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80182188, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80182194); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80182218[])(void); - -void func_8016DEA4(void *a0) { - D_80182218[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80182220[])(void); - -void func_8016DF20(void *a0) { - D_80182220[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80182274[])(void); - -void func_8016E5B8(void *a0) { - D_80182274[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80182234[4]; - extern s32 D_80182254; - extern s32 D_8018225C; - extern s32 D_80182264; - extern s32 D_8018226C; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80182234[0], pp, &tmp); - RotTransSV(&D_80182234[1], &prim.v[1], &tmp); - RotTransSV(&D_80182234[2], &prim.v[2], &tmp); - RotTransSV(&D_80182234[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80182254; - prim.f1 = D_8018225C; - prim.f2 = D_80182264; - prim.f3 = D_8018226C; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_801822B4[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_801822B4[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_801822A8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_801822A8[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80182298[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80182298[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801822A8[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_801822A8[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_801822A8[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_801822C4; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_801822C4; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_8018233C[])(void); - -void func_8016F6E0(void *a0) { - D_8018233C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80182344[])(void); - -void func_8016F798(void *a0) { - D_80182344[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_8018234C[])(void); - -void func_8016F834(void *a0) { - D_8018234C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80182354[])(void); - -void func_8016F8E4(void *a0) { - D_80182354[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_8018235C[])(void); - -void func_8016F9C4(void *a0) { - D_8018235C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80182364[])(void); - -void func_8016FA84(void *a0) { - D_80182364[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80182370[])(void); - -void func_8016FB7C(void *a0) { - D_80182370[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_8018237C[])(void); - -void func_8016FC90(void *a0) { - D_8018237C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80182388[])(void); - -void func_8016FDB4(void *a0) { - D_80182388[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80182398[])(void); - -void func_8016FF30(void *a0) { - D_80182398[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_801823A8[])(void); - -void func_8016FFDC(void *a0) { - D_801823A8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_801823B0[])(void); - -void func_80170150(void *a0) { - D_801823B0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_801823B8[])(void); - -void func_80170240(void *a0) { - D_801823B8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_801823C0[])(void); - -void func_801702FC(void *a0) { - D_801823C0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_801823C8[])(void); - -void func_801703E0(void *a0) { - D_801823C8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_801823D0[])(void); - -void func_801704B0(void *a0) { - D_801823D0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_801823D8[])(void); - -void func_80170548(void *a0) { - D_801823D8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_801823E0[])(void); - -void func_801705F8(void *a0) { - D_801823E0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_801823E8[])(void); - -void func_801706AC(void *a0) { - D_801823E8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_801823F0[])(void); - -void func_80170748(void *a0) { - D_801823F0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_801823F8[])(void); - -void func_80170810(void *a0) { - D_801823F8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80182400[])(void); - -void func_80170AD8(void *a0) { - D_80182400[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80182408[])(void); - -void func_80170BD8(void *a0) { - D_80182408[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80182410[])(void); - -void func_80170C74(void *a0) { - D_80182410[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80182418[])(void); - -void func_80170D68(void *a0) { - D_80182418[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80182420[])(void); - -void func_80170E34(void *a0) { - D_80182420[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80182428[])(void); - -void func_80170EFC(void *a0) { - D_80182428[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80182430[])(void); - -void func_80170FB0(void *a0) { - D_80182430[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80182438[])(void); - -void func_80171064(void *a0) { - D_80182438[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80182440[])(void); - -void func_80171120(void *a0) { - D_80182440[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80182448[])(void); - -void func_801711C0(void *a0) { - D_80182448[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80182450[])(void); - -void func_80171260(void *a0) { - D_80182450[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80182458[])(void); - -void func_801714E4(void *a0) { - D_80182458[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8015AE2C", func_80172C50); - - -extern void (*D_8018249C[])(void); - -void func_80172CA0(void *a0) { - D_8018249C[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80182460; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80182460); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_023/ov_SC03_023_jr_8016AB6C.c b/src/ov_SC03_023/ov_SC03_023_jr_8016AB6C.c new file mode 100644 index 000000000..d9e12f6bc --- /dev/null +++ b/src/ov_SC03_023/ov_SC03_023_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80181420; +extern u8 D_80181390; +extern u8 D_8018136C; +extern u8 D_80181348; +extern u8 D_801813FC; +extern u8 D_801813D8; +extern u8 D_801813B4; +extern u8 D_80181324; +extern void func_80145934(void); +extern u8 D_801814B0; +extern u8 D_8018148C; +extern u8 D_80181468; +extern u8 D_80181444; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801808A8[]; +extern unsigned char D_801808D8[]; +extern unsigned char D_80180928[]; +extern unsigned char D_80180958[]; +extern unsigned char D_80180988[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801809D8[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80180AA0[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80180B28[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80180B30; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_80197A70; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_80197A74; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80180B60; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80180C08[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80180C2C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80180C1C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80180C40[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80180C4C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80180C5C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80180C74[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80180C64; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80180C88[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80180CA4[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80180C94; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80180CB8[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80180CCC[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80180CE0; +extern void (*D_80180D08[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80180CE8; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80180D54[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80180D58[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_801811BC[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_801811CC[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_80197AA8; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_801811F4[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801811D4; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_801811E4; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80181234[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018123C[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80181208; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80181248[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80181218; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_80197AB0; +extern s32 D_80197ABC; +extern s32 D_80197AC0; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80181284[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80181258[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_80197AB8; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_801814D4[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_801812F4[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80181578[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_801816CC[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_801814E8; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_801816D4[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_801814F8; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80181518; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_801816DC[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80181704[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80181710[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80181584[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_801817B4; +extern void func_8015D380(s32 a0); +extern unsigned char D_80180898[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_801817C8[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80181804[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_8018184C; +extern u16 D_8018184E; +extern u16 D_80181850; +extern s32 D_80181854; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_8018185C; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80181568; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_801818E0[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80181990[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_801819C0[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80181A24; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_80197AC8[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80181A48[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_80197B20[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80181A90[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80181A80; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_80197394[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80181A98[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80181AEC[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80181AB4; +extern s16 D_80181AE8; +extern s16 D_80181AE6; +extern s16 D_80181AE4; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80181AF8[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_80197B80; +extern u8 D_80197B81; +extern u8 D_80197B82; +extern u8 D_80197B83; +extern u8 D_80197B84; +extern u8 D_80197B85; +extern u8 D_80197B86; +extern u8 D_80197B87; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80181B08[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_80197BC0; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80181B4C[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80181BC8[]; +extern s32 D_80181BE8[]; +extern u8 D_80181C64[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80181C84[]; +extern u8 D_80181CA4[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80181D40[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80181DBC[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801973A4; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80181DC8[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80181DD0[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80181E98[])(void); +extern void func_80166618(void *a0); +extern void (*D_80181EA8[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80181EB8[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80181EC4[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80181E24[]; +extern u8 D_80181E38[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80181EDC[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80181EE4[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80181EEC[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80181EF4[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80181EFC[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80181F04[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80181F0C[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80181FC0[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80181FC8[])(void); +extern void func_80169F00(void *a0); +extern char D_80181F78[]; +extern char D_80181F38[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80182000[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_8018200C[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80182054[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80182014[]; + extern u8 D_80182024[]; + extern u8 D_80197E90[]; + extern u8 D_80197EB8[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80182014, D_80197E90) + 3; + func_8001CE28(obj, D_80197E90); + } else { + var_s3 = func_80024054(D_80182024, D_80197EB8) + 9; + func_8001CE28(obj, D_80197EB8); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_801820D0[])(void); + +void func_8016B4BC(void *a0) { + D_801820D0[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_80197EE0; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_80197EE0); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_801820C4[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_801820C4; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80182108[]; +extern unsigned short D_80182110[]; +extern unsigned short D_80182118[]; +extern unsigned char D_80197EE8[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_80197EE8 + param_2 * 0x40); + puVar3 = D_80182108[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80182110[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80182118[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_80197EE0; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_80197EE0, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80182120[])(void); + +void func_8016BBA4(void *a0) { + D_80182120[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_8019801C; + extern u8 D_8019801D; + extern u8 D_8019801E; + extern M2C_UNK D_80198020; + extern u8 D_80198021; + extern u8 D_80198022; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_8019801C) = 0x20; + D_8019801D = 0x20; + D_8019801E = 0; + (*(u8 *)&D_80198020) = 0xc0; + D_80198021 = 0xc0; + D_80198022 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_8019801C; +extern M2C_UNK D_80198020; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_8019801C, &D_80198020, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_8019801D; + extern u8 D_8019801E; + extern u8 D_80198021; + extern u8 D_80198022; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_8019801C); + if (*p1 != 0) *p1 -= 4; + if (D_8019801D != 0) D_8019801D -= 4; + if (D_8019801E != 0) D_8019801E -= 4; + p2 = &(*(u8 *)&D_80198020); + if (*p2 != 0) *p2 -= 4; + if (D_80198021 != 0) D_80198021 -= 4; + if (D_80198022 != 0) D_80198022 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_8019801C), &(*(int *)&D_80198020), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_80197FA8; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_80197FA8); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80182130; + extern s32 D_80182138; + extern s32 D_80182140; + extern s32 D_80182148; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80182130, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80182138, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80182140, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80182148, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80182150[])(void); + +void func_8016C14C(void *a0) { + D_80182150[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_80198024[]; +extern u8 D_8019802C[]; +extern u8 D_80197FDC[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_80198024, D_8019802C, D_80197FDC); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_80198038[]; + extern u8 D_801980F8; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_80198038[1] = 0xff; + D_80198038[2] = 0x10; + D_80198038[0] = 0x10; + D_80198038[6] = 0; + D_80198038[5] = 0; + D_80198038[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_80198038, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801980F8, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_80198038); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8016AB6C", func_8016C998); + + +extern void (*D_80182158[])(void); + +void func_8016CB84(void *a0) { + D_80182158[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801980F8[]; + + + Blk_8016CF04_8016CF04 *p = &D_801980F8[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80182174[])(void); + +void func_8016D19C(void *a0) { + D_80182174[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_8018217C[])(void); + +void func_8016D428(void *a0) { + D_8018217C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_801821E4[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_801821E4[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80182188; +extern u8 D_80182194; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80182188, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80182194); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80182218[])(void); + +void func_8016DEA4(void *a0) { + D_80182218[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80182220[])(void); + +void func_8016DF20(void *a0) { + D_80182220[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80182274[])(void); + +void func_8016E5B8(void *a0) { + D_80182274[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80182234[4]; + extern s32 D_80182254; + extern s32 D_8018225C; + extern s32 D_80182264; + extern s32 D_8018226C; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80182234[0], pp, &tmp); + RotTransSV(&D_80182234[1], &prim.v[1], &tmp); + RotTransSV(&D_80182234[2], &prim.v[2], &tmp); + RotTransSV(&D_80182234[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80182254; + prim.f1 = D_8018225C; + prim.f2 = D_80182264; + prim.f3 = D_8018226C; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_801822B4[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_801822B4[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_801822A8[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_801822A8[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80182298[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80182298[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801822A8[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_801822A8[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_801822A8[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_801822C4; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_801822C4; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_8018233C[])(void); + +void func_8016F6E0(void *a0) { + D_8018233C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80182344[])(void); + +void func_8016F798(void *a0) { + D_80182344[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_8018234C[])(void); + +void func_8016F834(void *a0) { + D_8018234C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80182354[])(void); + +void func_8016F8E4(void *a0) { + D_80182354[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_8018235C[])(void); + +void func_8016F9C4(void *a0) { + D_8018235C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80182364[])(void); + +void func_8016FA84(void *a0) { + D_80182364[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80182370[])(void); + +void func_8016FB7C(void *a0) { + D_80182370[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_8018237C[])(void); + +void func_8016FC90(void *a0) { + D_8018237C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80182388[])(void); + +void func_8016FDB4(void *a0) { + D_80182388[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80182398[])(void); + +void func_8016FF30(void *a0) { + D_80182398[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_801823A8[])(void); + +void func_8016FFDC(void *a0) { + D_801823A8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_801823B0[])(void); + +void func_80170150(void *a0) { + D_801823B0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_801823B8[])(void); + +void func_80170240(void *a0) { + D_801823B8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_801823C0[])(void); + +void func_801702FC(void *a0) { + D_801823C0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_801823C8[])(void); + +void func_801703E0(void *a0) { + D_801823C8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_801823D0[])(void); + +void func_801704B0(void *a0) { + D_801823D0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_801823D8[])(void); + +void func_80170548(void *a0) { + D_801823D8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_801823E0[])(void); + +void func_801705F8(void *a0) { + D_801823E0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_801823E8[])(void); + +void func_801706AC(void *a0) { + D_801823E8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_801823F0[])(void); + +void func_80170748(void *a0) { + D_801823F0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_801823F8[])(void); + +void func_80170810(void *a0) { + D_801823F8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80182400[])(void); + +void func_80170AD8(void *a0) { + D_80182400[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80182408[])(void); + +void func_80170BD8(void *a0) { + D_80182408[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80182410[])(void); + +void func_80170C74(void *a0) { + D_80182410[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80182418[])(void); + +void func_80170D68(void *a0) { + D_80182418[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80182420[])(void); + +void func_80170E34(void *a0) { + D_80182420[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80182428[])(void); + +void func_80170EFC(void *a0) { + D_80182428[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80182430[])(void); + +void func_80170FB0(void *a0) { + D_80182430[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80182438[])(void); + +void func_80171064(void *a0) { + D_80182438[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80182440[])(void); + +void func_80171120(void *a0) { + D_80182440[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80182448[])(void); + +void func_801711C0(void *a0) { + D_80182448[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80182450[])(void); + +void func_80171260(void *a0) { + D_80182450[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80182458[])(void); + +void func_801714E4(void *a0) { + D_80182458[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8016AB6C", func_80172C50); + + +extern void (*D_8018249C[])(void); + +void func_80172CA0(void *a0) { + D_8018249C[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80182460; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80182460); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_024/ov_SC03_024_jr_8015AE2C.c b/src/ov_SC03_024/ov_SC03_024_jr_8015AE2C.c index 53083edb9..da0c9069d 100644 --- a/src/ov_SC03_024/ov_SC03_024_jr_8015AE2C.c +++ b/src/ov_SC03_024/ov_SC03_024_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_8018A078[])(void); void func_8016AB30(void *a0) { D_8018A078[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_8018A0F4[])(void); - -void func_8016B4BC(void *a0) { - D_8018A0F4[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801C0478; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801C0478); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_8018A0E8[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_8018A0E8; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_8018A12C[]; -extern unsigned short D_8018A134[]; -extern unsigned short D_8018A13C[]; -extern unsigned char D_801C0480[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801C0480 + param_2 * 0x40); - puVar3 = D_8018A12C[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_8018A134[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_8018A13C[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801C0478; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801C0478, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_8018A144[])(void); - -void func_8016BBA4(void *a0) { - D_8018A144[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801C05B4; - extern u8 D_801C05B5; - extern u8 D_801C05B6; - extern M2C_UNK D_801C05B8; - extern u8 D_801C05B9; - extern u8 D_801C05BA; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801C05B4) = 0x20; - D_801C05B5 = 0x20; - D_801C05B6 = 0; - (*(u8 *)&D_801C05B8) = 0xc0; - D_801C05B9 = 0xc0; - D_801C05BA = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801C05B4; -extern M2C_UNK D_801C05B8; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801C05B4, &D_801C05B8, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801C05B5; - extern u8 D_801C05B6; - extern u8 D_801C05B9; - extern u8 D_801C05BA; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801C05B4); - if (*p1 != 0) *p1 -= 4; - if (D_801C05B5 != 0) D_801C05B5 -= 4; - if (D_801C05B6 != 0) D_801C05B6 -= 4; - p2 = &(*(u8 *)&D_801C05B8); - if (*p2 != 0) *p2 -= 4; - if (D_801C05B9 != 0) D_801C05B9 -= 4; - if (D_801C05BA != 0) D_801C05BA -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801C05B4), &(*(int *)&D_801C05B8), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801C0540; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801C0540); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_8018A154; - extern s32 D_8018A15C; - extern s32 D_8018A164; - extern s32 D_8018A16C; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_8018A154, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_8018A15C, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_8018A164, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_8018A16C, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_8018A174[])(void); - -void func_8016C14C(void *a0) { - D_8018A174[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801C05BC[]; -extern u8 D_801C05C4[]; -extern u8 D_801C0574[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801C05BC, D_801C05C4, D_801C0574); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801C05D0[]; - extern u8 D_801C0690; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801C05D0[1] = 0xff; - D_801C05D0[2] = 0x10; - D_801C05D0[0] = 0x10; - D_801C05D0[6] = 0; - D_801C05D0[5] = 0; - D_801C05D0[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801C05D0, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801C0690, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801C05D0); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8015AE2C", func_8016C998); - - -extern void (*D_8018A17C[])(void); - -void func_8016CB84(void *a0) { - D_8018A17C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801C0690[]; - - - Blk_8016CF04_8016CF04 *p = &D_801C0690[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_8018A198[])(void); - -void func_8016D19C(void *a0) { - D_8018A198[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_8018A1A0[])(void); - -void func_8016D428(void *a0) { - D_8018A1A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_8018A208[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_8018A208[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_8018A1AC; -extern u8 D_8018A1B8; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018A1AC, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018A1B8); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8015AE2C", func_8016DC20); - - -extern void (*D_8018A23C[])(void); - -void func_8016DEA4(void *a0) { - D_8018A23C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_8018A244[])(void); - -void func_8016DF20(void *a0) { - D_8018A244[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_8018A298[])(void); - -void func_8016E5B8(void *a0) { - D_8018A298[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_8018A258[4]; - extern s32 D_8018A278; - extern s32 D_8018A280; - extern s32 D_8018A288; - extern s32 D_8018A290; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_8018A258[0], pp, &tmp); - RotTransSV(&D_8018A258[1], &prim.v[1], &tmp); - RotTransSV(&D_8018A258[2], &prim.v[2], &tmp); - RotTransSV(&D_8018A258[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_8018A278; - prim.f1 = D_8018A280; - prim.f2 = D_8018A288; - prim.f3 = D_8018A290; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_8018A2D8[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_8018A2D8[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_8018A2CC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_8018A2CC[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_8018A2BC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_8018A2BC[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018A2CC[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_8018A2CC[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_8018A2CC[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_8018A2E8; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_8018A2E8; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_8018A360[])(void); - -void func_8016F6E0(void *a0) { - D_8018A360[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_8018A368[])(void); - -void func_8016F798(void *a0) { - D_8018A368[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_8018A370[])(void); - -void func_8016F834(void *a0) { - D_8018A370[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_8018A378[])(void); - -void func_8016F8E4(void *a0) { - D_8018A378[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_8018A380[])(void); - -void func_8016F9C4(void *a0) { - D_8018A380[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_8018A388[])(void); - -void func_8016FA84(void *a0) { - D_8018A388[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_8018A394[])(void); - -void func_8016FB7C(void *a0) { - D_8018A394[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_8018A3A0[])(void); - -void func_8016FC90(void *a0) { - D_8018A3A0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_8018A3AC[])(void); - -void func_8016FDB4(void *a0) { - D_8018A3AC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_8018A3BC[])(void); - -void func_8016FF30(void *a0) { - D_8018A3BC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_8018A3CC[])(void); - -void func_8016FFDC(void *a0) { - D_8018A3CC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_8018A3D4[])(void); - -void func_80170150(void *a0) { - D_8018A3D4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_8018A3DC[])(void); - -void func_80170240(void *a0) { - D_8018A3DC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_8018A3E4[])(void); - -void func_801702FC(void *a0) { - D_8018A3E4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_8018A3EC[])(void); - -void func_801703E0(void *a0) { - D_8018A3EC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_8018A3F4[])(void); - -void func_801704B0(void *a0) { - D_8018A3F4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_8018A3FC[])(void); - -void func_80170548(void *a0) { - D_8018A3FC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_8018A404[])(void); - -void func_801705F8(void *a0) { - D_8018A404[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_8018A40C[])(void); - -void func_801706AC(void *a0) { - D_8018A40C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_8018A414[])(void); - -void func_80170748(void *a0) { - D_8018A414[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_8018A41C[])(void); - -void func_80170810(void *a0) { - D_8018A41C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_8018A424[])(void); - -void func_80170AD8(void *a0) { - D_8018A424[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_8018A42C[])(void); - -void func_80170BD8(void *a0) { - D_8018A42C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_8018A434[])(void); - -void func_80170C74(void *a0) { - D_8018A434[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8015AE2C", func_80170CF0); - - -extern void (*D_8018A43C[])(void); - -void func_80170D68(void *a0) { - D_8018A43C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_8018A444[])(void); - -void func_80170E34(void *a0) { - D_8018A444[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_8018A44C[])(void); - -void func_80170EFC(void *a0) { - D_8018A44C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_8018A454[])(void); - -void func_80170FB0(void *a0) { - D_8018A454[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_8018A45C[])(void); - -void func_80171064(void *a0) { - D_8018A45C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_8018A464[])(void); - -void func_80171120(void *a0) { - D_8018A464[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_8018A46C[])(void); - -void func_801711C0(void *a0) { - D_8018A46C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_8018A474[])(void); - -void func_80171260(void *a0) { - D_8018A474[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_8018A47C[])(void); - -void func_801714E4(void *a0) { - D_8018A47C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8015AE2C", func_80172C50); - - -extern void (*D_8018A4C0[])(void); - -void func_80172CA0(void *a0) { - D_8018A4C0[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_8018A484; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_8018A484); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_024/ov_SC03_024_jr_8016AB6C.c b/src/ov_SC03_024/ov_SC03_024_jr_8016AB6C.c new file mode 100644 index 000000000..c9b214194 --- /dev/null +++ b/src/ov_SC03_024/ov_SC03_024_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80189444; +extern u8 D_801893B4; +extern u8 D_80189390; +extern u8 D_8018936C; +extern u8 D_80189420; +extern u8 D_801893FC; +extern u8 D_801893D8; +extern u8 D_80189348; +extern void func_80145934(void); +extern u8 D_801894D4; +extern u8 D_801894B0; +extern u8 D_8018948C; +extern u8 D_80189468; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801888CC[]; +extern unsigned char D_801888FC[]; +extern unsigned char D_8018894C[]; +extern unsigned char D_8018897C[]; +extern unsigned char D_801889AC[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801889FC[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80188AC4[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80188B4C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80188B54; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801C0008; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801C000C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80188B84; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80188C2C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80188C50[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80188C40; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80188C64[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80188C70[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80188C80[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80188C98[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80188C88; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80188CAC[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80188CC8[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80188CB8; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80188CDC[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80188CF0[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80188D04; +extern void (*D_80188D2C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80188D0C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80188D78[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80188D7C[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_801891E0[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_801891F0[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801C0040; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80189218[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801891F8; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80189208; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80189258[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80189260[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018922C; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018926C[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018923C; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801C0048; +extern s32 D_801C0054; +extern s32 D_801C0058; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801892A8[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018927C[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801C0050; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_801894F8[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80189318[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018959C[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_801896F0[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018950C; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_801896F8[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018951C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018953C; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80189700[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80189728[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80189734[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_801895A8[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_801897D8; +extern void func_8015D380(s32 a0); +extern unsigned char D_801888BC[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_801897EC[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80189828[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80189870; +extern u16 D_80189872; +extern u16 D_80189874; +extern s32 D_80189878; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80189880; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_8018958C; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80189904[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_801899B4[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_801899E4[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80189A48; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801C0060[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80189A6C[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801C00B8[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80189AB4[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80189AA4; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801BF81C[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80189ABC[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80189B10[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80189AD8; +extern s16 D_80189B0C; +extern s16 D_80189B0A; +extern s16 D_80189B08; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80189B1C[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801C0118; +extern u8 D_801C0119; +extern u8 D_801C011A; +extern u8 D_801C011B; +extern u8 D_801C011C; +extern u8 D_801C011D; +extern u8 D_801C011E; +extern u8 D_801C011F; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80189B2C[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801C0158; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80189B70[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80189BEC[]; +extern s32 D_80189C0C[]; +extern u8 D_80189C88[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80189CA8[]; +extern u8 D_80189CC8[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80189D64[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80189DE0[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801BF82C; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80189DEC[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80189DF4[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80189EBC[])(void); +extern void func_80166618(void *a0); +extern void (*D_80189ECC[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80189EDC[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80189EE8[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80189E48[]; +extern u8 D_80189E5C[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80189F00[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80189F08[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80189F10[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80189F18[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80189F20[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80189F28[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80189F30[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80189FE4[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80189FEC[])(void); +extern void func_80169F00(void *a0); +extern char D_80189F9C[]; +extern char D_80189F5C[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_8018A024[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_8018A030[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_8018A078[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_8018A038[]; + extern u8 D_8018A048[]; + extern u8 D_801C0428[]; + extern u8 D_801C0450[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_8018A038, D_801C0428) + 3; + func_8001CE28(obj, D_801C0428); + } else { + var_s3 = func_80024054(D_8018A048, D_801C0450) + 9; + func_8001CE28(obj, D_801C0450); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_8018A0F4[])(void); + +void func_8016B4BC(void *a0) { + D_8018A0F4[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801C0478; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801C0478); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_8018A0E8[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_8018A0E8; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_8018A12C[]; +extern unsigned short D_8018A134[]; +extern unsigned short D_8018A13C[]; +extern unsigned char D_801C0480[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801C0480 + param_2 * 0x40); + puVar3 = D_8018A12C[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_8018A134[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_8018A13C[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801C0478; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801C0478, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_8018A144[])(void); + +void func_8016BBA4(void *a0) { + D_8018A144[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801C05B4; + extern u8 D_801C05B5; + extern u8 D_801C05B6; + extern M2C_UNK D_801C05B8; + extern u8 D_801C05B9; + extern u8 D_801C05BA; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801C05B4) = 0x20; + D_801C05B5 = 0x20; + D_801C05B6 = 0; + (*(u8 *)&D_801C05B8) = 0xc0; + D_801C05B9 = 0xc0; + D_801C05BA = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801C05B4; +extern M2C_UNK D_801C05B8; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801C05B4, &D_801C05B8, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801C05B5; + extern u8 D_801C05B6; + extern u8 D_801C05B9; + extern u8 D_801C05BA; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801C05B4); + if (*p1 != 0) *p1 -= 4; + if (D_801C05B5 != 0) D_801C05B5 -= 4; + if (D_801C05B6 != 0) D_801C05B6 -= 4; + p2 = &(*(u8 *)&D_801C05B8); + if (*p2 != 0) *p2 -= 4; + if (D_801C05B9 != 0) D_801C05B9 -= 4; + if (D_801C05BA != 0) D_801C05BA -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801C05B4), &(*(int *)&D_801C05B8), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801C0540; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801C0540); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_8018A154; + extern s32 D_8018A15C; + extern s32 D_8018A164; + extern s32 D_8018A16C; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_8018A154, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_8018A15C, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_8018A164, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_8018A16C, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_8018A174[])(void); + +void func_8016C14C(void *a0) { + D_8018A174[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801C05BC[]; +extern u8 D_801C05C4[]; +extern u8 D_801C0574[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801C05BC, D_801C05C4, D_801C0574); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801C05D0[]; + extern u8 D_801C0690; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801C05D0[1] = 0xff; + D_801C05D0[2] = 0x10; + D_801C05D0[0] = 0x10; + D_801C05D0[6] = 0; + D_801C05D0[5] = 0; + D_801C05D0[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801C05D0, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801C0690, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801C05D0); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8016AB6C", func_8016C998); + + +extern void (*D_8018A17C[])(void); + +void func_8016CB84(void *a0) { + D_8018A17C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801C0690[]; + + + Blk_8016CF04_8016CF04 *p = &D_801C0690[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_8018A198[])(void); + +void func_8016D19C(void *a0) { + D_8018A198[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_8018A1A0[])(void); + +void func_8016D428(void *a0) { + D_8018A1A0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018A208[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_8018A208[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_8018A1AC; +extern u8 D_8018A1B8; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018A1AC, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018A1B8); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8016AB6C", func_8016DC20); + + +extern void (*D_8018A23C[])(void); + +void func_8016DEA4(void *a0) { + D_8018A23C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_8018A244[])(void); + +void func_8016DF20(void *a0) { + D_8018A244[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_8018A298[])(void); + +void func_8016E5B8(void *a0) { + D_8018A298[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_8018A258[4]; + extern s32 D_8018A278; + extern s32 D_8018A280; + extern s32 D_8018A288; + extern s32 D_8018A290; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_8018A258[0], pp, &tmp); + RotTransSV(&D_8018A258[1], &prim.v[1], &tmp); + RotTransSV(&D_8018A258[2], &prim.v[2], &tmp); + RotTransSV(&D_8018A258[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_8018A278; + prim.f1 = D_8018A280; + prim.f2 = D_8018A288; + prim.f3 = D_8018A290; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_8018A2D8[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_8018A2D8[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_8018A2CC[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_8018A2CC[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_8018A2BC[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_8018A2BC[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018A2CC[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_8018A2CC[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_8018A2CC[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_8018A2E8; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_8018A2E8; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_8018A360[])(void); + +void func_8016F6E0(void *a0) { + D_8018A360[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_8018A368[])(void); + +void func_8016F798(void *a0) { + D_8018A368[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_8018A370[])(void); + +void func_8016F834(void *a0) { + D_8018A370[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_8018A378[])(void); + +void func_8016F8E4(void *a0) { + D_8018A378[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_8018A380[])(void); + +void func_8016F9C4(void *a0) { + D_8018A380[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_8018A388[])(void); + +void func_8016FA84(void *a0) { + D_8018A388[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_8018A394[])(void); + +void func_8016FB7C(void *a0) { + D_8018A394[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_8018A3A0[])(void); + +void func_8016FC90(void *a0) { + D_8018A3A0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_8018A3AC[])(void); + +void func_8016FDB4(void *a0) { + D_8018A3AC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_8018A3BC[])(void); + +void func_8016FF30(void *a0) { + D_8018A3BC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_8018A3CC[])(void); + +void func_8016FFDC(void *a0) { + D_8018A3CC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_8018A3D4[])(void); + +void func_80170150(void *a0) { + D_8018A3D4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_8018A3DC[])(void); + +void func_80170240(void *a0) { + D_8018A3DC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_8018A3E4[])(void); + +void func_801702FC(void *a0) { + D_8018A3E4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_8018A3EC[])(void); + +void func_801703E0(void *a0) { + D_8018A3EC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_8018A3F4[])(void); + +void func_801704B0(void *a0) { + D_8018A3F4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_8018A3FC[])(void); + +void func_80170548(void *a0) { + D_8018A3FC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_8018A404[])(void); + +void func_801705F8(void *a0) { + D_8018A404[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_8018A40C[])(void); + +void func_801706AC(void *a0) { + D_8018A40C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_8018A414[])(void); + +void func_80170748(void *a0) { + D_8018A414[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_8018A41C[])(void); + +void func_80170810(void *a0) { + D_8018A41C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_8018A424[])(void); + +void func_80170AD8(void *a0) { + D_8018A424[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_8018A42C[])(void); + +void func_80170BD8(void *a0) { + D_8018A42C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_8018A434[])(void); + +void func_80170C74(void *a0) { + D_8018A434[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8016AB6C", func_80170CF0); + + +extern void (*D_8018A43C[])(void); + +void func_80170D68(void *a0) { + D_8018A43C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_8018A444[])(void); + +void func_80170E34(void *a0) { + D_8018A444[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_8018A44C[])(void); + +void func_80170EFC(void *a0) { + D_8018A44C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_8018A454[])(void); + +void func_80170FB0(void *a0) { + D_8018A454[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_8018A45C[])(void); + +void func_80171064(void *a0) { + D_8018A45C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_8018A464[])(void); + +void func_80171120(void *a0) { + D_8018A464[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_8018A46C[])(void); + +void func_801711C0(void *a0) { + D_8018A46C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_8018A474[])(void); + +void func_80171260(void *a0) { + D_8018A474[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_8018A47C[])(void); + +void func_801714E4(void *a0) { + D_8018A47C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8016AB6C", func_80172C50); + + +extern void (*D_8018A4C0[])(void); + +void func_80172CA0(void *a0) { + D_8018A4C0[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_8018A484; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_8018A484); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_028/ov_SC03_028_jr_8015AE2C.c b/src/ov_SC03_028/ov_SC03_028_jr_8015AE2C.c index 1eee30a9d..278c44940 100644 --- a/src/ov_SC03_028/ov_SC03_028_jr_8015AE2C.c +++ b/src/ov_SC03_028/ov_SC03_028_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_8018EB44[])(void); void func_8016AB30(void *a0) { D_8018EB44[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_8018EBC0[])(void); - -void func_8016B4BC(void *a0) { - D_8018EBC0[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801EA7B0; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801EA7B0); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_8018EBB4[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_8018EBB4; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_8018EBF8[]; -extern unsigned short D_8018EC00[]; -extern unsigned short D_8018EC08[]; -extern unsigned char D_801EA7B8[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801EA7B8 + param_2 * 0x40); - puVar3 = D_8018EBF8[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_8018EC00[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_8018EC08[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801EA7B0; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801EA7B0, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_8018EC10[])(void); - -void func_8016BBA4(void *a0) { - D_8018EC10[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801EA8EC; - extern u8 D_801EA8ED; - extern u8 D_801EA8EE; - extern M2C_UNK D_801EA8F0; - extern u8 D_801EA8F1; - extern u8 D_801EA8F2; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801EA8EC) = 0x20; - D_801EA8ED = 0x20; - D_801EA8EE = 0; - (*(u8 *)&D_801EA8F0) = 0xc0; - D_801EA8F1 = 0xc0; - D_801EA8F2 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801EA8EC; -extern M2C_UNK D_801EA8F0; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801EA8EC, &D_801EA8F0, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801EA8ED; - extern u8 D_801EA8EE; - extern u8 D_801EA8F1; - extern u8 D_801EA8F2; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801EA8EC); - if (*p1 != 0) *p1 -= 4; - if (D_801EA8ED != 0) D_801EA8ED -= 4; - if (D_801EA8EE != 0) D_801EA8EE -= 4; - p2 = &(*(u8 *)&D_801EA8F0); - if (*p2 != 0) *p2 -= 4; - if (D_801EA8F1 != 0) D_801EA8F1 -= 4; - if (D_801EA8F2 != 0) D_801EA8F2 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801EA8EC), &(*(int *)&D_801EA8F0), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801EA878; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801EA878); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_8018EC20; - extern s32 D_8018EC28; - extern s32 D_8018EC30; - extern s32 D_8018EC38; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_8018EC20, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_8018EC28, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_8018EC30, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_8018EC38, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_8018EC40[])(void); - -void func_8016C14C(void *a0) { - D_8018EC40[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801EA8F4[]; -extern u8 D_801EA8FC[]; -extern u8 D_801EA8AC[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801EA8F4, D_801EA8FC, D_801EA8AC); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801EA908[]; - extern u8 D_801EA9C8; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801EA908[1] = 0xff; - D_801EA908[2] = 0x10; - D_801EA908[0] = 0x10; - D_801EA908[6] = 0; - D_801EA908[5] = 0; - D_801EA908[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801EA908, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801EA9C8, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801EA908); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8015AE2C", func_8016C998); - - -extern void (*D_8018EC48[])(void); - -void func_8016CB84(void *a0) { - D_8018EC48[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801EA9C8[]; - - - Blk_8016CF04_8016CF04 *p = &D_801EA9C8[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_8018EC64[])(void); - -void func_8016D19C(void *a0) { - D_8018EC64[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_8018EC6C[])(void); - -void func_8016D428(void *a0) { - D_8018EC6C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_8018ECD4[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_8018ECD4[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_8018EC78; -extern u8 D_8018EC84; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018EC78, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018EC84); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8015AE2C", func_8016DC20); - - -extern void (*D_8018ED08[])(void); - -void func_8016DEA4(void *a0) { - D_8018ED08[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_8018ED10[])(void); - -void func_8016DF20(void *a0) { - D_8018ED10[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_8018ED64[])(void); - -void func_8016E5B8(void *a0) { - D_8018ED64[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_8018ED24[4]; - extern s32 D_8018ED44; - extern s32 D_8018ED4C; - extern s32 D_8018ED54; - extern s32 D_8018ED5C; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_8018ED24[0], pp, &tmp); - RotTransSV(&D_8018ED24[1], &prim.v[1], &tmp); - RotTransSV(&D_8018ED24[2], &prim.v[2], &tmp); - RotTransSV(&D_8018ED24[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_8018ED44; - prim.f1 = D_8018ED4C; - prim.f2 = D_8018ED54; - prim.f3 = D_8018ED5C; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_8018EDA4[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_8018EDA4[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_8018ED98[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_8018ED98[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_8018ED88[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_8018ED88[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018ED98[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_8018ED98[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_8018ED98[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_8018EDB4; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_8018EDB4; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_8018EE2C[])(void); - -void func_8016F6E0(void *a0) { - D_8018EE2C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_8018EE34[])(void); - -void func_8016F798(void *a0) { - D_8018EE34[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_8018EE3C[])(void); - -void func_8016F834(void *a0) { - D_8018EE3C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_8018EE44[])(void); - -void func_8016F8E4(void *a0) { - D_8018EE44[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_8018EE4C[])(void); - -void func_8016F9C4(void *a0) { - D_8018EE4C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_8018EE54[])(void); - -void func_8016FA84(void *a0) { - D_8018EE54[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_8018EE60[])(void); - -void func_8016FB7C(void *a0) { - D_8018EE60[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_8018EE6C[])(void); - -void func_8016FC90(void *a0) { - D_8018EE6C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_8018EE78[])(void); - -void func_8016FDB4(void *a0) { - D_8018EE78[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_8018EE88[])(void); - -void func_8016FF30(void *a0) { - D_8018EE88[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_8018EE98[])(void); - -void func_8016FFDC(void *a0) { - D_8018EE98[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_8018EEA0[])(void); - -void func_80170150(void *a0) { - D_8018EEA0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_8018EEA8[])(void); - -void func_80170240(void *a0) { - D_8018EEA8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_8018EEB0[])(void); - -void func_801702FC(void *a0) { - D_8018EEB0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_8018EEB8[])(void); - -void func_801703E0(void *a0) { - D_8018EEB8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_8018EEC0[])(void); - -void func_801704B0(void *a0) { - D_8018EEC0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_8018EEC8[])(void); - -void func_80170548(void *a0) { - D_8018EEC8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_8018EED0[])(void); - -void func_801705F8(void *a0) { - D_8018EED0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_8018EED8[])(void); - -void func_801706AC(void *a0) { - D_8018EED8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_8018EEE0[])(void); - -void func_80170748(void *a0) { - D_8018EEE0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_8018EEE8[])(void); - -void func_80170810(void *a0) { - D_8018EEE8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_8018EEF0[])(void); - -void func_80170AD8(void *a0) { - D_8018EEF0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_8018EEF8[])(void); - -void func_80170BD8(void *a0) { - D_8018EEF8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_8018EF00[])(void); - -void func_80170C74(void *a0) { - D_8018EF00[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8015AE2C", func_80170CF0); - - -extern void (*D_8018EF08[])(void); - -void func_80170D68(void *a0) { - D_8018EF08[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_8018EF10[])(void); - -void func_80170E34(void *a0) { - D_8018EF10[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_8018EF18[])(void); - -void func_80170EFC(void *a0) { - D_8018EF18[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_8018EF20[])(void); - -void func_80170FB0(void *a0) { - D_8018EF20[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_8018EF28[])(void); - -void func_80171064(void *a0) { - D_8018EF28[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_8018EF30[])(void); - -void func_80171120(void *a0) { - D_8018EF30[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_8018EF38[])(void); - -void func_801711C0(void *a0) { - D_8018EF38[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_8018EF40[])(void); - -void func_80171260(void *a0) { - D_8018EF40[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_8018EF48[])(void); - -void func_801714E4(void *a0) { - D_8018EF48[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8015AE2C", func_80172C50); - - -extern void (*D_8018EF8C[])(void); - -void func_80172CA0(void *a0) { - D_8018EF8C[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_8018EF50; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_8018EF50); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_028/ov_SC03_028_jr_8016AB6C.c b/src/ov_SC03_028/ov_SC03_028_jr_8016AB6C.c new file mode 100644 index 000000000..0b528597a --- /dev/null +++ b/src/ov_SC03_028/ov_SC03_028_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018DF10; +extern u8 D_8018DE80; +extern u8 D_8018DE5C; +extern u8 D_8018DE38; +extern u8 D_8018DEEC; +extern u8 D_8018DEC8; +extern u8 D_8018DEA4; +extern u8 D_8018DE14; +extern void func_80145934(void); +extern u8 D_8018DFA0; +extern u8 D_8018DF7C; +extern u8 D_8018DF58; +extern u8 D_8018DF34; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018D398[]; +extern unsigned char D_8018D3C8[]; +extern unsigned char D_8018D418[]; +extern unsigned char D_8018D448[]; +extern unsigned char D_8018D478[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018D4C8[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018D590[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018D618[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018D620; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801EA340; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801EA344; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018D650; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018D6F8[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018D71C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018D70C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018D730[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018D73C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018D74C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018D764[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018D754; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018D778[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018D794[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018D784; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018D7A8[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018D7BC[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018D7D0; +extern void (*D_8018D7F8[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018D7D8; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018D844[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018D848[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018DCAC[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018DCBC[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801EA378; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018DCE4[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018DCC4; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018DCD4; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018DD24[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018DD2C[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018DCF8; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018DD38[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018DD08; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801EA380; +extern s32 D_801EA38C; +extern s32 D_801EA390; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018DD74[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018DD48[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801EA388; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018DFC4[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018DDE4[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018E068[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018E1BC[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018DFD8; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018E1C4[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018DFE8; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018E008; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_8018E1CC[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_8018E1F4[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_8018E200[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_8018E074[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_8018E2A4; +extern void func_8015D380(s32 a0); +extern unsigned char D_8018D388[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_8018E2B8[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_8018E2F4[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_8018E33C; +extern u16 D_8018E33E; +extern u16 D_8018E340; +extern s32 D_8018E344; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_8018E34C; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_8018E058; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_8018E3D0[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_8018E480[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_8018E4B0[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_8018E514; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801EA398[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_8018E538[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801EA3F0[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_8018E580[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_8018E570; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801E99A4[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_8018E588[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_8018E5DC[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_8018E5A4; +extern s16 D_8018E5D8; +extern s16 D_8018E5D6; +extern s16 D_8018E5D4; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_8018E5E8[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801EA450; +extern u8 D_801EA451; +extern u8 D_801EA452; +extern u8 D_801EA453; +extern u8 D_801EA454; +extern u8 D_801EA455; +extern u8 D_801EA456; +extern u8 D_801EA457; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_8018E5F8[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801EA490; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_8018E63C[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_8018E6B8[]; +extern s32 D_8018E6D8[]; +extern u8 D_8018E754[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_8018E774[]; +extern u8 D_8018E794[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_8018E830[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_8018E8AC[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801E99B4; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_8018E8B8[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_8018E8C0[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_8018E988[])(void); +extern void func_80166618(void *a0); +extern void (*D_8018E998[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_8018E9A8[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_8018E9B4[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_8018E914[]; +extern u8 D_8018E928[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_8018E9CC[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_8018E9D4[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_8018E9DC[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_8018E9E4[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_8018E9EC[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_8018E9F4[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_8018E9FC[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_8018EAB0[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_8018EAB8[])(void); +extern void func_80169F00(void *a0); +extern char D_8018EA68[]; +extern char D_8018EA28[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_8018EAF0[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_8018EAFC[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_8018EB44[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_8018EB04[]; + extern u8 D_8018EB14[]; + extern u8 D_801EA760[]; + extern u8 D_801EA788[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_8018EB04, D_801EA760) + 3; + func_8001CE28(obj, D_801EA760); + } else { + var_s3 = func_80024054(D_8018EB14, D_801EA788) + 9; + func_8001CE28(obj, D_801EA788); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_8018EBC0[])(void); + +void func_8016B4BC(void *a0) { + D_8018EBC0[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801EA7B0; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801EA7B0); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_8018EBB4[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_8018EBB4; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_8018EBF8[]; +extern unsigned short D_8018EC00[]; +extern unsigned short D_8018EC08[]; +extern unsigned char D_801EA7B8[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801EA7B8 + param_2 * 0x40); + puVar3 = D_8018EBF8[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_8018EC00[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_8018EC08[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801EA7B0; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801EA7B0, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_8018EC10[])(void); + +void func_8016BBA4(void *a0) { + D_8018EC10[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801EA8EC; + extern u8 D_801EA8ED; + extern u8 D_801EA8EE; + extern M2C_UNK D_801EA8F0; + extern u8 D_801EA8F1; + extern u8 D_801EA8F2; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801EA8EC) = 0x20; + D_801EA8ED = 0x20; + D_801EA8EE = 0; + (*(u8 *)&D_801EA8F0) = 0xc0; + D_801EA8F1 = 0xc0; + D_801EA8F2 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801EA8EC; +extern M2C_UNK D_801EA8F0; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801EA8EC, &D_801EA8F0, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801EA8ED; + extern u8 D_801EA8EE; + extern u8 D_801EA8F1; + extern u8 D_801EA8F2; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801EA8EC); + if (*p1 != 0) *p1 -= 4; + if (D_801EA8ED != 0) D_801EA8ED -= 4; + if (D_801EA8EE != 0) D_801EA8EE -= 4; + p2 = &(*(u8 *)&D_801EA8F0); + if (*p2 != 0) *p2 -= 4; + if (D_801EA8F1 != 0) D_801EA8F1 -= 4; + if (D_801EA8F2 != 0) D_801EA8F2 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801EA8EC), &(*(int *)&D_801EA8F0), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801EA878; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801EA878); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_8018EC20; + extern s32 D_8018EC28; + extern s32 D_8018EC30; + extern s32 D_8018EC38; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_8018EC20, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_8018EC28, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_8018EC30, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_8018EC38, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_8018EC40[])(void); + +void func_8016C14C(void *a0) { + D_8018EC40[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801EA8F4[]; +extern u8 D_801EA8FC[]; +extern u8 D_801EA8AC[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801EA8F4, D_801EA8FC, D_801EA8AC); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801EA908[]; + extern u8 D_801EA9C8; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801EA908[1] = 0xff; + D_801EA908[2] = 0x10; + D_801EA908[0] = 0x10; + D_801EA908[6] = 0; + D_801EA908[5] = 0; + D_801EA908[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801EA908, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801EA9C8, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801EA908); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8016AB6C", func_8016C998); + + +extern void (*D_8018EC48[])(void); + +void func_8016CB84(void *a0) { + D_8018EC48[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801EA9C8[]; + + + Blk_8016CF04_8016CF04 *p = &D_801EA9C8[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_8018EC64[])(void); + +void func_8016D19C(void *a0) { + D_8018EC64[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_8018EC6C[])(void); + +void func_8016D428(void *a0) { + D_8018EC6C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018ECD4[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_8018ECD4[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_8018EC78; +extern u8 D_8018EC84; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018EC78, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018EC84); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8016AB6C", func_8016DC20); + + +extern void (*D_8018ED08[])(void); + +void func_8016DEA4(void *a0) { + D_8018ED08[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_8018ED10[])(void); + +void func_8016DF20(void *a0) { + D_8018ED10[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_8018ED64[])(void); + +void func_8016E5B8(void *a0) { + D_8018ED64[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_8018ED24[4]; + extern s32 D_8018ED44; + extern s32 D_8018ED4C; + extern s32 D_8018ED54; + extern s32 D_8018ED5C; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_8018ED24[0], pp, &tmp); + RotTransSV(&D_8018ED24[1], &prim.v[1], &tmp); + RotTransSV(&D_8018ED24[2], &prim.v[2], &tmp); + RotTransSV(&D_8018ED24[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_8018ED44; + prim.f1 = D_8018ED4C; + prim.f2 = D_8018ED54; + prim.f3 = D_8018ED5C; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_8018EDA4[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_8018EDA4[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_8018ED98[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_8018ED98[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_8018ED88[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_8018ED88[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018ED98[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_8018ED98[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_8018ED98[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_8018EDB4; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_8018EDB4; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_8018EE2C[])(void); + +void func_8016F6E0(void *a0) { + D_8018EE2C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_8018EE34[])(void); + +void func_8016F798(void *a0) { + D_8018EE34[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_8018EE3C[])(void); + +void func_8016F834(void *a0) { + D_8018EE3C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_8018EE44[])(void); + +void func_8016F8E4(void *a0) { + D_8018EE44[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_8018EE4C[])(void); + +void func_8016F9C4(void *a0) { + D_8018EE4C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_8018EE54[])(void); + +void func_8016FA84(void *a0) { + D_8018EE54[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_8018EE60[])(void); + +void func_8016FB7C(void *a0) { + D_8018EE60[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_8018EE6C[])(void); + +void func_8016FC90(void *a0) { + D_8018EE6C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_8018EE78[])(void); + +void func_8016FDB4(void *a0) { + D_8018EE78[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_8018EE88[])(void); + +void func_8016FF30(void *a0) { + D_8018EE88[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_8018EE98[])(void); + +void func_8016FFDC(void *a0) { + D_8018EE98[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_8018EEA0[])(void); + +void func_80170150(void *a0) { + D_8018EEA0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_8018EEA8[])(void); + +void func_80170240(void *a0) { + D_8018EEA8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_8018EEB0[])(void); + +void func_801702FC(void *a0) { + D_8018EEB0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_8018EEB8[])(void); + +void func_801703E0(void *a0) { + D_8018EEB8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_8018EEC0[])(void); + +void func_801704B0(void *a0) { + D_8018EEC0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_8018EEC8[])(void); + +void func_80170548(void *a0) { + D_8018EEC8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_8018EED0[])(void); + +void func_801705F8(void *a0) { + D_8018EED0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_8018EED8[])(void); + +void func_801706AC(void *a0) { + D_8018EED8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_8018EEE0[])(void); + +void func_80170748(void *a0) { + D_8018EEE0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_8018EEE8[])(void); + +void func_80170810(void *a0) { + D_8018EEE8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_8018EEF0[])(void); + +void func_80170AD8(void *a0) { + D_8018EEF0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_8018EEF8[])(void); + +void func_80170BD8(void *a0) { + D_8018EEF8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_8018EF00[])(void); + +void func_80170C74(void *a0) { + D_8018EF00[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8016AB6C", func_80170CF0); + + +extern void (*D_8018EF08[])(void); + +void func_80170D68(void *a0) { + D_8018EF08[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_8018EF10[])(void); + +void func_80170E34(void *a0) { + D_8018EF10[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_8018EF18[])(void); + +void func_80170EFC(void *a0) { + D_8018EF18[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_8018EF20[])(void); + +void func_80170FB0(void *a0) { + D_8018EF20[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_8018EF28[])(void); + +void func_80171064(void *a0) { + D_8018EF28[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_8018EF30[])(void); + +void func_80171120(void *a0) { + D_8018EF30[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_8018EF38[])(void); + +void func_801711C0(void *a0) { + D_8018EF38[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_8018EF40[])(void); + +void func_80171260(void *a0) { + D_8018EF40[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_8018EF48[])(void); + +void func_801714E4(void *a0) { + D_8018EF48[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8016AB6C", func_80172C50); + + +extern void (*D_8018EF8C[])(void); + +void func_80172CA0(void *a0) { + D_8018EF8C[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_8018EF50; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_8018EF50); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_029/ov_SC03_029_jr_8015AE2C.c b/src/ov_SC03_029/ov_SC03_029_jr_8015AE2C.c index 3c86177ab..7c2d27696 100644 --- a/src/ov_SC03_029/ov_SC03_029_jr_8015AE2C.c +++ b/src/ov_SC03_029/ov_SC03_029_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_8018A97C[])(void); void func_8016AB30(void *a0) { D_8018A97C[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_8018A9F8[])(void); - -void func_8016B4BC(void *a0) { - D_8018A9F8[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801D8788; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801D8788); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_8018A9EC[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_8018A9EC; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_8018AA30[]; -extern unsigned short D_8018AA38[]; -extern unsigned short D_8018AA40[]; -extern unsigned char D_801D8790[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801D8790 + param_2 * 0x40); - puVar3 = D_8018AA30[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_8018AA38[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_8018AA40[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801D8788; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801D8788, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_8018AA48[])(void); - -void func_8016BBA4(void *a0) { - D_8018AA48[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801D88C4; - extern u8 D_801D88C5; - extern u8 D_801D88C6; - extern M2C_UNK D_801D88C8; - extern u8 D_801D88C9; - extern u8 D_801D88CA; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801D88C4) = 0x20; - D_801D88C5 = 0x20; - D_801D88C6 = 0; - (*(u8 *)&D_801D88C8) = 0xc0; - D_801D88C9 = 0xc0; - D_801D88CA = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801D88C4; -extern M2C_UNK D_801D88C8; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801D88C4, &D_801D88C8, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801D88C5; - extern u8 D_801D88C6; - extern u8 D_801D88C9; - extern u8 D_801D88CA; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801D88C4); - if (*p1 != 0) *p1 -= 4; - if (D_801D88C5 != 0) D_801D88C5 -= 4; - if (D_801D88C6 != 0) D_801D88C6 -= 4; - p2 = &(*(u8 *)&D_801D88C8); - if (*p2 != 0) *p2 -= 4; - if (D_801D88C9 != 0) D_801D88C9 -= 4; - if (D_801D88CA != 0) D_801D88CA -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801D88C4), &(*(int *)&D_801D88C8), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801D8850; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801D8850); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_8018AA58; - extern s32 D_8018AA60; - extern s32 D_8018AA68; - extern s32 D_8018AA70; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_8018AA58, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_8018AA60, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_8018AA68, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_8018AA70, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_8018AA78[])(void); - -void func_8016C14C(void *a0) { - D_8018AA78[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801D88CC[]; -extern u8 D_801D88D4[]; -extern u8 D_801D8884[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801D88CC, D_801D88D4, D_801D8884); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801D88E0[]; - extern u8 D_801D89A0; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801D88E0[1] = 0xff; - D_801D88E0[2] = 0x10; - D_801D88E0[0] = 0x10; - D_801D88E0[6] = 0; - D_801D88E0[5] = 0; - D_801D88E0[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801D88E0, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801D89A0, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801D88E0); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8015AE2C", func_8016C998); - - -extern void (*D_8018AA80[])(void); - -void func_8016CB84(void *a0) { - D_8018AA80[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801D89A0[]; - - - Blk_8016CF04_8016CF04 *p = &D_801D89A0[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_8018AA9C[])(void); - -void func_8016D19C(void *a0) { - D_8018AA9C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_8018AAA4[])(void); - -void func_8016D428(void *a0) { - D_8018AAA4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_8018AB0C[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_8018AB0C[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_8018AAB0; -extern u8 D_8018AABC; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018AAB0, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018AABC); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8015AE2C", func_8016DC20); - - -extern void (*D_8018AB40[])(void); - -void func_8016DEA4(void *a0) { - D_8018AB40[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_8018AB48[])(void); - -void func_8016DF20(void *a0) { - D_8018AB48[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_8018AB9C[])(void); - -void func_8016E5B8(void *a0) { - D_8018AB9C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_8018AB5C[4]; - extern s32 D_8018AB7C; - extern s32 D_8018AB84; - extern s32 D_8018AB8C; - extern s32 D_8018AB94; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_8018AB5C[0], pp, &tmp); - RotTransSV(&D_8018AB5C[1], &prim.v[1], &tmp); - RotTransSV(&D_8018AB5C[2], &prim.v[2], &tmp); - RotTransSV(&D_8018AB5C[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_8018AB7C; - prim.f1 = D_8018AB84; - prim.f2 = D_8018AB8C; - prim.f3 = D_8018AB94; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_8018ABDC[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_8018ABDC[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_8018ABD0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_8018ABD0[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_8018ABC0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_8018ABC0[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018ABD0[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_8018ABD0[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_8018ABD0[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_8018ABEC; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_8018ABEC; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_8018AC64[])(void); - -void func_8016F6E0(void *a0) { - D_8018AC64[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_8018AC6C[])(void); - -void func_8016F798(void *a0) { - D_8018AC6C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_8018AC74[])(void); - -void func_8016F834(void *a0) { - D_8018AC74[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_8018AC7C[])(void); - -void func_8016F8E4(void *a0) { - D_8018AC7C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_8018AC84[])(void); - -void func_8016F9C4(void *a0) { - D_8018AC84[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_8018AC8C[])(void); - -void func_8016FA84(void *a0) { - D_8018AC8C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_8018AC98[])(void); - -void func_8016FB7C(void *a0) { - D_8018AC98[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_8018ACA4[])(void); - -void func_8016FC90(void *a0) { - D_8018ACA4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_8018ACB0[])(void); - -void func_8016FDB4(void *a0) { - D_8018ACB0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_8018ACC0[])(void); - -void func_8016FF30(void *a0) { - D_8018ACC0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_8018ACD0[])(void); - -void func_8016FFDC(void *a0) { - D_8018ACD0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_8018ACD8[])(void); - -void func_80170150(void *a0) { - D_8018ACD8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_8018ACE0[])(void); - -void func_80170240(void *a0) { - D_8018ACE0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_8018ACE8[])(void); - -void func_801702FC(void *a0) { - D_8018ACE8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_8018ACF0[])(void); - -void func_801703E0(void *a0) { - D_8018ACF0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_8018ACF8[])(void); - -void func_801704B0(void *a0) { - D_8018ACF8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_8018AD00[])(void); - -void func_80170548(void *a0) { - D_8018AD00[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_8018AD08[])(void); - -void func_801705F8(void *a0) { - D_8018AD08[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_8018AD10[])(void); - -void func_801706AC(void *a0) { - D_8018AD10[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_8018AD18[])(void); - -void func_80170748(void *a0) { - D_8018AD18[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_8018AD20[])(void); - -void func_80170810(void *a0) { - D_8018AD20[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_8018AD28[])(void); - -void func_80170AD8(void *a0) { - D_8018AD28[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_8018AD30[])(void); - -void func_80170BD8(void *a0) { - D_8018AD30[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_8018AD38[])(void); - -void func_80170C74(void *a0) { - D_8018AD38[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8015AE2C", func_80170CF0); - - -extern void (*D_8018AD40[])(void); - -void func_80170D68(void *a0) { - D_8018AD40[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_8018AD48[])(void); - -void func_80170E34(void *a0) { - D_8018AD48[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_8018AD50[])(void); - -void func_80170EFC(void *a0) { - D_8018AD50[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_8018AD58[])(void); - -void func_80170FB0(void *a0) { - D_8018AD58[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_8018AD60[])(void); - -void func_80171064(void *a0) { - D_8018AD60[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_8018AD68[])(void); - -void func_80171120(void *a0) { - D_8018AD68[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_8018AD70[])(void); - -void func_801711C0(void *a0) { - D_8018AD70[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_8018AD78[])(void); - -void func_80171260(void *a0) { - D_8018AD78[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_8018AD80[])(void); - -void func_801714E4(void *a0) { - D_8018AD80[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8015AE2C", func_80172C50); - - -extern void (*D_8018ADC4[])(void); - -void func_80172CA0(void *a0) { - D_8018ADC4[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_8018AD88; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_8018AD88); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_029/ov_SC03_029_jr_8016AB6C.c b/src/ov_SC03_029/ov_SC03_029_jr_8016AB6C.c new file mode 100644 index 000000000..7e4a3eb4d --- /dev/null +++ b/src/ov_SC03_029/ov_SC03_029_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80189D48; +extern u8 D_80189CB8; +extern u8 D_80189C94; +extern u8 D_80189C70; +extern u8 D_80189D24; +extern u8 D_80189D00; +extern u8 D_80189CDC; +extern u8 D_80189C4C; +extern void func_80145934(void); +extern u8 D_80189DD8; +extern u8 D_80189DB4; +extern u8 D_80189D90; +extern u8 D_80189D6C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801891D0[]; +extern unsigned char D_80189200[]; +extern unsigned char D_80189250[]; +extern unsigned char D_80189280[]; +extern unsigned char D_801892B0[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80189300[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801893C8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80189450[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80189458; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801D8318; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801D831C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80189488; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80189530[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80189554[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80189544; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80189568[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80189574[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80189584[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018959C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018958C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801895B0[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801895CC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801895BC; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801895E0[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801895F4[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80189608; +extern void (*D_80189630[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80189610; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018967C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80189680[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80189AE4[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80189AF4[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801D8350; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80189B1C[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80189AFC; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80189B0C; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80189B5C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80189B64[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80189B30; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80189B70[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80189B40; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801D8358; +extern s32 D_801D8364; +extern s32 D_801D8368; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80189BAC[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80189B80[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801D8360; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80189DFC[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80189C1C[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80189EA0[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80189FF4[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80189E10; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80189FFC[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80189E20; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80189E40; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_8018A004[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_8018A02C[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_8018A038[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80189EAC[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_8018A0DC; +extern void func_8015D380(s32 a0); +extern unsigned char D_801891C0[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_8018A0F0[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_8018A12C[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_8018A174; +extern u16 D_8018A176; +extern u16 D_8018A178; +extern s32 D_8018A17C; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_8018A184; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80189E90; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_8018A208[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_8018A2B8[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_8018A2E8[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_8018A34C; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801D8370[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_8018A370[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801D83C8[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_8018A3B8[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_8018A3A8; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801D7AD8[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_8018A3C0[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_8018A414[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_8018A3DC; +extern s16 D_8018A410; +extern s16 D_8018A40E; +extern s16 D_8018A40C; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_8018A420[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801D8428; +extern u8 D_801D8429; +extern u8 D_801D842A; +extern u8 D_801D842B; +extern u8 D_801D842C; +extern u8 D_801D842D; +extern u8 D_801D842E; +extern u8 D_801D842F; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_8018A430[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801D8468; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_8018A474[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_8018A4F0[]; +extern s32 D_8018A510[]; +extern u8 D_8018A58C[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_8018A5AC[]; +extern u8 D_8018A5CC[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_8018A668[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_8018A6E4[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801D7AE8; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_8018A6F0[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_8018A6F8[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_8018A7C0[])(void); +extern void func_80166618(void *a0); +extern void (*D_8018A7D0[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_8018A7E0[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_8018A7EC[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_8018A74C[]; +extern u8 D_8018A760[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_8018A804[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_8018A80C[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_8018A814[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_8018A81C[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_8018A824[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_8018A82C[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_8018A834[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_8018A8E8[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_8018A8F0[])(void); +extern void func_80169F00(void *a0); +extern char D_8018A8A0[]; +extern char D_8018A860[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_8018A928[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_8018A934[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_8018A97C[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_8018A93C[]; + extern u8 D_8018A94C[]; + extern u8 D_801D8738[]; + extern u8 D_801D8760[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_8018A93C, D_801D8738) + 3; + func_8001CE28(obj, D_801D8738); + } else { + var_s3 = func_80024054(D_8018A94C, D_801D8760) + 9; + func_8001CE28(obj, D_801D8760); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_8018A9F8[])(void); + +void func_8016B4BC(void *a0) { + D_8018A9F8[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801D8788; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801D8788); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_8018A9EC[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_8018A9EC; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_8018AA30[]; +extern unsigned short D_8018AA38[]; +extern unsigned short D_8018AA40[]; +extern unsigned char D_801D8790[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801D8790 + param_2 * 0x40); + puVar3 = D_8018AA30[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_8018AA38[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_8018AA40[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801D8788; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801D8788, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_8018AA48[])(void); + +void func_8016BBA4(void *a0) { + D_8018AA48[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801D88C4; + extern u8 D_801D88C5; + extern u8 D_801D88C6; + extern M2C_UNK D_801D88C8; + extern u8 D_801D88C9; + extern u8 D_801D88CA; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801D88C4) = 0x20; + D_801D88C5 = 0x20; + D_801D88C6 = 0; + (*(u8 *)&D_801D88C8) = 0xc0; + D_801D88C9 = 0xc0; + D_801D88CA = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801D88C4; +extern M2C_UNK D_801D88C8; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801D88C4, &D_801D88C8, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801D88C5; + extern u8 D_801D88C6; + extern u8 D_801D88C9; + extern u8 D_801D88CA; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801D88C4); + if (*p1 != 0) *p1 -= 4; + if (D_801D88C5 != 0) D_801D88C5 -= 4; + if (D_801D88C6 != 0) D_801D88C6 -= 4; + p2 = &(*(u8 *)&D_801D88C8); + if (*p2 != 0) *p2 -= 4; + if (D_801D88C9 != 0) D_801D88C9 -= 4; + if (D_801D88CA != 0) D_801D88CA -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801D88C4), &(*(int *)&D_801D88C8), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801D8850; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801D8850); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_8018AA58; + extern s32 D_8018AA60; + extern s32 D_8018AA68; + extern s32 D_8018AA70; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_8018AA58, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_8018AA60, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_8018AA68, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_8018AA70, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_8018AA78[])(void); + +void func_8016C14C(void *a0) { + D_8018AA78[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801D88CC[]; +extern u8 D_801D88D4[]; +extern u8 D_801D8884[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801D88CC, D_801D88D4, D_801D8884); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801D88E0[]; + extern u8 D_801D89A0; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801D88E0[1] = 0xff; + D_801D88E0[2] = 0x10; + D_801D88E0[0] = 0x10; + D_801D88E0[6] = 0; + D_801D88E0[5] = 0; + D_801D88E0[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801D88E0, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801D89A0, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801D88E0); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8016AB6C", func_8016C998); + + +extern void (*D_8018AA80[])(void); + +void func_8016CB84(void *a0) { + D_8018AA80[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801D89A0[]; + + + Blk_8016CF04_8016CF04 *p = &D_801D89A0[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_8018AA9C[])(void); + +void func_8016D19C(void *a0) { + D_8018AA9C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_8018AAA4[])(void); + +void func_8016D428(void *a0) { + D_8018AAA4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018AB0C[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_8018AB0C[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_8018AAB0; +extern u8 D_8018AABC; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018AAB0, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018AABC); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8016AB6C", func_8016DC20); + + +extern void (*D_8018AB40[])(void); + +void func_8016DEA4(void *a0) { + D_8018AB40[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_8018AB48[])(void); + +void func_8016DF20(void *a0) { + D_8018AB48[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_8018AB9C[])(void); + +void func_8016E5B8(void *a0) { + D_8018AB9C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_8018AB5C[4]; + extern s32 D_8018AB7C; + extern s32 D_8018AB84; + extern s32 D_8018AB8C; + extern s32 D_8018AB94; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_8018AB5C[0], pp, &tmp); + RotTransSV(&D_8018AB5C[1], &prim.v[1], &tmp); + RotTransSV(&D_8018AB5C[2], &prim.v[2], &tmp); + RotTransSV(&D_8018AB5C[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_8018AB7C; + prim.f1 = D_8018AB84; + prim.f2 = D_8018AB8C; + prim.f3 = D_8018AB94; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_8018ABDC[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_8018ABDC[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_8018ABD0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_8018ABD0[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_8018ABC0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_8018ABC0[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018ABD0[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_8018ABD0[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_8018ABD0[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_8018ABEC; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_8018ABEC; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_8018AC64[])(void); + +void func_8016F6E0(void *a0) { + D_8018AC64[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_8018AC6C[])(void); + +void func_8016F798(void *a0) { + D_8018AC6C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_8018AC74[])(void); + +void func_8016F834(void *a0) { + D_8018AC74[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_8018AC7C[])(void); + +void func_8016F8E4(void *a0) { + D_8018AC7C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_8018AC84[])(void); + +void func_8016F9C4(void *a0) { + D_8018AC84[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_8018AC8C[])(void); + +void func_8016FA84(void *a0) { + D_8018AC8C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_8018AC98[])(void); + +void func_8016FB7C(void *a0) { + D_8018AC98[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_8018ACA4[])(void); + +void func_8016FC90(void *a0) { + D_8018ACA4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_8018ACB0[])(void); + +void func_8016FDB4(void *a0) { + D_8018ACB0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_8018ACC0[])(void); + +void func_8016FF30(void *a0) { + D_8018ACC0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_8018ACD0[])(void); + +void func_8016FFDC(void *a0) { + D_8018ACD0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_8018ACD8[])(void); + +void func_80170150(void *a0) { + D_8018ACD8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_8018ACE0[])(void); + +void func_80170240(void *a0) { + D_8018ACE0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_8018ACE8[])(void); + +void func_801702FC(void *a0) { + D_8018ACE8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_8018ACF0[])(void); + +void func_801703E0(void *a0) { + D_8018ACF0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_8018ACF8[])(void); + +void func_801704B0(void *a0) { + D_8018ACF8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_8018AD00[])(void); + +void func_80170548(void *a0) { + D_8018AD00[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_8018AD08[])(void); + +void func_801705F8(void *a0) { + D_8018AD08[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_8018AD10[])(void); + +void func_801706AC(void *a0) { + D_8018AD10[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_8018AD18[])(void); + +void func_80170748(void *a0) { + D_8018AD18[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_8018AD20[])(void); + +void func_80170810(void *a0) { + D_8018AD20[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_8018AD28[])(void); + +void func_80170AD8(void *a0) { + D_8018AD28[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_8018AD30[])(void); + +void func_80170BD8(void *a0) { + D_8018AD30[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_8018AD38[])(void); + +void func_80170C74(void *a0) { + D_8018AD38[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8016AB6C", func_80170CF0); + + +extern void (*D_8018AD40[])(void); + +void func_80170D68(void *a0) { + D_8018AD40[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_8018AD48[])(void); + +void func_80170E34(void *a0) { + D_8018AD48[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_8018AD50[])(void); + +void func_80170EFC(void *a0) { + D_8018AD50[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_8018AD58[])(void); + +void func_80170FB0(void *a0) { + D_8018AD58[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_8018AD60[])(void); + +void func_80171064(void *a0) { + D_8018AD60[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_8018AD68[])(void); + +void func_80171120(void *a0) { + D_8018AD68[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_8018AD70[])(void); + +void func_801711C0(void *a0) { + D_8018AD70[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_8018AD78[])(void); + +void func_80171260(void *a0) { + D_8018AD78[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_8018AD80[])(void); + +void func_801714E4(void *a0) { + D_8018AD80[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8016AB6C", func_80172C50); + + +extern void (*D_8018ADC4[])(void); + +void func_80172CA0(void *a0) { + D_8018ADC4[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_8018AD88; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_8018AD88); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_030/ov_SC03_030_jr_8015AE2C.c b/src/ov_SC03_030/ov_SC03_030_jr_8015AE2C.c index 16950c779..454f673e2 100644 --- a/src/ov_SC03_030/ov_SC03_030_jr_8015AE2C.c +++ b/src/ov_SC03_030/ov_SC03_030_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_80184FB8[])(void); void func_8016AB30(void *a0) { D_80184FB8[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80185034[])(void); - -void func_8016B4BC(void *a0) { - D_80185034[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801E0D80; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801E0D80); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80185028[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80185028; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_8018506C[]; -extern unsigned short D_80185074[]; -extern unsigned short D_8018507C[]; -extern unsigned char D_801E0D88[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801E0D88 + param_2 * 0x40); - puVar3 = D_8018506C[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80185074[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_8018507C[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801E0D80; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801E0D80, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80185084[])(void); - -void func_8016BBA4(void *a0) { - D_80185084[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801E0EBC; - extern u8 D_801E0EBD; - extern u8 D_801E0EBE; - extern M2C_UNK D_801E0EC0; - extern u8 D_801E0EC1; - extern u8 D_801E0EC2; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801E0EBC) = 0x20; - D_801E0EBD = 0x20; - D_801E0EBE = 0; - (*(u8 *)&D_801E0EC0) = 0xc0; - D_801E0EC1 = 0xc0; - D_801E0EC2 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801E0EBC; -extern M2C_UNK D_801E0EC0; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801E0EBC, &D_801E0EC0, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801E0EBD; - extern u8 D_801E0EBE; - extern u8 D_801E0EC1; - extern u8 D_801E0EC2; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801E0EBC); - if (*p1 != 0) *p1 -= 4; - if (D_801E0EBD != 0) D_801E0EBD -= 4; - if (D_801E0EBE != 0) D_801E0EBE -= 4; - p2 = &(*(u8 *)&D_801E0EC0); - if (*p2 != 0) *p2 -= 4; - if (D_801E0EC1 != 0) D_801E0EC1 -= 4; - if (D_801E0EC2 != 0) D_801E0EC2 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801E0EBC), &(*(int *)&D_801E0EC0), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801E0E48; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801E0E48); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80185094; - extern s32 D_8018509C; - extern s32 D_801850A4; - extern s32 D_801850AC; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80185094, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_8018509C, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_801850A4, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_801850AC, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_801850B4[])(void); - -void func_8016C14C(void *a0) { - D_801850B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801E0EC4[]; -extern u8 D_801E0ECC[]; -extern u8 D_801E0E7C[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801E0EC4, D_801E0ECC, D_801E0E7C); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801E0ED8[]; - extern u8 D_801E0F98; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801E0ED8[1] = 0xff; - D_801E0ED8[2] = 0x10; - D_801E0ED8[0] = 0x10; - D_801E0ED8[6] = 0; - D_801E0ED8[5] = 0; - D_801E0ED8[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801E0ED8, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801E0F98, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801E0ED8); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8015AE2C", func_8016C998); - - -extern void (*D_801850BC[])(void); - -void func_8016CB84(void *a0) { - D_801850BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801E0F98[]; - - - Blk_8016CF04_8016CF04 *p = &D_801E0F98[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_801850D8[])(void); - -void func_8016D19C(void *a0) { - D_801850D8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_801850E0[])(void); - -void func_8016D428(void *a0) { - D_801850E0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80185148[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80185148[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_801850EC; -extern u8 D_801850F8; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801850EC, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801850F8); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8015AE2C", func_8016DC20); - - -extern void (*D_8018517C[])(void); - -void func_8016DEA4(void *a0) { - D_8018517C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80185184[])(void); - -void func_8016DF20(void *a0) { - D_80185184[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_801851D8[])(void); - -void func_8016E5B8(void *a0) { - D_801851D8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80185198[4]; - extern s32 D_801851B8; - extern s32 D_801851C0; - extern s32 D_801851C8; - extern s32 D_801851D0; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80185198[0], pp, &tmp); - RotTransSV(&D_80185198[1], &prim.v[1], &tmp); - RotTransSV(&D_80185198[2], &prim.v[2], &tmp); - RotTransSV(&D_80185198[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_801851B8; - prim.f1 = D_801851C0; - prim.f2 = D_801851C8; - prim.f3 = D_801851D0; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80185218[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80185218[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_8018520C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_8018520C[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_801851FC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_801851FC[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018520C[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_8018520C[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_8018520C[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80185228; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80185228; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_801852A0[])(void); - -void func_8016F6E0(void *a0) { - D_801852A0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_801852A8[])(void); - -void func_8016F798(void *a0) { - D_801852A8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_801852B0[])(void); - -void func_8016F834(void *a0) { - D_801852B0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_801852B8[])(void); - -void func_8016F8E4(void *a0) { - D_801852B8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_801852C0[])(void); - -void func_8016F9C4(void *a0) { - D_801852C0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_801852C8[])(void); - -void func_8016FA84(void *a0) { - D_801852C8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_801852D4[])(void); - -void func_8016FB7C(void *a0) { - D_801852D4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_801852E0[])(void); - -void func_8016FC90(void *a0) { - D_801852E0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_801852EC[])(void); - -void func_8016FDB4(void *a0) { - D_801852EC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_801852FC[])(void); - -void func_8016FF30(void *a0) { - D_801852FC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_8018530C[])(void); - -void func_8016FFDC(void *a0) { - D_8018530C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80185314[])(void); - -void func_80170150(void *a0) { - D_80185314[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_8018531C[])(void); - -void func_80170240(void *a0) { - D_8018531C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80185324[])(void); - -void func_801702FC(void *a0) { - D_80185324[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_8018532C[])(void); - -void func_801703E0(void *a0) { - D_8018532C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80185334[])(void); - -void func_801704B0(void *a0) { - D_80185334[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_8018533C[])(void); - -void func_80170548(void *a0) { - D_8018533C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80185344[])(void); - -void func_801705F8(void *a0) { - D_80185344[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_8018534C[])(void); - -void func_801706AC(void *a0) { - D_8018534C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80185354[])(void); - -void func_80170748(void *a0) { - D_80185354[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_8018535C[])(void); - -void func_80170810(void *a0) { - D_8018535C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80185364[])(void); - -void func_80170AD8(void *a0) { - D_80185364[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_8018536C[])(void); - -void func_80170BD8(void *a0) { - D_8018536C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80185374[])(void); - -void func_80170C74(void *a0) { - D_80185374[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8015AE2C", func_80170CF0); - - -extern void (*D_8018537C[])(void); - -void func_80170D68(void *a0) { - D_8018537C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80185384[])(void); - -void func_80170E34(void *a0) { - D_80185384[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_8018538C[])(void); - -void func_80170EFC(void *a0) { - D_8018538C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80185394[])(void); - -void func_80170FB0(void *a0) { - D_80185394[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_8018539C[])(void); - -void func_80171064(void *a0) { - D_8018539C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_801853A4[])(void); - -void func_80171120(void *a0) { - D_801853A4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_801853AC[])(void); - -void func_801711C0(void *a0) { - D_801853AC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_801853B4[])(void); - -void func_80171260(void *a0) { - D_801853B4[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_801853BC[])(void); - -void func_801714E4(void *a0) { - D_801853BC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8015AE2C", func_80172C50); - - -extern void (*D_80185400[])(void); - -void func_80172CA0(void *a0) { - D_80185400[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_801853C4; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_801853C4); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_030/ov_SC03_030_jr_8016AB6C.c b/src/ov_SC03_030/ov_SC03_030_jr_8016AB6C.c new file mode 100644 index 000000000..86ffa7e6b --- /dev/null +++ b/src/ov_SC03_030/ov_SC03_030_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80184384; +extern u8 D_801842F4; +extern u8 D_801842D0; +extern u8 D_801842AC; +extern u8 D_80184360; +extern u8 D_8018433C; +extern u8 D_80184318; +extern u8 D_80184288; +extern void func_80145934(void); +extern u8 D_80184414; +extern u8 D_801843F0; +extern u8 D_801843CC; +extern u8 D_801843A8; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018380C[]; +extern unsigned char D_8018383C[]; +extern unsigned char D_8018388C[]; +extern unsigned char D_801838BC[]; +extern unsigned char D_801838EC[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018393C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80183A04[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80183A8C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80183A94; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801E0910; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801E0914; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80183AC4; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80183B6C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80183B90[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80183B80; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80183BA4[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80183BB0[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80183BC0[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80183BD8[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80183BC8; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80183BEC[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80183C08[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80183BF8; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80183C1C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80183C30[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80183C44; +extern void (*D_80183C6C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80183C4C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80183CB8[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80183CBC[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80184120[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80184130[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801E0948; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80184158[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80184138; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80184148; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80184198[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801841A0[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018416C; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801841AC[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018417C; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801E0950; +extern s32 D_801E095C; +extern s32 D_801E0960; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801841E8[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801841BC[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801E0958; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80184438[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80184258[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_801844DC[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80184630[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018444C; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80184638[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018445C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018447C; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80184640[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80184668[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80184674[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_801844E8[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80184718; +extern void func_8015D380(s32 a0); +extern unsigned char D_801837FC[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_8018472C[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80184768[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_801847B0; +extern u16 D_801847B2; +extern u16 D_801847B4; +extern s32 D_801847B8; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_801847C0; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_801844CC; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80184844[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_801848F4[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80184924[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80184988; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801E0968[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_801849AC[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801E09C0[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_801849F4[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_801849E4; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801E017C[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_801849FC[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80184A50[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80184A18; +extern s16 D_80184A4C; +extern s16 D_80184A4A; +extern s16 D_80184A48; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80184A5C[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801E0A20; +extern u8 D_801E0A21; +extern u8 D_801E0A22; +extern u8 D_801E0A23; +extern u8 D_801E0A24; +extern u8 D_801E0A25; +extern u8 D_801E0A26; +extern u8 D_801E0A27; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80184A6C[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801E0A60; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80184AB0[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80184B2C[]; +extern s32 D_80184B4C[]; +extern u8 D_80184BC8[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80184BE8[]; +extern u8 D_80184C08[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80184CA4[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80184D20[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801E018C; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80184D2C[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80184D34[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80184DFC[])(void); +extern void func_80166618(void *a0); +extern void (*D_80184E0C[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80184E1C[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80184E28[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80184D88[]; +extern u8 D_80184D9C[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80184E40[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80184E48[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80184E50[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80184E58[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80184E60[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80184E68[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80184E70[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80184F24[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80184F2C[])(void); +extern void func_80169F00(void *a0); +extern char D_80184EDC[]; +extern char D_80184E9C[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80184F64[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80184F70[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80184FB8[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80184F78[]; + extern u8 D_80184F88[]; + extern u8 D_801E0D30[]; + extern u8 D_801E0D58[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80184F78, D_801E0D30) + 3; + func_8001CE28(obj, D_801E0D30); + } else { + var_s3 = func_80024054(D_80184F88, D_801E0D58) + 9; + func_8001CE28(obj, D_801E0D58); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80185034[])(void); + +void func_8016B4BC(void *a0) { + D_80185034[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801E0D80; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801E0D80); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80185028[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80185028; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_8018506C[]; +extern unsigned short D_80185074[]; +extern unsigned short D_8018507C[]; +extern unsigned char D_801E0D88[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801E0D88 + param_2 * 0x40); + puVar3 = D_8018506C[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80185074[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_8018507C[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801E0D80; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801E0D80, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80185084[])(void); + +void func_8016BBA4(void *a0) { + D_80185084[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801E0EBC; + extern u8 D_801E0EBD; + extern u8 D_801E0EBE; + extern M2C_UNK D_801E0EC0; + extern u8 D_801E0EC1; + extern u8 D_801E0EC2; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801E0EBC) = 0x20; + D_801E0EBD = 0x20; + D_801E0EBE = 0; + (*(u8 *)&D_801E0EC0) = 0xc0; + D_801E0EC1 = 0xc0; + D_801E0EC2 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801E0EBC; +extern M2C_UNK D_801E0EC0; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801E0EBC, &D_801E0EC0, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801E0EBD; + extern u8 D_801E0EBE; + extern u8 D_801E0EC1; + extern u8 D_801E0EC2; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801E0EBC); + if (*p1 != 0) *p1 -= 4; + if (D_801E0EBD != 0) D_801E0EBD -= 4; + if (D_801E0EBE != 0) D_801E0EBE -= 4; + p2 = &(*(u8 *)&D_801E0EC0); + if (*p2 != 0) *p2 -= 4; + if (D_801E0EC1 != 0) D_801E0EC1 -= 4; + if (D_801E0EC2 != 0) D_801E0EC2 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801E0EBC), &(*(int *)&D_801E0EC0), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801E0E48; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801E0E48); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80185094; + extern s32 D_8018509C; + extern s32 D_801850A4; + extern s32 D_801850AC; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80185094, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_8018509C, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_801850A4, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_801850AC, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_801850B4[])(void); + +void func_8016C14C(void *a0) { + D_801850B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801E0EC4[]; +extern u8 D_801E0ECC[]; +extern u8 D_801E0E7C[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801E0EC4, D_801E0ECC, D_801E0E7C); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801E0ED8[]; + extern u8 D_801E0F98; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801E0ED8[1] = 0xff; + D_801E0ED8[2] = 0x10; + D_801E0ED8[0] = 0x10; + D_801E0ED8[6] = 0; + D_801E0ED8[5] = 0; + D_801E0ED8[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801E0ED8, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801E0F98, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801E0ED8); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8016AB6C", func_8016C998); + + +extern void (*D_801850BC[])(void); + +void func_8016CB84(void *a0) { + D_801850BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801E0F98[]; + + + Blk_8016CF04_8016CF04 *p = &D_801E0F98[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_801850D8[])(void); + +void func_8016D19C(void *a0) { + D_801850D8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_801850E0[])(void); + +void func_8016D428(void *a0) { + D_801850E0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80185148[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80185148[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_801850EC; +extern u8 D_801850F8; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801850EC, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801850F8); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8016AB6C", func_8016DC20); + + +extern void (*D_8018517C[])(void); + +void func_8016DEA4(void *a0) { + D_8018517C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80185184[])(void); + +void func_8016DF20(void *a0) { + D_80185184[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_801851D8[])(void); + +void func_8016E5B8(void *a0) { + D_801851D8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80185198[4]; + extern s32 D_801851B8; + extern s32 D_801851C0; + extern s32 D_801851C8; + extern s32 D_801851D0; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80185198[0], pp, &tmp); + RotTransSV(&D_80185198[1], &prim.v[1], &tmp); + RotTransSV(&D_80185198[2], &prim.v[2], &tmp); + RotTransSV(&D_80185198[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_801851B8; + prim.f1 = D_801851C0; + prim.f2 = D_801851C8; + prim.f3 = D_801851D0; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80185218[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80185218[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_8018520C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_8018520C[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_801851FC[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_801851FC[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018520C[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_8018520C[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_8018520C[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80185228; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80185228; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_801852A0[])(void); + +void func_8016F6E0(void *a0) { + D_801852A0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_801852A8[])(void); + +void func_8016F798(void *a0) { + D_801852A8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_801852B0[])(void); + +void func_8016F834(void *a0) { + D_801852B0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_801852B8[])(void); + +void func_8016F8E4(void *a0) { + D_801852B8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_801852C0[])(void); + +void func_8016F9C4(void *a0) { + D_801852C0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_801852C8[])(void); + +void func_8016FA84(void *a0) { + D_801852C8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_801852D4[])(void); + +void func_8016FB7C(void *a0) { + D_801852D4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_801852E0[])(void); + +void func_8016FC90(void *a0) { + D_801852E0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_801852EC[])(void); + +void func_8016FDB4(void *a0) { + D_801852EC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_801852FC[])(void); + +void func_8016FF30(void *a0) { + D_801852FC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_8018530C[])(void); + +void func_8016FFDC(void *a0) { + D_8018530C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80185314[])(void); + +void func_80170150(void *a0) { + D_80185314[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_8018531C[])(void); + +void func_80170240(void *a0) { + D_8018531C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80185324[])(void); + +void func_801702FC(void *a0) { + D_80185324[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_8018532C[])(void); + +void func_801703E0(void *a0) { + D_8018532C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80185334[])(void); + +void func_801704B0(void *a0) { + D_80185334[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_8018533C[])(void); + +void func_80170548(void *a0) { + D_8018533C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80185344[])(void); + +void func_801705F8(void *a0) { + D_80185344[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_8018534C[])(void); + +void func_801706AC(void *a0) { + D_8018534C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80185354[])(void); + +void func_80170748(void *a0) { + D_80185354[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_8018535C[])(void); + +void func_80170810(void *a0) { + D_8018535C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80185364[])(void); + +void func_80170AD8(void *a0) { + D_80185364[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_8018536C[])(void); + +void func_80170BD8(void *a0) { + D_8018536C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80185374[])(void); + +void func_80170C74(void *a0) { + D_80185374[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8016AB6C", func_80170CF0); + + +extern void (*D_8018537C[])(void); + +void func_80170D68(void *a0) { + D_8018537C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80185384[])(void); + +void func_80170E34(void *a0) { + D_80185384[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_8018538C[])(void); + +void func_80170EFC(void *a0) { + D_8018538C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80185394[])(void); + +void func_80170FB0(void *a0) { + D_80185394[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_8018539C[])(void); + +void func_80171064(void *a0) { + D_8018539C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_801853A4[])(void); + +void func_80171120(void *a0) { + D_801853A4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_801853AC[])(void); + +void func_801711C0(void *a0) { + D_801853AC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_801853B4[])(void); + +void func_80171260(void *a0) { + D_801853B4[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_801853BC[])(void); + +void func_801714E4(void *a0) { + D_801853BC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8016AB6C", func_80172C50); + + +extern void (*D_80185400[])(void); + +void func_80172CA0(void *a0) { + D_80185400[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_801853C4; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_801853C4); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_031/ov_SC03_031_jr_8015AE2C.c b/src/ov_SC03_031/ov_SC03_031_jr_8015AE2C.c index 3bea0e7f9..37b8debb0 100644 --- a/src/ov_SC03_031/ov_SC03_031_jr_8015AE2C.c +++ b/src/ov_SC03_031/ov_SC03_031_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_801854D4[])(void); void func_8016AB30(void *a0) { D_801854D4[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80185550[])(void); - -void func_8016B4BC(void *a0) { - D_80185550[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801C5180; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801C5180); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80185544[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80185544; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80185588[]; -extern unsigned short D_80185590[]; -extern unsigned short D_80185598[]; -extern unsigned char D_801C5188[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801C5188 + param_2 * 0x40); - puVar3 = D_80185588[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80185590[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80185598[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801C5180; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801C5180, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_801855A0[])(void); - -void func_8016BBA4(void *a0) { - D_801855A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801C52BC; - extern u8 D_801C52BD; - extern u8 D_801C52BE; - extern M2C_UNK D_801C52C0; - extern u8 D_801C52C1; - extern u8 D_801C52C2; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801C52BC) = 0x20; - D_801C52BD = 0x20; - D_801C52BE = 0; - (*(u8 *)&D_801C52C0) = 0xc0; - D_801C52C1 = 0xc0; - D_801C52C2 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801C52BC; -extern M2C_UNK D_801C52C0; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801C52BC, &D_801C52C0, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801C52BD; - extern u8 D_801C52BE; - extern u8 D_801C52C1; - extern u8 D_801C52C2; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801C52BC); - if (*p1 != 0) *p1 -= 4; - if (D_801C52BD != 0) D_801C52BD -= 4; - if (D_801C52BE != 0) D_801C52BE -= 4; - p2 = &(*(u8 *)&D_801C52C0); - if (*p2 != 0) *p2 -= 4; - if (D_801C52C1 != 0) D_801C52C1 -= 4; - if (D_801C52C2 != 0) D_801C52C2 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801C52BC), &(*(int *)&D_801C52C0), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801C5248; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801C5248); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_801855B0; - extern s32 D_801855B8; - extern s32 D_801855C0; - extern s32 D_801855C8; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_801855B0, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_801855B8, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_801855C0, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_801855C8, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_801855D0[])(void); - -void func_8016C14C(void *a0) { - D_801855D0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801C52C4[]; -extern u8 D_801C52CC[]; -extern u8 D_801C527C[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801C52C4, D_801C52CC, D_801C527C); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801C52D8[]; - extern u8 D_801C5398; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801C52D8[1] = 0xff; - D_801C52D8[2] = 0x10; - D_801C52D8[0] = 0x10; - D_801C52D8[6] = 0; - D_801C52D8[5] = 0; - D_801C52D8[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801C52D8, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801C5398, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801C52D8); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8015AE2C", func_8016C998); - - -extern void (*D_801855D8[])(void); - -void func_8016CB84(void *a0) { - D_801855D8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801C5398[]; - - - Blk_8016CF04_8016CF04 *p = &D_801C5398[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_801855F4[])(void); - -void func_8016D19C(void *a0) { - D_801855F4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_801855FC[])(void); - -void func_8016D428(void *a0) { - D_801855FC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80185664[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80185664[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80185608; -extern u8 D_80185614; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80185608, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80185614); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80185698[])(void); - -void func_8016DEA4(void *a0) { - D_80185698[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_801856A0[])(void); - -void func_8016DF20(void *a0) { - D_801856A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_801856F4[])(void); - -void func_8016E5B8(void *a0) { - D_801856F4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_801856B4[4]; - extern s32 D_801856D4; - extern s32 D_801856DC; - extern s32 D_801856E4; - extern s32 D_801856EC; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_801856B4[0], pp, &tmp); - RotTransSV(&D_801856B4[1], &prim.v[1], &tmp); - RotTransSV(&D_801856B4[2], &prim.v[2], &tmp); - RotTransSV(&D_801856B4[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_801856D4; - prim.f1 = D_801856DC; - prim.f2 = D_801856E4; - prim.f3 = D_801856EC; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80185734[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80185734[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80185728[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80185728[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80185718[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80185718[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80185728[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80185728[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80185728[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80185744; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80185744; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_801857BC[])(void); - -void func_8016F6E0(void *a0) { - D_801857BC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_801857C4[])(void); - -void func_8016F798(void *a0) { - D_801857C4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_801857CC[])(void); - -void func_8016F834(void *a0) { - D_801857CC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_801857D4[])(void); - -void func_8016F8E4(void *a0) { - D_801857D4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_801857DC[])(void); - -void func_8016F9C4(void *a0) { - D_801857DC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_801857E4[])(void); - -void func_8016FA84(void *a0) { - D_801857E4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_801857F0[])(void); - -void func_8016FB7C(void *a0) { - D_801857F0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_801857FC[])(void); - -void func_8016FC90(void *a0) { - D_801857FC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80185808[])(void); - -void func_8016FDB4(void *a0) { - D_80185808[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80185818[])(void); - -void func_8016FF30(void *a0) { - D_80185818[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80185828[])(void); - -void func_8016FFDC(void *a0) { - D_80185828[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80185830[])(void); - -void func_80170150(void *a0) { - D_80185830[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80185838[])(void); - -void func_80170240(void *a0) { - D_80185838[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80185840[])(void); - -void func_801702FC(void *a0) { - D_80185840[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80185848[])(void); - -void func_801703E0(void *a0) { - D_80185848[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80185850[])(void); - -void func_801704B0(void *a0) { - D_80185850[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80185858[])(void); - -void func_80170548(void *a0) { - D_80185858[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80185860[])(void); - -void func_801705F8(void *a0) { - D_80185860[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80185868[])(void); - -void func_801706AC(void *a0) { - D_80185868[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80185870[])(void); - -void func_80170748(void *a0) { - D_80185870[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80185878[])(void); - -void func_80170810(void *a0) { - D_80185878[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80185880[])(void); - -void func_80170AD8(void *a0) { - D_80185880[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80185888[])(void); - -void func_80170BD8(void *a0) { - D_80185888[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80185890[])(void); - -void func_80170C74(void *a0) { - D_80185890[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80185898[])(void); - -void func_80170D68(void *a0) { - D_80185898[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_801858A0[])(void); - -void func_80170E34(void *a0) { - D_801858A0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_801858A8[])(void); - -void func_80170EFC(void *a0) { - D_801858A8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_801858B0[])(void); - -void func_80170FB0(void *a0) { - D_801858B0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_801858B8[])(void); - -void func_80171064(void *a0) { - D_801858B8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_801858C0[])(void); - -void func_80171120(void *a0) { - D_801858C0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_801858C8[])(void); - -void func_801711C0(void *a0) { - D_801858C8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_801858D0[])(void); - -void func_80171260(void *a0) { - D_801858D0[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_801858D8[])(void); - -void func_801714E4(void *a0) { - D_801858D8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8015AE2C", func_80172C50); - - -extern void (*D_8018591C[])(void); - -void func_80172CA0(void *a0) { - D_8018591C[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_801858E0; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_801858E0); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_031/ov_SC03_031_jr_8016AB6C.c b/src/ov_SC03_031/ov_SC03_031_jr_8016AB6C.c new file mode 100644 index 000000000..156a6dbe7 --- /dev/null +++ b/src/ov_SC03_031/ov_SC03_031_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801848A0; +extern u8 D_80184810; +extern u8 D_801847EC; +extern u8 D_801847C8; +extern u8 D_8018487C; +extern u8 D_80184858; +extern u8 D_80184834; +extern u8 D_801847A4; +extern void func_80145934(void); +extern u8 D_80184930; +extern u8 D_8018490C; +extern u8 D_801848E8; +extern u8 D_801848C4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80183D28[]; +extern unsigned char D_80183D58[]; +extern unsigned char D_80183DA8[]; +extern unsigned char D_80183DD8[]; +extern unsigned char D_80183E08[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80183E58[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80183F20[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80183FA8[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80183FB0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801C4D10; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801C4D14; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80183FE0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80184088[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801840AC[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018409C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801840C0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801840CC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801840DC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801840F4[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801840E4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80184108[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80184124[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80184114; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80184138[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018414C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80184160; +extern void (*D_80184188[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80184168; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801841D4[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801841D8[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018463C[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018464C[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801C4D48; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80184674[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80184654; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80184664; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801846B4[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801846BC[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80184688; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801846C8[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80184698; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801C4D50; +extern s32 D_801C4D5C; +extern s32 D_801C4D60; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80184704[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801846D8[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801C4D58; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80184954[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80184774[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_801849F8[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80184B4C[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80184968; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80184B54[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80184978; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80184998; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80184B5C[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80184B84[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80184B90[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80184A04[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80184C34; +extern void func_8015D380(s32 a0); +extern unsigned char D_80183D18[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80184C48[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80184C84[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80184CCC; +extern u16 D_80184CCE; +extern u16 D_80184CD0; +extern s32 D_80184CD4; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80184CDC; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_801849E8; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80184D60[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80184E10[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80184E40[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80184EA4; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801C4D68[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80184EC8[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801C4DC0[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80184F10[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80184F00; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801C4620[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80184F18[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80184F6C[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80184F34; +extern s16 D_80184F68; +extern s16 D_80184F66; +extern s16 D_80184F64; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80184F78[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801C4E20; +extern u8 D_801C4E21; +extern u8 D_801C4E22; +extern u8 D_801C4E23; +extern u8 D_801C4E24; +extern u8 D_801C4E25; +extern u8 D_801C4E26; +extern u8 D_801C4E27; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80184F88[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801C4E60; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80184FCC[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80185048[]; +extern s32 D_80185068[]; +extern u8 D_801850E4[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80185104[]; +extern u8 D_80185124[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_801851C0[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_8018523C[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801C4630; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80185248[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80185250[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80185318[])(void); +extern void func_80166618(void *a0); +extern void (*D_80185328[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80185338[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80185344[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_801852A4[]; +extern u8 D_801852B8[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_8018535C[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80185364[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_8018536C[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80185374[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_8018537C[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80185384[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_8018538C[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80185440[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80185448[])(void); +extern void func_80169F00(void *a0); +extern char D_801853F8[]; +extern char D_801853B8[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80185480[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_8018548C[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_801854D4[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80185494[]; + extern u8 D_801854A4[]; + extern u8 D_801C5130[]; + extern u8 D_801C5158[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80185494, D_801C5130) + 3; + func_8001CE28(obj, D_801C5130); + } else { + var_s3 = func_80024054(D_801854A4, D_801C5158) + 9; + func_8001CE28(obj, D_801C5158); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80185550[])(void); + +void func_8016B4BC(void *a0) { + D_80185550[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801C5180; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801C5180); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80185544[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80185544; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80185588[]; +extern unsigned short D_80185590[]; +extern unsigned short D_80185598[]; +extern unsigned char D_801C5188[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801C5188 + param_2 * 0x40); + puVar3 = D_80185588[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80185590[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80185598[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801C5180; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801C5180, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_801855A0[])(void); + +void func_8016BBA4(void *a0) { + D_801855A0[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801C52BC; + extern u8 D_801C52BD; + extern u8 D_801C52BE; + extern M2C_UNK D_801C52C0; + extern u8 D_801C52C1; + extern u8 D_801C52C2; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801C52BC) = 0x20; + D_801C52BD = 0x20; + D_801C52BE = 0; + (*(u8 *)&D_801C52C0) = 0xc0; + D_801C52C1 = 0xc0; + D_801C52C2 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801C52BC; +extern M2C_UNK D_801C52C0; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801C52BC, &D_801C52C0, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801C52BD; + extern u8 D_801C52BE; + extern u8 D_801C52C1; + extern u8 D_801C52C2; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801C52BC); + if (*p1 != 0) *p1 -= 4; + if (D_801C52BD != 0) D_801C52BD -= 4; + if (D_801C52BE != 0) D_801C52BE -= 4; + p2 = &(*(u8 *)&D_801C52C0); + if (*p2 != 0) *p2 -= 4; + if (D_801C52C1 != 0) D_801C52C1 -= 4; + if (D_801C52C2 != 0) D_801C52C2 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801C52BC), &(*(int *)&D_801C52C0), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801C5248; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801C5248); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_801855B0; + extern s32 D_801855B8; + extern s32 D_801855C0; + extern s32 D_801855C8; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_801855B0, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_801855B8, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_801855C0, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_801855C8, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_801855D0[])(void); + +void func_8016C14C(void *a0) { + D_801855D0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801C52C4[]; +extern u8 D_801C52CC[]; +extern u8 D_801C527C[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801C52C4, D_801C52CC, D_801C527C); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801C52D8[]; + extern u8 D_801C5398; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801C52D8[1] = 0xff; + D_801C52D8[2] = 0x10; + D_801C52D8[0] = 0x10; + D_801C52D8[6] = 0; + D_801C52D8[5] = 0; + D_801C52D8[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801C52D8, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801C5398, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801C52D8); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8016AB6C", func_8016C998); + + +extern void (*D_801855D8[])(void); + +void func_8016CB84(void *a0) { + D_801855D8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801C5398[]; + + + Blk_8016CF04_8016CF04 *p = &D_801C5398[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_801855F4[])(void); + +void func_8016D19C(void *a0) { + D_801855F4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_801855FC[])(void); + +void func_8016D428(void *a0) { + D_801855FC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80185664[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80185664[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80185608; +extern u8 D_80185614; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80185608, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80185614); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80185698[])(void); + +void func_8016DEA4(void *a0) { + D_80185698[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_801856A0[])(void); + +void func_8016DF20(void *a0) { + D_801856A0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_801856F4[])(void); + +void func_8016E5B8(void *a0) { + D_801856F4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_801856B4[4]; + extern s32 D_801856D4; + extern s32 D_801856DC; + extern s32 D_801856E4; + extern s32 D_801856EC; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_801856B4[0], pp, &tmp); + RotTransSV(&D_801856B4[1], &prim.v[1], &tmp); + RotTransSV(&D_801856B4[2], &prim.v[2], &tmp); + RotTransSV(&D_801856B4[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_801856D4; + prim.f1 = D_801856DC; + prim.f2 = D_801856E4; + prim.f3 = D_801856EC; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80185734[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80185734[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80185728[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80185728[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80185718[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80185718[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80185728[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80185728[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80185728[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80185744; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80185744; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_801857BC[])(void); + +void func_8016F6E0(void *a0) { + D_801857BC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_801857C4[])(void); + +void func_8016F798(void *a0) { + D_801857C4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_801857CC[])(void); + +void func_8016F834(void *a0) { + D_801857CC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_801857D4[])(void); + +void func_8016F8E4(void *a0) { + D_801857D4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_801857DC[])(void); + +void func_8016F9C4(void *a0) { + D_801857DC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_801857E4[])(void); + +void func_8016FA84(void *a0) { + D_801857E4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_801857F0[])(void); + +void func_8016FB7C(void *a0) { + D_801857F0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_801857FC[])(void); + +void func_8016FC90(void *a0) { + D_801857FC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80185808[])(void); + +void func_8016FDB4(void *a0) { + D_80185808[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80185818[])(void); + +void func_8016FF30(void *a0) { + D_80185818[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80185828[])(void); + +void func_8016FFDC(void *a0) { + D_80185828[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80185830[])(void); + +void func_80170150(void *a0) { + D_80185830[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80185838[])(void); + +void func_80170240(void *a0) { + D_80185838[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80185840[])(void); + +void func_801702FC(void *a0) { + D_80185840[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80185848[])(void); + +void func_801703E0(void *a0) { + D_80185848[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80185850[])(void); + +void func_801704B0(void *a0) { + D_80185850[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80185858[])(void); + +void func_80170548(void *a0) { + D_80185858[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80185860[])(void); + +void func_801705F8(void *a0) { + D_80185860[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80185868[])(void); + +void func_801706AC(void *a0) { + D_80185868[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80185870[])(void); + +void func_80170748(void *a0) { + D_80185870[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80185878[])(void); + +void func_80170810(void *a0) { + D_80185878[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80185880[])(void); + +void func_80170AD8(void *a0) { + D_80185880[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80185888[])(void); + +void func_80170BD8(void *a0) { + D_80185888[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80185890[])(void); + +void func_80170C74(void *a0) { + D_80185890[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80185898[])(void); + +void func_80170D68(void *a0) { + D_80185898[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_801858A0[])(void); + +void func_80170E34(void *a0) { + D_801858A0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_801858A8[])(void); + +void func_80170EFC(void *a0) { + D_801858A8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_801858B0[])(void); + +void func_80170FB0(void *a0) { + D_801858B0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_801858B8[])(void); + +void func_80171064(void *a0) { + D_801858B8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_801858C0[])(void); + +void func_80171120(void *a0) { + D_801858C0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_801858C8[])(void); + +void func_801711C0(void *a0) { + D_801858C8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_801858D0[])(void); + +void func_80171260(void *a0) { + D_801858D0[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_801858D8[])(void); + +void func_801714E4(void *a0) { + D_801858D8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8016AB6C", func_80172C50); + + +extern void (*D_8018591C[])(void); + +void func_80172CA0(void *a0) { + D_8018591C[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_801858E0; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_801858E0); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_089/ov_SC03_089_jr_8015AE2C.c b/src/ov_SC03_089/ov_SC03_089_jr_8015AE2C.c index 4ca0c8d5b..41b5f33ad 100644 --- a/src/ov_SC03_089/ov_SC03_089_jr_8015AE2C.c +++ b/src/ov_SC03_089/ov_SC03_089_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_8018C7D0[])(void); void func_8016AB30(void *a0) { D_8018C7D0[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_8018C84C[])(void); - -void func_8016B4BC(void *a0) { - D_8018C84C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801C5A38; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801C5A38); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_8018C840[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_8018C840; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_8018C884[]; -extern unsigned short D_8018C88C[]; -extern unsigned short D_8018C894[]; -extern unsigned char D_801C5A40[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801C5A40 + param_2 * 0x40); - puVar3 = D_8018C884[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_8018C88C[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_8018C894[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801C5A38; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801C5A38, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_8018C89C[])(void); - -void func_8016BBA4(void *a0) { - D_8018C89C[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801C5B74; - extern u8 D_801C5B75; - extern u8 D_801C5B76; - extern M2C_UNK D_801C5B78; - extern u8 D_801C5B79; - extern u8 D_801C5B7A; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801C5B74) = 0x20; - D_801C5B75 = 0x20; - D_801C5B76 = 0; - (*(u8 *)&D_801C5B78) = 0xc0; - D_801C5B79 = 0xc0; - D_801C5B7A = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801C5B74; -extern M2C_UNK D_801C5B78; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801C5B74, &D_801C5B78, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801C5B75; - extern u8 D_801C5B76; - extern u8 D_801C5B79; - extern u8 D_801C5B7A; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801C5B74); - if (*p1 != 0) *p1 -= 4; - if (D_801C5B75 != 0) D_801C5B75 -= 4; - if (D_801C5B76 != 0) D_801C5B76 -= 4; - p2 = &(*(u8 *)&D_801C5B78); - if (*p2 != 0) *p2 -= 4; - if (D_801C5B79 != 0) D_801C5B79 -= 4; - if (D_801C5B7A != 0) D_801C5B7A -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801C5B74), &(*(int *)&D_801C5B78), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801C5B00; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801C5B00); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_8018C8AC; - extern s32 D_8018C8B4; - extern s32 D_8018C8BC; - extern s32 D_8018C8C4; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_8018C8AC, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_8018C8B4, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_8018C8BC, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_8018C8C4, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_8018C8CC[])(void); - -void func_8016C14C(void *a0) { - D_8018C8CC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801C5B7C[]; -extern u8 D_801C5B84[]; -extern u8 D_801C5B34[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801C5B7C, D_801C5B84, D_801C5B34); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801C5B90[]; - extern u8 D_801C5C50; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801C5B90[1] = 0xff; - D_801C5B90[2] = 0x10; - D_801C5B90[0] = 0x10; - D_801C5B90[6] = 0; - D_801C5B90[5] = 0; - D_801C5B90[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801C5B90, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801C5C50, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801C5B90); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8015AE2C", func_8016C998); - - -extern void (*D_8018C8D4[])(void); - -void func_8016CB84(void *a0) { - D_8018C8D4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801C5C50[]; - - - Blk_8016CF04_8016CF04 *p = &D_801C5C50[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_8018C8F0[])(void); - -void func_8016D19C(void *a0) { - D_8018C8F0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_8018C8F8[])(void); - -void func_8016D428(void *a0) { - D_8018C8F8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_8018C960[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_8018C960[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_8018C904; -extern u8 D_8018C910; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018C904, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018C910); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8015AE2C", func_8016DC20); - - -extern void (*D_8018C994[])(void); - -void func_8016DEA4(void *a0) { - D_8018C994[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_8018C99C[])(void); - -void func_8016DF20(void *a0) { - D_8018C99C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_8018C9F0[])(void); - -void func_8016E5B8(void *a0) { - D_8018C9F0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_8018C9B0[4]; - extern s32 D_8018C9D0; - extern s32 D_8018C9D8; - extern s32 D_8018C9E0; - extern s32 D_8018C9E8; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_8018C9B0[0], pp, &tmp); - RotTransSV(&D_8018C9B0[1], &prim.v[1], &tmp); - RotTransSV(&D_8018C9B0[2], &prim.v[2], &tmp); - RotTransSV(&D_8018C9B0[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_8018C9D0; - prim.f1 = D_8018C9D8; - prim.f2 = D_8018C9E0; - prim.f3 = D_8018C9E8; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_8018CA30[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_8018CA30[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_8018CA24[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_8018CA24[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_8018CA14[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_8018CA14[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018CA24[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_8018CA24[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_8018CA24[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_8018CA40; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_8018CA40; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_8018CAB8[])(void); - -void func_8016F6E0(void *a0) { - D_8018CAB8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_8018CAC0[])(void); - -void func_8016F798(void *a0) { - D_8018CAC0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_8018CAC8[])(void); - -void func_8016F834(void *a0) { - D_8018CAC8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_8018CAD0[])(void); - -void func_8016F8E4(void *a0) { - D_8018CAD0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_8018CAD8[])(void); - -void func_8016F9C4(void *a0) { - D_8018CAD8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_8018CAE0[])(void); - -void func_8016FA84(void *a0) { - D_8018CAE0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_8018CAEC[])(void); - -void func_8016FB7C(void *a0) { - D_8018CAEC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_8018CAF8[])(void); - -void func_8016FC90(void *a0) { - D_8018CAF8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_8018CB04[])(void); - -void func_8016FDB4(void *a0) { - D_8018CB04[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_8018CB14[])(void); - -void func_8016FF30(void *a0) { - D_8018CB14[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_8018CB24[])(void); - -void func_8016FFDC(void *a0) { - D_8018CB24[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_8018CB2C[])(void); - -void func_80170150(void *a0) { - D_8018CB2C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_8018CB34[])(void); - -void func_80170240(void *a0) { - D_8018CB34[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_8018CB3C[])(void); - -void func_801702FC(void *a0) { - D_8018CB3C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_8018CB44[])(void); - -void func_801703E0(void *a0) { - D_8018CB44[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_8018CB4C[])(void); - -void func_801704B0(void *a0) { - D_8018CB4C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_8018CB54[])(void); - -void func_80170548(void *a0) { - D_8018CB54[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_8018CB5C[])(void); - -void func_801705F8(void *a0) { - D_8018CB5C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_8018CB64[])(void); - -void func_801706AC(void *a0) { - D_8018CB64[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_8018CB6C[])(void); - -void func_80170748(void *a0) { - D_8018CB6C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_8018CB74[])(void); - -void func_80170810(void *a0) { - D_8018CB74[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_8018CB7C[])(void); - -void func_80170AD8(void *a0) { - D_8018CB7C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_8018CB84[])(void); - -void func_80170BD8(void *a0) { - D_8018CB84[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_8018CB8C[])(void); - -void func_80170C74(void *a0) { - D_8018CB8C[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8015AE2C", func_80170CF0); - - -extern void (*D_8018CB94[])(void); - -void func_80170D68(void *a0) { - D_8018CB94[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_8018CB9C[])(void); - -void func_80170E34(void *a0) { - D_8018CB9C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_8018CBA4[])(void); - -void func_80170EFC(void *a0) { - D_8018CBA4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_8018CBAC[])(void); - -void func_80170FB0(void *a0) { - D_8018CBAC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_8018CBB4[])(void); - -void func_80171064(void *a0) { - D_8018CBB4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_8018CBBC[])(void); - -void func_80171120(void *a0) { - D_8018CBBC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_8018CBC4[])(void); - -void func_801711C0(void *a0) { - D_8018CBC4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_8018CBCC[])(void); - -void func_80171260(void *a0) { - D_8018CBCC[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_8018CBD4[])(void); - -void func_801714E4(void *a0) { - D_8018CBD4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8015AE2C", func_80172C50); - - -extern void (*D_8018CC18[])(void); - -void func_80172CA0(void *a0) { - D_8018CC18[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_8018CBDC; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_8018CBDC); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_089/ov_SC03_089_jr_8016AB6C.c b/src/ov_SC03_089/ov_SC03_089_jr_8016AB6C.c new file mode 100644 index 000000000..282501f10 --- /dev/null +++ b/src/ov_SC03_089/ov_SC03_089_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018BB9C; +extern u8 D_8018BB0C; +extern u8 D_8018BAE8; +extern u8 D_8018BAC4; +extern u8 D_8018BB78; +extern u8 D_8018BB54; +extern u8 D_8018BB30; +extern u8 D_8018BAA0; +extern void func_80145934(void); +extern u8 D_8018BC2C; +extern u8 D_8018BC08; +extern u8 D_8018BBE4; +extern u8 D_8018BBC0; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018B024[]; +extern unsigned char D_8018B054[]; +extern unsigned char D_8018B0A4[]; +extern unsigned char D_8018B0D4[]; +extern unsigned char D_8018B104[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018B154[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018B21C[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018B2A4[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018B2AC; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801C55C8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801C55CC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018B2DC; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018B384[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018B3A8[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018B398; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018B3BC[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018B3C8[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018B3D8[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018B3F0[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018B3E0; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018B404[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018B420[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018B410; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018B434[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018B448[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018B45C; +extern void (*D_8018B484[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018B464; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018B4D0[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018B4D4[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018B938[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018B948[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801C5600; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018B970[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018B950; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018B960; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018B9B0[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018B9B8[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018B984; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018B9C4[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018B994; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801C5608; +extern s32 D_801C5614; +extern s32 D_801C5618; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018BA00[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018B9D4[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801C5610; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018BC50[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018BA70[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018BCF4[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018BE48[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018BC64; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018BE50[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018BC74; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018BC94; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_8018BE58[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_8018BE80[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_8018BE8C[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_8018BD00[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_8018BF30; +extern void func_8015D380(s32 a0); +extern unsigned char D_8018B014[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_8018BF44[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_8018BF80[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_8018BFC8; +extern u16 D_8018BFCA; +extern u16 D_8018BFCC; +extern s32 D_8018BFD0; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_8018BFD8; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_8018BCE4; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_8018C05C[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_8018C10C[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_8018C13C[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_8018C1A0; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801C5620[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_8018C1C4[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801C5678[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_8018C20C[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_8018C1FC; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801C4E8C[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_8018C214[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_8018C268[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_8018C230; +extern s16 D_8018C264; +extern s16 D_8018C262; +extern s16 D_8018C260; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_8018C274[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801C56D8; +extern u8 D_801C56D9; +extern u8 D_801C56DA; +extern u8 D_801C56DB; +extern u8 D_801C56DC; +extern u8 D_801C56DD; +extern u8 D_801C56DE; +extern u8 D_801C56DF; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_8018C284[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801C5718; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_8018C2C8[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_8018C344[]; +extern s32 D_8018C364[]; +extern u8 D_8018C3E0[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_8018C400[]; +extern u8 D_8018C420[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_8018C4BC[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_8018C538[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801C4E9C; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_8018C544[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_8018C54C[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_8018C614[])(void); +extern void func_80166618(void *a0); +extern void (*D_8018C624[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_8018C634[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_8018C640[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_8018C5A0[]; +extern u8 D_8018C5B4[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_8018C658[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_8018C660[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_8018C668[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_8018C670[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_8018C678[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_8018C680[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_8018C688[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_8018C73C[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_8018C744[])(void); +extern void func_80169F00(void *a0); +extern char D_8018C6F4[]; +extern char D_8018C6B4[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_8018C77C[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_8018C788[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_8018C7D0[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_8018C790[]; + extern u8 D_8018C7A0[]; + extern u8 D_801C59E8[]; + extern u8 D_801C5A10[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_8018C790, D_801C59E8) + 3; + func_8001CE28(obj, D_801C59E8); + } else { + var_s3 = func_80024054(D_8018C7A0, D_801C5A10) + 9; + func_8001CE28(obj, D_801C5A10); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_8018C84C[])(void); + +void func_8016B4BC(void *a0) { + D_8018C84C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801C5A38; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801C5A38); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_8018C840[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_8018C840; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_8018C884[]; +extern unsigned short D_8018C88C[]; +extern unsigned short D_8018C894[]; +extern unsigned char D_801C5A40[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801C5A40 + param_2 * 0x40); + puVar3 = D_8018C884[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_8018C88C[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_8018C894[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801C5A38; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801C5A38, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_8018C89C[])(void); + +void func_8016BBA4(void *a0) { + D_8018C89C[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801C5B74; + extern u8 D_801C5B75; + extern u8 D_801C5B76; + extern M2C_UNK D_801C5B78; + extern u8 D_801C5B79; + extern u8 D_801C5B7A; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801C5B74) = 0x20; + D_801C5B75 = 0x20; + D_801C5B76 = 0; + (*(u8 *)&D_801C5B78) = 0xc0; + D_801C5B79 = 0xc0; + D_801C5B7A = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801C5B74; +extern M2C_UNK D_801C5B78; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801C5B74, &D_801C5B78, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801C5B75; + extern u8 D_801C5B76; + extern u8 D_801C5B79; + extern u8 D_801C5B7A; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801C5B74); + if (*p1 != 0) *p1 -= 4; + if (D_801C5B75 != 0) D_801C5B75 -= 4; + if (D_801C5B76 != 0) D_801C5B76 -= 4; + p2 = &(*(u8 *)&D_801C5B78); + if (*p2 != 0) *p2 -= 4; + if (D_801C5B79 != 0) D_801C5B79 -= 4; + if (D_801C5B7A != 0) D_801C5B7A -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801C5B74), &(*(int *)&D_801C5B78), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801C5B00; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801C5B00); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_8018C8AC; + extern s32 D_8018C8B4; + extern s32 D_8018C8BC; + extern s32 D_8018C8C4; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_8018C8AC, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_8018C8B4, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_8018C8BC, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_8018C8C4, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_8018C8CC[])(void); + +void func_8016C14C(void *a0) { + D_8018C8CC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801C5B7C[]; +extern u8 D_801C5B84[]; +extern u8 D_801C5B34[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801C5B7C, D_801C5B84, D_801C5B34); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801C5B90[]; + extern u8 D_801C5C50; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801C5B90[1] = 0xff; + D_801C5B90[2] = 0x10; + D_801C5B90[0] = 0x10; + D_801C5B90[6] = 0; + D_801C5B90[5] = 0; + D_801C5B90[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801C5B90, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801C5C50, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801C5B90); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8016AB6C", func_8016C998); + + +extern void (*D_8018C8D4[])(void); + +void func_8016CB84(void *a0) { + D_8018C8D4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801C5C50[]; + + + Blk_8016CF04_8016CF04 *p = &D_801C5C50[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_8018C8F0[])(void); + +void func_8016D19C(void *a0) { + D_8018C8F0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_8018C8F8[])(void); + +void func_8016D428(void *a0) { + D_8018C8F8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018C960[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_8018C960[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_8018C904; +extern u8 D_8018C910; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018C904, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018C910); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8016AB6C", func_8016DC20); + + +extern void (*D_8018C994[])(void); + +void func_8016DEA4(void *a0) { + D_8018C994[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_8018C99C[])(void); + +void func_8016DF20(void *a0) { + D_8018C99C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_8018C9F0[])(void); + +void func_8016E5B8(void *a0) { + D_8018C9F0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_8018C9B0[4]; + extern s32 D_8018C9D0; + extern s32 D_8018C9D8; + extern s32 D_8018C9E0; + extern s32 D_8018C9E8; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_8018C9B0[0], pp, &tmp); + RotTransSV(&D_8018C9B0[1], &prim.v[1], &tmp); + RotTransSV(&D_8018C9B0[2], &prim.v[2], &tmp); + RotTransSV(&D_8018C9B0[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_8018C9D0; + prim.f1 = D_8018C9D8; + prim.f2 = D_8018C9E0; + prim.f3 = D_8018C9E8; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_8018CA30[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_8018CA30[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_8018CA24[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_8018CA24[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_8018CA14[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_8018CA14[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018CA24[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_8018CA24[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_8018CA24[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_8018CA40; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_8018CA40; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_8018CAB8[])(void); + +void func_8016F6E0(void *a0) { + D_8018CAB8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_8018CAC0[])(void); + +void func_8016F798(void *a0) { + D_8018CAC0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_8018CAC8[])(void); + +void func_8016F834(void *a0) { + D_8018CAC8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_8018CAD0[])(void); + +void func_8016F8E4(void *a0) { + D_8018CAD0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_8018CAD8[])(void); + +void func_8016F9C4(void *a0) { + D_8018CAD8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_8018CAE0[])(void); + +void func_8016FA84(void *a0) { + D_8018CAE0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_8018CAEC[])(void); + +void func_8016FB7C(void *a0) { + D_8018CAEC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_8018CAF8[])(void); + +void func_8016FC90(void *a0) { + D_8018CAF8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_8018CB04[])(void); + +void func_8016FDB4(void *a0) { + D_8018CB04[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_8018CB14[])(void); + +void func_8016FF30(void *a0) { + D_8018CB14[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_8018CB24[])(void); + +void func_8016FFDC(void *a0) { + D_8018CB24[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_8018CB2C[])(void); + +void func_80170150(void *a0) { + D_8018CB2C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_8018CB34[])(void); + +void func_80170240(void *a0) { + D_8018CB34[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_8018CB3C[])(void); + +void func_801702FC(void *a0) { + D_8018CB3C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_8018CB44[])(void); + +void func_801703E0(void *a0) { + D_8018CB44[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_8018CB4C[])(void); + +void func_801704B0(void *a0) { + D_8018CB4C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_8018CB54[])(void); + +void func_80170548(void *a0) { + D_8018CB54[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_8018CB5C[])(void); + +void func_801705F8(void *a0) { + D_8018CB5C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_8018CB64[])(void); + +void func_801706AC(void *a0) { + D_8018CB64[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_8018CB6C[])(void); + +void func_80170748(void *a0) { + D_8018CB6C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_8018CB74[])(void); + +void func_80170810(void *a0) { + D_8018CB74[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_8018CB7C[])(void); + +void func_80170AD8(void *a0) { + D_8018CB7C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_8018CB84[])(void); + +void func_80170BD8(void *a0) { + D_8018CB84[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_8018CB8C[])(void); + +void func_80170C74(void *a0) { + D_8018CB8C[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8016AB6C", func_80170CF0); + + +extern void (*D_8018CB94[])(void); + +void func_80170D68(void *a0) { + D_8018CB94[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_8018CB9C[])(void); + +void func_80170E34(void *a0) { + D_8018CB9C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_8018CBA4[])(void); + +void func_80170EFC(void *a0) { + D_8018CBA4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_8018CBAC[])(void); + +void func_80170FB0(void *a0) { + D_8018CBAC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_8018CBB4[])(void); + +void func_80171064(void *a0) { + D_8018CBB4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_8018CBBC[])(void); + +void func_80171120(void *a0) { + D_8018CBBC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_8018CBC4[])(void); + +void func_801711C0(void *a0) { + D_8018CBC4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_8018CBCC[])(void); + +void func_80171260(void *a0) { + D_8018CBCC[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_8018CBD4[])(void); + +void func_801714E4(void *a0) { + D_8018CBD4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8016AB6C", func_80172C50); + + +extern void (*D_8018CC18[])(void); + +void func_80172CA0(void *a0) { + D_8018CC18[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_8018CBDC; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_8018CBDC); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_090/ov_SC03_090_jr_8015AE2C.c b/src/ov_SC03_090/ov_SC03_090_jr_8015AE2C.c index b286b8027..93f7a8c8d 100644 --- a/src/ov_SC03_090/ov_SC03_090_jr_8015AE2C.c +++ b/src/ov_SC03_090/ov_SC03_090_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_8018EBF4[])(void); void func_8016AB30(void *a0) { D_8018EBF4[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_8018EC70[])(void); - -void func_8016B4BC(void *a0) { - D_8018EC70[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801CAEA0; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801CAEA0); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_8018EC64[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_8018EC64; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_8018ECA8[]; -extern unsigned short D_8018ECB0[]; -extern unsigned short D_8018ECB8[]; -extern unsigned char D_801CAEA8[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801CAEA8 + param_2 * 0x40); - puVar3 = D_8018ECA8[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_8018ECB0[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_8018ECB8[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801CAEA0; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801CAEA0, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_8018ECC0[])(void); - -void func_8016BBA4(void *a0) { - D_8018ECC0[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801CAFDC; - extern u8 D_801CAFDD; - extern u8 D_801CAFDE; - extern M2C_UNK D_801CAFE0; - extern u8 D_801CAFE1; - extern u8 D_801CAFE2; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801CAFDC) = 0x20; - D_801CAFDD = 0x20; - D_801CAFDE = 0; - (*(u8 *)&D_801CAFE0) = 0xc0; - D_801CAFE1 = 0xc0; - D_801CAFE2 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801CAFDC; -extern M2C_UNK D_801CAFE0; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801CAFDC, &D_801CAFE0, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801CAFDD; - extern u8 D_801CAFDE; - extern u8 D_801CAFE1; - extern u8 D_801CAFE2; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801CAFDC); - if (*p1 != 0) *p1 -= 4; - if (D_801CAFDD != 0) D_801CAFDD -= 4; - if (D_801CAFDE != 0) D_801CAFDE -= 4; - p2 = &(*(u8 *)&D_801CAFE0); - if (*p2 != 0) *p2 -= 4; - if (D_801CAFE1 != 0) D_801CAFE1 -= 4; - if (D_801CAFE2 != 0) D_801CAFE2 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801CAFDC), &(*(int *)&D_801CAFE0), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801CAF68; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801CAF68); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_8018ECD0; - extern s32 D_8018ECD8; - extern s32 D_8018ECE0; - extern s32 D_8018ECE8; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_8018ECD0, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_8018ECD8, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_8018ECE0, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_8018ECE8, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_8018ECF0[])(void); - -void func_8016C14C(void *a0) { - D_8018ECF0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801CAFE4[]; -extern u8 D_801CAFEC[]; -extern u8 D_801CAF9C[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801CAFE4, D_801CAFEC, D_801CAF9C); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801CAFF8[]; - extern u8 D_801CB0B8; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801CAFF8[1] = 0xff; - D_801CAFF8[2] = 0x10; - D_801CAFF8[0] = 0x10; - D_801CAFF8[6] = 0; - D_801CAFF8[5] = 0; - D_801CAFF8[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801CAFF8, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801CB0B8, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801CAFF8); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8015AE2C", func_8016C998); - - -extern void (*D_8018ECF8[])(void); - -void func_8016CB84(void *a0) { - D_8018ECF8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801CB0B8[]; - - - Blk_8016CF04_8016CF04 *p = &D_801CB0B8[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_8018ED14[])(void); - -void func_8016D19C(void *a0) { - D_8018ED14[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_8018ED1C[])(void); - -void func_8016D428(void *a0) { - D_8018ED1C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_8018ED84[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_8018ED84[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_8018ED28; -extern u8 D_8018ED34; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018ED28, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018ED34); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8015AE2C", func_8016DC20); - - -extern void (*D_8018EDB8[])(void); - -void func_8016DEA4(void *a0) { - D_8018EDB8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_8018EDC0[])(void); - -void func_8016DF20(void *a0) { - D_8018EDC0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_8018EE14[])(void); - -void func_8016E5B8(void *a0) { - D_8018EE14[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_8018EDD4[4]; - extern s32 D_8018EDF4; - extern s32 D_8018EDFC; - extern s32 D_8018EE04; - extern s32 D_8018EE0C; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_8018EDD4[0], pp, &tmp); - RotTransSV(&D_8018EDD4[1], &prim.v[1], &tmp); - RotTransSV(&D_8018EDD4[2], &prim.v[2], &tmp); - RotTransSV(&D_8018EDD4[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_8018EDF4; - prim.f1 = D_8018EDFC; - prim.f2 = D_8018EE04; - prim.f3 = D_8018EE0C; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_8018EE54[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_8018EE54[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_8018EE48[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_8018EE48[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_8018EE38[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_8018EE38[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018EE48[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_8018EE48[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_8018EE48[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_8018EE64; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_8018EE64; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_8018EEDC[])(void); - -void func_8016F6E0(void *a0) { - D_8018EEDC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_8018EEE4[])(void); - -void func_8016F798(void *a0) { - D_8018EEE4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_8018EEEC[])(void); - -void func_8016F834(void *a0) { - D_8018EEEC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_8018EEF4[])(void); - -void func_8016F8E4(void *a0) { - D_8018EEF4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_8018EEFC[])(void); - -void func_8016F9C4(void *a0) { - D_8018EEFC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_8018EF04[])(void); - -void func_8016FA84(void *a0) { - D_8018EF04[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_8018EF10[])(void); - -void func_8016FB7C(void *a0) { - D_8018EF10[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_8018EF1C[])(void); - -void func_8016FC90(void *a0) { - D_8018EF1C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_8018EF28[])(void); - -void func_8016FDB4(void *a0) { - D_8018EF28[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_8018EF38[])(void); - -void func_8016FF30(void *a0) { - D_8018EF38[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_8018EF48[])(void); - -void func_8016FFDC(void *a0) { - D_8018EF48[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_8018EF50[])(void); - -void func_80170150(void *a0) { - D_8018EF50[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_8018EF58[])(void); - -void func_80170240(void *a0) { - D_8018EF58[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_8018EF60[])(void); - -void func_801702FC(void *a0) { - D_8018EF60[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_8018EF68[])(void); - -void func_801703E0(void *a0) { - D_8018EF68[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_8018EF70[])(void); - -void func_801704B0(void *a0) { - D_8018EF70[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_8018EF78[])(void); - -void func_80170548(void *a0) { - D_8018EF78[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_8018EF80[])(void); - -void func_801705F8(void *a0) { - D_8018EF80[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_8018EF88[])(void); - -void func_801706AC(void *a0) { - D_8018EF88[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_8018EF90[])(void); - -void func_80170748(void *a0) { - D_8018EF90[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_8018EF98[])(void); - -void func_80170810(void *a0) { - D_8018EF98[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_8018EFA0[])(void); - -void func_80170AD8(void *a0) { - D_8018EFA0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_8018EFA8[])(void); - -void func_80170BD8(void *a0) { - D_8018EFA8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_8018EFB0[])(void); - -void func_80170C74(void *a0) { - D_8018EFB0[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8015AE2C", func_80170CF0); - - -extern void (*D_8018EFB8[])(void); - -void func_80170D68(void *a0) { - D_8018EFB8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_8018EFC0[])(void); - -void func_80170E34(void *a0) { - D_8018EFC0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_8018EFC8[])(void); - -void func_80170EFC(void *a0) { - D_8018EFC8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_8018EFD0[])(void); - -void func_80170FB0(void *a0) { - D_8018EFD0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_8018EFD8[])(void); - -void func_80171064(void *a0) { - D_8018EFD8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_8018EFE0[])(void); - -void func_80171120(void *a0) { - D_8018EFE0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_8018EFE8[])(void); - -void func_801711C0(void *a0) { - D_8018EFE8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_8018EFF0[])(void); - -void func_80171260(void *a0) { - D_8018EFF0[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_8018EFF8[])(void); - -void func_801714E4(void *a0) { - D_8018EFF8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8015AE2C", func_80172C50); - - -extern void (*D_8018F03C[])(void); - -void func_80172CA0(void *a0) { - D_8018F03C[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_8018F000; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_8018F000); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_090/ov_SC03_090_jr_8016AB6C.c b/src/ov_SC03_090/ov_SC03_090_jr_8016AB6C.c new file mode 100644 index 000000000..a74fa2f82 --- /dev/null +++ b/src/ov_SC03_090/ov_SC03_090_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018DFC0; +extern u8 D_8018DF30; +extern u8 D_8018DF0C; +extern u8 D_8018DEE8; +extern u8 D_8018DF9C; +extern u8 D_8018DF78; +extern u8 D_8018DF54; +extern u8 D_8018DEC4; +extern void func_80145934(void); +extern u8 D_8018E050; +extern u8 D_8018E02C; +extern u8 D_8018E008; +extern u8 D_8018DFE4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018D448[]; +extern unsigned char D_8018D478[]; +extern unsigned char D_8018D4C8[]; +extern unsigned char D_8018D4F8[]; +extern unsigned char D_8018D528[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018D578[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018D640[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018D6C8[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018D6D0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801CAA30; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801CAA34; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018D700; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018D7A8[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018D7CC[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018D7BC; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018D7E0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018D7EC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018D7FC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018D814[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018D804; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018D828[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018D844[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018D834; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018D858[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018D86C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018D880; +extern void (*D_8018D8A8[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018D888; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018D8F4[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018D8F8[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018DD5C[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018DD6C[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801CAA68; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018DD94[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018DD74; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018DD84; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018DDD4[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018DDDC[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018DDA8; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018DDE8[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018DDB8; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801CAA70; +extern s32 D_801CAA7C; +extern s32 D_801CAA80; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018DE24[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018DDF8[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801CAA78; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018E074[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018DE94[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018E118[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018E26C[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018E088; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018E274[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018E098; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018E0B8; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_8018E27C[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_8018E2A4[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_8018E2B0[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_8018E124[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_8018E354; +extern void func_8015D380(s32 a0); +extern unsigned char D_8018D438[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_8018E368[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_8018E3A4[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_8018E3EC; +extern u16 D_8018E3EE; +extern u16 D_8018E3F0; +extern s32 D_8018E3F4; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_8018E3FC; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_8018E108; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_8018E480[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_8018E530[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_8018E560[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_8018E5C4; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801CAA88[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_8018E5E8[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801CAAE0[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_8018E630[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_8018E620; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801CA2F8[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_8018E638[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_8018E68C[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_8018E654; +extern s16 D_8018E688; +extern s16 D_8018E686; +extern s16 D_8018E684; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_8018E698[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801CAB40; +extern u8 D_801CAB41; +extern u8 D_801CAB42; +extern u8 D_801CAB43; +extern u8 D_801CAB44; +extern u8 D_801CAB45; +extern u8 D_801CAB46; +extern u8 D_801CAB47; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_8018E6A8[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801CAB80; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_8018E6EC[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_8018E768[]; +extern s32 D_8018E788[]; +extern u8 D_8018E804[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_8018E824[]; +extern u8 D_8018E844[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_8018E8E0[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_8018E95C[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801CA308; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_8018E968[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_8018E970[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_8018EA38[])(void); +extern void func_80166618(void *a0); +extern void (*D_8018EA48[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_8018EA58[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_8018EA64[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_8018E9C4[]; +extern u8 D_8018E9D8[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_8018EA7C[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_8018EA84[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_8018EA8C[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_8018EA94[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_8018EA9C[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_8018EAA4[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_8018EAAC[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_8018EB60[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_8018EB68[])(void); +extern void func_80169F00(void *a0); +extern char D_8018EB18[]; +extern char D_8018EAD8[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_8018EBA0[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_8018EBAC[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_8018EBF4[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_8018EBB4[]; + extern u8 D_8018EBC4[]; + extern u8 D_801CAE50[]; + extern u8 D_801CAE78[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_8018EBB4, D_801CAE50) + 3; + func_8001CE28(obj, D_801CAE50); + } else { + var_s3 = func_80024054(D_8018EBC4, D_801CAE78) + 9; + func_8001CE28(obj, D_801CAE78); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_8018EC70[])(void); + +void func_8016B4BC(void *a0) { + D_8018EC70[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801CAEA0; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801CAEA0); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_8018EC64[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_8018EC64; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_8018ECA8[]; +extern unsigned short D_8018ECB0[]; +extern unsigned short D_8018ECB8[]; +extern unsigned char D_801CAEA8[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801CAEA8 + param_2 * 0x40); + puVar3 = D_8018ECA8[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_8018ECB0[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_8018ECB8[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801CAEA0; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801CAEA0, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_8018ECC0[])(void); + +void func_8016BBA4(void *a0) { + D_8018ECC0[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801CAFDC; + extern u8 D_801CAFDD; + extern u8 D_801CAFDE; + extern M2C_UNK D_801CAFE0; + extern u8 D_801CAFE1; + extern u8 D_801CAFE2; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801CAFDC) = 0x20; + D_801CAFDD = 0x20; + D_801CAFDE = 0; + (*(u8 *)&D_801CAFE0) = 0xc0; + D_801CAFE1 = 0xc0; + D_801CAFE2 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801CAFDC; +extern M2C_UNK D_801CAFE0; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801CAFDC, &D_801CAFE0, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801CAFDD; + extern u8 D_801CAFDE; + extern u8 D_801CAFE1; + extern u8 D_801CAFE2; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801CAFDC); + if (*p1 != 0) *p1 -= 4; + if (D_801CAFDD != 0) D_801CAFDD -= 4; + if (D_801CAFDE != 0) D_801CAFDE -= 4; + p2 = &(*(u8 *)&D_801CAFE0); + if (*p2 != 0) *p2 -= 4; + if (D_801CAFE1 != 0) D_801CAFE1 -= 4; + if (D_801CAFE2 != 0) D_801CAFE2 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801CAFDC), &(*(int *)&D_801CAFE0), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801CAF68; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801CAF68); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_8018ECD0; + extern s32 D_8018ECD8; + extern s32 D_8018ECE0; + extern s32 D_8018ECE8; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_8018ECD0, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_8018ECD8, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_8018ECE0, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_8018ECE8, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_8018ECF0[])(void); + +void func_8016C14C(void *a0) { + D_8018ECF0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801CAFE4[]; +extern u8 D_801CAFEC[]; +extern u8 D_801CAF9C[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801CAFE4, D_801CAFEC, D_801CAF9C); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801CAFF8[]; + extern u8 D_801CB0B8; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801CAFF8[1] = 0xff; + D_801CAFF8[2] = 0x10; + D_801CAFF8[0] = 0x10; + D_801CAFF8[6] = 0; + D_801CAFF8[5] = 0; + D_801CAFF8[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801CAFF8, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801CB0B8, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801CAFF8); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8016AB6C", func_8016C998); + + +extern void (*D_8018ECF8[])(void); + +void func_8016CB84(void *a0) { + D_8018ECF8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801CB0B8[]; + + + Blk_8016CF04_8016CF04 *p = &D_801CB0B8[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_8018ED14[])(void); + +void func_8016D19C(void *a0) { + D_8018ED14[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_8018ED1C[])(void); + +void func_8016D428(void *a0) { + D_8018ED1C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018ED84[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_8018ED84[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_8018ED28; +extern u8 D_8018ED34; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018ED28, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018ED34); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8016AB6C", func_8016DC20); + + +extern void (*D_8018EDB8[])(void); + +void func_8016DEA4(void *a0) { + D_8018EDB8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_8018EDC0[])(void); + +void func_8016DF20(void *a0) { + D_8018EDC0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_8018EE14[])(void); + +void func_8016E5B8(void *a0) { + D_8018EE14[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_8018EDD4[4]; + extern s32 D_8018EDF4; + extern s32 D_8018EDFC; + extern s32 D_8018EE04; + extern s32 D_8018EE0C; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_8018EDD4[0], pp, &tmp); + RotTransSV(&D_8018EDD4[1], &prim.v[1], &tmp); + RotTransSV(&D_8018EDD4[2], &prim.v[2], &tmp); + RotTransSV(&D_8018EDD4[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_8018EDF4; + prim.f1 = D_8018EDFC; + prim.f2 = D_8018EE04; + prim.f3 = D_8018EE0C; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_8018EE54[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_8018EE54[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_8018EE48[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_8018EE48[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_8018EE38[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_8018EE38[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018EE48[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_8018EE48[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_8018EE48[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_8018EE64; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_8018EE64; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_8018EEDC[])(void); + +void func_8016F6E0(void *a0) { + D_8018EEDC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_8018EEE4[])(void); + +void func_8016F798(void *a0) { + D_8018EEE4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_8018EEEC[])(void); + +void func_8016F834(void *a0) { + D_8018EEEC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_8018EEF4[])(void); + +void func_8016F8E4(void *a0) { + D_8018EEF4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_8018EEFC[])(void); + +void func_8016F9C4(void *a0) { + D_8018EEFC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_8018EF04[])(void); + +void func_8016FA84(void *a0) { + D_8018EF04[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_8018EF10[])(void); + +void func_8016FB7C(void *a0) { + D_8018EF10[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_8018EF1C[])(void); + +void func_8016FC90(void *a0) { + D_8018EF1C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_8018EF28[])(void); + +void func_8016FDB4(void *a0) { + D_8018EF28[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_8018EF38[])(void); + +void func_8016FF30(void *a0) { + D_8018EF38[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_8018EF48[])(void); + +void func_8016FFDC(void *a0) { + D_8018EF48[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_8018EF50[])(void); + +void func_80170150(void *a0) { + D_8018EF50[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_8018EF58[])(void); + +void func_80170240(void *a0) { + D_8018EF58[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_8018EF60[])(void); + +void func_801702FC(void *a0) { + D_8018EF60[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_8018EF68[])(void); + +void func_801703E0(void *a0) { + D_8018EF68[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_8018EF70[])(void); + +void func_801704B0(void *a0) { + D_8018EF70[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_8018EF78[])(void); + +void func_80170548(void *a0) { + D_8018EF78[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_8018EF80[])(void); + +void func_801705F8(void *a0) { + D_8018EF80[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_8018EF88[])(void); + +void func_801706AC(void *a0) { + D_8018EF88[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_8018EF90[])(void); + +void func_80170748(void *a0) { + D_8018EF90[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_8018EF98[])(void); + +void func_80170810(void *a0) { + D_8018EF98[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_8018EFA0[])(void); + +void func_80170AD8(void *a0) { + D_8018EFA0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_8018EFA8[])(void); + +void func_80170BD8(void *a0) { + D_8018EFA8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_8018EFB0[])(void); + +void func_80170C74(void *a0) { + D_8018EFB0[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8016AB6C", func_80170CF0); + + +extern void (*D_8018EFB8[])(void); + +void func_80170D68(void *a0) { + D_8018EFB8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_8018EFC0[])(void); + +void func_80170E34(void *a0) { + D_8018EFC0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_8018EFC8[])(void); + +void func_80170EFC(void *a0) { + D_8018EFC8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_8018EFD0[])(void); + +void func_80170FB0(void *a0) { + D_8018EFD0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_8018EFD8[])(void); + +void func_80171064(void *a0) { + D_8018EFD8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_8018EFE0[])(void); + +void func_80171120(void *a0) { + D_8018EFE0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_8018EFE8[])(void); + +void func_801711C0(void *a0) { + D_8018EFE8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_8018EFF0[])(void); + +void func_80171260(void *a0) { + D_8018EFF0[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_8018EFF8[])(void); + +void func_801714E4(void *a0) { + D_8018EFF8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8016AB6C", func_80172C50); + + +extern void (*D_8018F03C[])(void); + +void func_80172CA0(void *a0) { + D_8018F03C[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_8018F000; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_8018F000); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_091/ov_SC03_091_jr_8015AE2C.c b/src/ov_SC03_091/ov_SC03_091_jr_8015AE2C.c index 7ee8991b4..f0f1f75ff 100644 --- a/src/ov_SC03_091/ov_SC03_091_jr_8015AE2C.c +++ b/src/ov_SC03_091/ov_SC03_091_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_8018FA9C[])(void); void func_8016AB30(void *a0) { D_8018FA9C[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_8018FB18[])(void); - -void func_8016B4BC(void *a0) { - D_8018FB18[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801D1570; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801D1570); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_8018FB0C[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_8018FB0C; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_8018FB50[]; -extern unsigned short D_8018FB58[]; -extern unsigned short D_8018FB60[]; -extern unsigned char D_801D1578[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801D1578 + param_2 * 0x40); - puVar3 = D_8018FB50[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_8018FB58[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_8018FB60[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801D1570; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801D1570, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_8018FB68[])(void); - -void func_8016BBA4(void *a0) { - D_8018FB68[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801D16AC; - extern u8 D_801D16AD; - extern u8 D_801D16AE; - extern M2C_UNK D_801D16B0; - extern u8 D_801D16B1; - extern u8 D_801D16B2; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801D16AC) = 0x20; - D_801D16AD = 0x20; - D_801D16AE = 0; - (*(u8 *)&D_801D16B0) = 0xc0; - D_801D16B1 = 0xc0; - D_801D16B2 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801D16AC; -extern M2C_UNK D_801D16B0; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801D16AC, &D_801D16B0, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801D16AD; - extern u8 D_801D16AE; - extern u8 D_801D16B1; - extern u8 D_801D16B2; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801D16AC); - if (*p1 != 0) *p1 -= 4; - if (D_801D16AD != 0) D_801D16AD -= 4; - if (D_801D16AE != 0) D_801D16AE -= 4; - p2 = &(*(u8 *)&D_801D16B0); - if (*p2 != 0) *p2 -= 4; - if (D_801D16B1 != 0) D_801D16B1 -= 4; - if (D_801D16B2 != 0) D_801D16B2 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801D16AC), &(*(int *)&D_801D16B0), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801D1638; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801D1638); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_8018FB78; - extern s32 D_8018FB80; - extern s32 D_8018FB88; - extern s32 D_8018FB90; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_8018FB78, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_8018FB80, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_8018FB88, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_8018FB90, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_8018FB98[])(void); - -void func_8016C14C(void *a0) { - D_8018FB98[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801D16B4[]; -extern u8 D_801D16BC[]; -extern u8 D_801D166C[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801D16B4, D_801D16BC, D_801D166C); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801D16C8[]; - extern u8 D_801D1788; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801D16C8[1] = 0xff; - D_801D16C8[2] = 0x10; - D_801D16C8[0] = 0x10; - D_801D16C8[6] = 0; - D_801D16C8[5] = 0; - D_801D16C8[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801D16C8, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801D1788, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801D16C8); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8015AE2C", func_8016C998); - - -extern void (*D_8018FBA0[])(void); - -void func_8016CB84(void *a0) { - D_8018FBA0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801D1788[]; - - - Blk_8016CF04_8016CF04 *p = &D_801D1788[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_8018FBBC[])(void); - -void func_8016D19C(void *a0) { - D_8018FBBC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_8018FBC4[])(void); - -void func_8016D428(void *a0) { - D_8018FBC4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_8018FC2C[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_8018FC2C[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_8018FBD0; -extern u8 D_8018FBDC; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018FBD0, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018FBDC); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8015AE2C", func_8016DC20); - - -extern void (*D_8018FC60[])(void); - -void func_8016DEA4(void *a0) { - D_8018FC60[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_8018FC68[])(void); - -void func_8016DF20(void *a0) { - D_8018FC68[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_8018FCBC[])(void); - -void func_8016E5B8(void *a0) { - D_8018FCBC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_8018FC7C[4]; - extern s32 D_8018FC9C; - extern s32 D_8018FCA4; - extern s32 D_8018FCAC; - extern s32 D_8018FCB4; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_8018FC7C[0], pp, &tmp); - RotTransSV(&D_8018FC7C[1], &prim.v[1], &tmp); - RotTransSV(&D_8018FC7C[2], &prim.v[2], &tmp); - RotTransSV(&D_8018FC7C[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_8018FC9C; - prim.f1 = D_8018FCA4; - prim.f2 = D_8018FCAC; - prim.f3 = D_8018FCB4; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_8018FCFC[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_8018FCFC[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_8018FCF0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_8018FCF0[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_8018FCE0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_8018FCE0[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018FCF0[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_8018FCF0[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_8018FCF0[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_8018FD0C; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_8018FD0C; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_8018FD84[])(void); - -void func_8016F6E0(void *a0) { - D_8018FD84[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_8018FD8C[])(void); - -void func_8016F798(void *a0) { - D_8018FD8C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_8018FD94[])(void); - -void func_8016F834(void *a0) { - D_8018FD94[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_8018FD9C[])(void); - -void func_8016F8E4(void *a0) { - D_8018FD9C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_8018FDA4[])(void); - -void func_8016F9C4(void *a0) { - D_8018FDA4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_8018FDAC[])(void); - -void func_8016FA84(void *a0) { - D_8018FDAC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_8018FDB8[])(void); - -void func_8016FB7C(void *a0) { - D_8018FDB8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_8018FDC4[])(void); - -void func_8016FC90(void *a0) { - D_8018FDC4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_8018FDD0[])(void); - -void func_8016FDB4(void *a0) { - D_8018FDD0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_8018FDE0[])(void); - -void func_8016FF30(void *a0) { - D_8018FDE0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_8018FDF0[])(void); - -void func_8016FFDC(void *a0) { - D_8018FDF0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_8018FDF8[])(void); - -void func_80170150(void *a0) { - D_8018FDF8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_8018FE00[])(void); - -void func_80170240(void *a0) { - D_8018FE00[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_8018FE08[])(void); - -void func_801702FC(void *a0) { - D_8018FE08[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_8018FE10[])(void); - -void func_801703E0(void *a0) { - D_8018FE10[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_8018FE18[])(void); - -void func_801704B0(void *a0) { - D_8018FE18[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_8018FE20[])(void); - -void func_80170548(void *a0) { - D_8018FE20[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_8018FE28[])(void); - -void func_801705F8(void *a0) { - D_8018FE28[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_8018FE30[])(void); - -void func_801706AC(void *a0) { - D_8018FE30[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_8018FE38[])(void); - -void func_80170748(void *a0) { - D_8018FE38[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_8018FE40[])(void); - -void func_80170810(void *a0) { - D_8018FE40[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_8018FE48[])(void); - -void func_80170AD8(void *a0) { - D_8018FE48[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_8018FE50[])(void); - -void func_80170BD8(void *a0) { - D_8018FE50[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_8018FE58[])(void); - -void func_80170C74(void *a0) { - D_8018FE58[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8015AE2C", func_80170CF0); - - -extern void (*D_8018FE60[])(void); - -void func_80170D68(void *a0) { - D_8018FE60[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_8018FE68[])(void); - -void func_80170E34(void *a0) { - D_8018FE68[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_8018FE70[])(void); - -void func_80170EFC(void *a0) { - D_8018FE70[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_8018FE78[])(void); - -void func_80170FB0(void *a0) { - D_8018FE78[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_8018FE80[])(void); - -void func_80171064(void *a0) { - D_8018FE80[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_8018FE88[])(void); - -void func_80171120(void *a0) { - D_8018FE88[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_8018FE90[])(void); - -void func_801711C0(void *a0) { - D_8018FE90[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_8018FE98[])(void); - -void func_80171260(void *a0) { - D_8018FE98[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_8018FEA0[])(void); - -void func_801714E4(void *a0) { - D_8018FEA0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8015AE2C", func_80172C50); - - -extern void (*D_8018FEE4[])(void); - -void func_80172CA0(void *a0) { - D_8018FEE4[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_8018FEA8; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_8018FEA8); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_091/ov_SC03_091_jr_8016AB6C.c b/src/ov_SC03_091/ov_SC03_091_jr_8016AB6C.c new file mode 100644 index 000000000..b77c45e99 --- /dev/null +++ b/src/ov_SC03_091/ov_SC03_091_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018EE68; +extern u8 D_8018EDD8; +extern u8 D_8018EDB4; +extern u8 D_8018ED90; +extern u8 D_8018EE44; +extern u8 D_8018EE20; +extern u8 D_8018EDFC; +extern u8 D_8018ED6C; +extern void func_80145934(void); +extern u8 D_8018EEF8; +extern u8 D_8018EED4; +extern u8 D_8018EEB0; +extern u8 D_8018EE8C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018E2F0[]; +extern unsigned char D_8018E320[]; +extern unsigned char D_8018E370[]; +extern unsigned char D_8018E3A0[]; +extern unsigned char D_8018E3D0[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018E420[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018E4E8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018E570[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018E578; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801D1100; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801D1104; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018E5A8; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018E650[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018E674[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018E664; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018E688[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018E694[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018E6A4[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018E6BC[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018E6AC; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018E6D0[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018E6EC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018E6DC; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018E700[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018E714[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018E728; +extern void (*D_8018E750[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018E730; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018E79C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018E7A0[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018EC04[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018EC14[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801D1138; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018EC3C[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018EC1C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018EC2C; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018EC7C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018EC84[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018EC50; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018EC90[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018EC60; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801D1140; +extern s32 D_801D114C; +extern s32 D_801D1150; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018ECCC[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018ECA0[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801D1148; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018EF1C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018ED3C[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018EFC0[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018F114[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018EF30; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018F11C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018EF40; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018EF60; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_8018F124[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_8018F14C[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_8018F158[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_8018EFCC[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_8018F1FC; +extern void func_8015D380(s32 a0); +extern unsigned char D_8018E2E0[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_8018F210[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_8018F24C[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_8018F294; +extern u16 D_8018F296; +extern u16 D_8018F298; +extern s32 D_8018F29C; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_8018F2A4; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_8018EFB0; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_8018F328[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_8018F3D8[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_8018F408[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_8018F46C; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801D1158[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_8018F490[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801D11B0[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_8018F4D8[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_8018F4C8; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801D09C4[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_8018F4E0[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_8018F534[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_8018F4FC; +extern s16 D_8018F530; +extern s16 D_8018F52E; +extern s16 D_8018F52C; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_8018F540[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801D1210; +extern u8 D_801D1211; +extern u8 D_801D1212; +extern u8 D_801D1213; +extern u8 D_801D1214; +extern u8 D_801D1215; +extern u8 D_801D1216; +extern u8 D_801D1217; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_8018F550[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801D1250; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_8018F594[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_8018F610[]; +extern s32 D_8018F630[]; +extern u8 D_8018F6AC[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_8018F6CC[]; +extern u8 D_8018F6EC[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_8018F788[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_8018F804[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801D09D4; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_8018F810[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_8018F818[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_8018F8E0[])(void); +extern void func_80166618(void *a0); +extern void (*D_8018F8F0[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_8018F900[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_8018F90C[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_8018F86C[]; +extern u8 D_8018F880[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_8018F924[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_8018F92C[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_8018F934[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_8018F93C[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_8018F944[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_8018F94C[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_8018F954[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_8018FA08[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_8018FA10[])(void); +extern void func_80169F00(void *a0); +extern char D_8018F9C0[]; +extern char D_8018F980[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_8018FA48[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_8018FA54[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_8018FA9C[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_8018FA5C[]; + extern u8 D_8018FA6C[]; + extern u8 D_801D1520[]; + extern u8 D_801D1548[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_8018FA5C, D_801D1520) + 3; + func_8001CE28(obj, D_801D1520); + } else { + var_s3 = func_80024054(D_8018FA6C, D_801D1548) + 9; + func_8001CE28(obj, D_801D1548); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_8018FB18[])(void); + +void func_8016B4BC(void *a0) { + D_8018FB18[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801D1570; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801D1570); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_8018FB0C[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_8018FB0C; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_8018FB50[]; +extern unsigned short D_8018FB58[]; +extern unsigned short D_8018FB60[]; +extern unsigned char D_801D1578[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801D1578 + param_2 * 0x40); + puVar3 = D_8018FB50[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_8018FB58[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_8018FB60[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801D1570; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801D1570, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_8018FB68[])(void); + +void func_8016BBA4(void *a0) { + D_8018FB68[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801D16AC; + extern u8 D_801D16AD; + extern u8 D_801D16AE; + extern M2C_UNK D_801D16B0; + extern u8 D_801D16B1; + extern u8 D_801D16B2; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801D16AC) = 0x20; + D_801D16AD = 0x20; + D_801D16AE = 0; + (*(u8 *)&D_801D16B0) = 0xc0; + D_801D16B1 = 0xc0; + D_801D16B2 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801D16AC; +extern M2C_UNK D_801D16B0; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801D16AC, &D_801D16B0, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801D16AD; + extern u8 D_801D16AE; + extern u8 D_801D16B1; + extern u8 D_801D16B2; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801D16AC); + if (*p1 != 0) *p1 -= 4; + if (D_801D16AD != 0) D_801D16AD -= 4; + if (D_801D16AE != 0) D_801D16AE -= 4; + p2 = &(*(u8 *)&D_801D16B0); + if (*p2 != 0) *p2 -= 4; + if (D_801D16B1 != 0) D_801D16B1 -= 4; + if (D_801D16B2 != 0) D_801D16B2 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801D16AC), &(*(int *)&D_801D16B0), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801D1638; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801D1638); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_8018FB78; + extern s32 D_8018FB80; + extern s32 D_8018FB88; + extern s32 D_8018FB90; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_8018FB78, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_8018FB80, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_8018FB88, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_8018FB90, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_8018FB98[])(void); + +void func_8016C14C(void *a0) { + D_8018FB98[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801D16B4[]; +extern u8 D_801D16BC[]; +extern u8 D_801D166C[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801D16B4, D_801D16BC, D_801D166C); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801D16C8[]; + extern u8 D_801D1788; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801D16C8[1] = 0xff; + D_801D16C8[2] = 0x10; + D_801D16C8[0] = 0x10; + D_801D16C8[6] = 0; + D_801D16C8[5] = 0; + D_801D16C8[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801D16C8, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801D1788, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801D16C8); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8016AB6C", func_8016C998); + + +extern void (*D_8018FBA0[])(void); + +void func_8016CB84(void *a0) { + D_8018FBA0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801D1788[]; + + + Blk_8016CF04_8016CF04 *p = &D_801D1788[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_8018FBBC[])(void); + +void func_8016D19C(void *a0) { + D_8018FBBC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_8018FBC4[])(void); + +void func_8016D428(void *a0) { + D_8018FBC4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018FC2C[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_8018FC2C[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_8018FBD0; +extern u8 D_8018FBDC; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018FBD0, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018FBDC); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8016AB6C", func_8016DC20); + + +extern void (*D_8018FC60[])(void); + +void func_8016DEA4(void *a0) { + D_8018FC60[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_8018FC68[])(void); + +void func_8016DF20(void *a0) { + D_8018FC68[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_8018FCBC[])(void); + +void func_8016E5B8(void *a0) { + D_8018FCBC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_8018FC7C[4]; + extern s32 D_8018FC9C; + extern s32 D_8018FCA4; + extern s32 D_8018FCAC; + extern s32 D_8018FCB4; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_8018FC7C[0], pp, &tmp); + RotTransSV(&D_8018FC7C[1], &prim.v[1], &tmp); + RotTransSV(&D_8018FC7C[2], &prim.v[2], &tmp); + RotTransSV(&D_8018FC7C[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_8018FC9C; + prim.f1 = D_8018FCA4; + prim.f2 = D_8018FCAC; + prim.f3 = D_8018FCB4; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_8018FCFC[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_8018FCFC[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_8018FCF0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_8018FCF0[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_8018FCE0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_8018FCE0[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018FCF0[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_8018FCF0[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_8018FCF0[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_8018FD0C; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_8018FD0C; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_8018FD84[])(void); + +void func_8016F6E0(void *a0) { + D_8018FD84[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_8018FD8C[])(void); + +void func_8016F798(void *a0) { + D_8018FD8C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_8018FD94[])(void); + +void func_8016F834(void *a0) { + D_8018FD94[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_8018FD9C[])(void); + +void func_8016F8E4(void *a0) { + D_8018FD9C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_8018FDA4[])(void); + +void func_8016F9C4(void *a0) { + D_8018FDA4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_8018FDAC[])(void); + +void func_8016FA84(void *a0) { + D_8018FDAC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_8018FDB8[])(void); + +void func_8016FB7C(void *a0) { + D_8018FDB8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_8018FDC4[])(void); + +void func_8016FC90(void *a0) { + D_8018FDC4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_8018FDD0[])(void); + +void func_8016FDB4(void *a0) { + D_8018FDD0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_8018FDE0[])(void); + +void func_8016FF30(void *a0) { + D_8018FDE0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_8018FDF0[])(void); + +void func_8016FFDC(void *a0) { + D_8018FDF0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_8018FDF8[])(void); + +void func_80170150(void *a0) { + D_8018FDF8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_8018FE00[])(void); + +void func_80170240(void *a0) { + D_8018FE00[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_8018FE08[])(void); + +void func_801702FC(void *a0) { + D_8018FE08[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_8018FE10[])(void); + +void func_801703E0(void *a0) { + D_8018FE10[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_8018FE18[])(void); + +void func_801704B0(void *a0) { + D_8018FE18[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_8018FE20[])(void); + +void func_80170548(void *a0) { + D_8018FE20[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_8018FE28[])(void); + +void func_801705F8(void *a0) { + D_8018FE28[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_8018FE30[])(void); + +void func_801706AC(void *a0) { + D_8018FE30[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_8018FE38[])(void); + +void func_80170748(void *a0) { + D_8018FE38[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_8018FE40[])(void); + +void func_80170810(void *a0) { + D_8018FE40[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_8018FE48[])(void); + +void func_80170AD8(void *a0) { + D_8018FE48[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_8018FE50[])(void); + +void func_80170BD8(void *a0) { + D_8018FE50[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_8018FE58[])(void); + +void func_80170C74(void *a0) { + D_8018FE58[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8016AB6C", func_80170CF0); + + +extern void (*D_8018FE60[])(void); + +void func_80170D68(void *a0) { + D_8018FE60[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_8018FE68[])(void); + +void func_80170E34(void *a0) { + D_8018FE68[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_8018FE70[])(void); + +void func_80170EFC(void *a0) { + D_8018FE70[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_8018FE78[])(void); + +void func_80170FB0(void *a0) { + D_8018FE78[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_8018FE80[])(void); + +void func_80171064(void *a0) { + D_8018FE80[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_8018FE88[])(void); + +void func_80171120(void *a0) { + D_8018FE88[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_8018FE90[])(void); + +void func_801711C0(void *a0) { + D_8018FE90[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_8018FE98[])(void); + +void func_80171260(void *a0) { + D_8018FE98[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_8018FEA0[])(void); + +void func_801714E4(void *a0) { + D_8018FEA0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8016AB6C", func_80172C50); + + +extern void (*D_8018FEE4[])(void); + +void func_80172CA0(void *a0) { + D_8018FEE4[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_8018FEA8; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_8018FEA8); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_092/ov_SC03_092_jr_8015AE2C.c b/src/ov_SC03_092/ov_SC03_092_jr_8015AE2C.c index b3e131ee3..b369c6f7f 100644 --- a/src/ov_SC03_092/ov_SC03_092_jr_8015AE2C.c +++ b/src/ov_SC03_092/ov_SC03_092_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_80187E6C[])(void); void func_8016AB30(void *a0) { D_80187E6C[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80187EE8[])(void); - -void func_8016B4BC(void *a0) { - D_80187EE8[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801B2138; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801B2138); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80187EDC[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80187EDC; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80187F20[]; -extern unsigned short D_80187F28[]; -extern unsigned short D_80187F30[]; -extern unsigned char D_801B2140[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801B2140 + param_2 * 0x40); - puVar3 = D_80187F20[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80187F28[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80187F30[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801B2138; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801B2138, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80187F38[])(void); - -void func_8016BBA4(void *a0) { - D_80187F38[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801B2274; - extern u8 D_801B2275; - extern u8 D_801B2276; - extern M2C_UNK D_801B2278; - extern u8 D_801B2279; - extern u8 D_801B227A; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801B2274) = 0x20; - D_801B2275 = 0x20; - D_801B2276 = 0; - (*(u8 *)&D_801B2278) = 0xc0; - D_801B2279 = 0xc0; - D_801B227A = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801B2274; -extern M2C_UNK D_801B2278; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801B2274, &D_801B2278, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801B2275; - extern u8 D_801B2276; - extern u8 D_801B2279; - extern u8 D_801B227A; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801B2274); - if (*p1 != 0) *p1 -= 4; - if (D_801B2275 != 0) D_801B2275 -= 4; - if (D_801B2276 != 0) D_801B2276 -= 4; - p2 = &(*(u8 *)&D_801B2278); - if (*p2 != 0) *p2 -= 4; - if (D_801B2279 != 0) D_801B2279 -= 4; - if (D_801B227A != 0) D_801B227A -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801B2274), &(*(int *)&D_801B2278), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801B2200; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801B2200); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80187F48; - extern s32 D_80187F50; - extern s32 D_80187F58; - extern s32 D_80187F60; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80187F48, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80187F50, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80187F58, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80187F60, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80187F68[])(void); - -void func_8016C14C(void *a0) { - D_80187F68[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801B227C[]; -extern u8 D_801B2284[]; -extern u8 D_801B2234[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801B227C, D_801B2284, D_801B2234); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801B2290[]; - extern u8 D_801B2350; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801B2290[1] = 0xff; - D_801B2290[2] = 0x10; - D_801B2290[0] = 0x10; - D_801B2290[6] = 0; - D_801B2290[5] = 0; - D_801B2290[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801B2290, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801B2350, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801B2290); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8015AE2C", func_8016C998); - - -extern void (*D_80187F70[])(void); - -void func_8016CB84(void *a0) { - D_80187F70[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801B2350[]; - - - Blk_8016CF04_8016CF04 *p = &D_801B2350[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80187F8C[])(void); - -void func_8016D19C(void *a0) { - D_80187F8C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80187F94[])(void); - -void func_8016D428(void *a0) { - D_80187F94[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80187FFC[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80187FFC[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80187FA0; -extern u8 D_80187FAC; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80187FA0, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80187FAC); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80188030[])(void); - -void func_8016DEA4(void *a0) { - D_80188030[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80188038[])(void); - -void func_8016DF20(void *a0) { - D_80188038[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_8018808C[])(void); - -void func_8016E5B8(void *a0) { - D_8018808C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_8018804C[4]; - extern s32 D_8018806C; - extern s32 D_80188074; - extern s32 D_8018807C; - extern s32 D_80188084; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_8018804C[0], pp, &tmp); - RotTransSV(&D_8018804C[1], &prim.v[1], &tmp); - RotTransSV(&D_8018804C[2], &prim.v[2], &tmp); - RotTransSV(&D_8018804C[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_8018806C; - prim.f1 = D_80188074; - prim.f2 = D_8018807C; - prim.f3 = D_80188084; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_801880CC[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_801880CC[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_801880C0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_801880C0[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_801880B0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_801880B0[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801880C0[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_801880C0[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_801880C0[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_801880DC; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_801880DC; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80188154[])(void); - -void func_8016F6E0(void *a0) { - D_80188154[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_8018815C[])(void); - -void func_8016F798(void *a0) { - D_8018815C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80188164[])(void); - -void func_8016F834(void *a0) { - D_80188164[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_8018816C[])(void); - -void func_8016F8E4(void *a0) { - D_8018816C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80188174[])(void); - -void func_8016F9C4(void *a0) { - D_80188174[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_8018817C[])(void); - -void func_8016FA84(void *a0) { - D_8018817C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80188188[])(void); - -void func_8016FB7C(void *a0) { - D_80188188[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80188194[])(void); - -void func_8016FC90(void *a0) { - D_80188194[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_801881A0[])(void); - -void func_8016FDB4(void *a0) { - D_801881A0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_801881B0[])(void); - -void func_8016FF30(void *a0) { - D_801881B0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_801881C0[])(void); - -void func_8016FFDC(void *a0) { - D_801881C0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_801881C8[])(void); - -void func_80170150(void *a0) { - D_801881C8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_801881D0[])(void); - -void func_80170240(void *a0) { - D_801881D0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_801881D8[])(void); - -void func_801702FC(void *a0) { - D_801881D8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_801881E0[])(void); - -void func_801703E0(void *a0) { - D_801881E0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_801881E8[])(void); - -void func_801704B0(void *a0) { - D_801881E8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_801881F0[])(void); - -void func_80170548(void *a0) { - D_801881F0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_801881F8[])(void); - -void func_801705F8(void *a0) { - D_801881F8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80188200[])(void); - -void func_801706AC(void *a0) { - D_80188200[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80188208[])(void); - -void func_80170748(void *a0) { - D_80188208[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80188210[])(void); - -void func_80170810(void *a0) { - D_80188210[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80188218[])(void); - -void func_80170AD8(void *a0) { - D_80188218[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80188220[])(void); - -void func_80170BD8(void *a0) { - D_80188220[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80188228[])(void); - -void func_80170C74(void *a0) { - D_80188228[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80188230[])(void); - -void func_80170D68(void *a0) { - D_80188230[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80188238[])(void); - -void func_80170E34(void *a0) { - D_80188238[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80188240[])(void); - -void func_80170EFC(void *a0) { - D_80188240[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80188248[])(void); - -void func_80170FB0(void *a0) { - D_80188248[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80188250[])(void); - -void func_80171064(void *a0) { - D_80188250[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80188258[])(void); - -void func_80171120(void *a0) { - D_80188258[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80188260[])(void); - -void func_801711C0(void *a0) { - D_80188260[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80188268[])(void); - -void func_80171260(void *a0) { - D_80188268[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80188270[])(void); - -void func_801714E4(void *a0) { - D_80188270[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8015AE2C", func_80172C50); - - -extern void (*D_801882B4[])(void); - -void func_80172CA0(void *a0) { - D_801882B4[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80188278; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80188278); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_092/ov_SC03_092_jr_8016AB6C.c b/src/ov_SC03_092/ov_SC03_092_jr_8016AB6C.c new file mode 100644 index 000000000..b9a0f0451 --- /dev/null +++ b/src/ov_SC03_092/ov_SC03_092_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80187238; +extern u8 D_801871A8; +extern u8 D_80187184; +extern u8 D_80187160; +extern u8 D_80187214; +extern u8 D_801871F0; +extern u8 D_801871CC; +extern u8 D_8018713C; +extern void func_80145934(void); +extern u8 D_801872C8; +extern u8 D_801872A4; +extern u8 D_80187280; +extern u8 D_8018725C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801866C0[]; +extern unsigned char D_801866F0[]; +extern unsigned char D_80186740[]; +extern unsigned char D_80186770[]; +extern unsigned char D_801867A0[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801867F0[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801868B8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80186940[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80186948; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801B1CC8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801B1CCC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80186978; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80186A20[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80186A44[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80186A34; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80186A58[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80186A64[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80186A74[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80186A8C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80186A7C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80186AA0[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80186ABC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80186AAC; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80186AD0[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80186AE4[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80186AF8; +extern void (*D_80186B20[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80186B00; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80186B6C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80186B70[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80186FD4[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80186FE4[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801B1D00; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018700C[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80186FEC; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80186FFC; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018704C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80187054[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80187020; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80187060[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80187030; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801B1D08; +extern s32 D_801B1D14; +extern s32 D_801B1D18; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018709C[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80187070[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801B1D10; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_801872EC[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018710C[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80187390[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_801874E4[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80187300; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_801874EC[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80187310; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80187330; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_801874F4[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_8018751C[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80187528[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_8018739C[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_801875CC; +extern void func_8015D380(s32 a0); +extern unsigned char D_801866B0[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_801875E0[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_8018761C[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80187664; +extern u16 D_80187666; +extern u16 D_80187668; +extern s32 D_8018766C; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80187674; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80187380; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_801876F8[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_801877A8[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_801877D8[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_8018783C; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801B1D20[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80187860[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801B1D78[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_801878A8[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80187898; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801B159C[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_801878B0[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80187904[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_801878CC; +extern s16 D_80187900; +extern s16 D_801878FE; +extern s16 D_801878FC; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80187910[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801B1DD8; +extern u8 D_801B1DD9; +extern u8 D_801B1DDA; +extern u8 D_801B1DDB; +extern u8 D_801B1DDC; +extern u8 D_801B1DDD; +extern u8 D_801B1DDE; +extern u8 D_801B1DDF; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80187920[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801B1E18; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80187964[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_801879E0[]; +extern s32 D_80187A00[]; +extern u8 D_80187A7C[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80187A9C[]; +extern u8 D_80187ABC[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80187B58[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80187BD4[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801B15AC; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80187BE0[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80187BE8[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80187CB0[])(void); +extern void func_80166618(void *a0); +extern void (*D_80187CC0[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80187CD0[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80187CDC[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80187C3C[]; +extern u8 D_80187C50[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80187CF4[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80187CFC[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80187D04[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80187D0C[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80187D14[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80187D1C[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80187D24[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80187DD8[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80187DE0[])(void); +extern void func_80169F00(void *a0); +extern char D_80187D90[]; +extern char D_80187D50[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80187E18[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80187E24[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80187E6C[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80187E2C[]; + extern u8 D_80187E3C[]; + extern u8 D_801B20E8[]; + extern u8 D_801B2110[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80187E2C, D_801B20E8) + 3; + func_8001CE28(obj, D_801B20E8); + } else { + var_s3 = func_80024054(D_80187E3C, D_801B2110) + 9; + func_8001CE28(obj, D_801B2110); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80187EE8[])(void); + +void func_8016B4BC(void *a0) { + D_80187EE8[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801B2138; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801B2138); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80187EDC[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80187EDC; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80187F20[]; +extern unsigned short D_80187F28[]; +extern unsigned short D_80187F30[]; +extern unsigned char D_801B2140[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801B2140 + param_2 * 0x40); + puVar3 = D_80187F20[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80187F28[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80187F30[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801B2138; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801B2138, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80187F38[])(void); + +void func_8016BBA4(void *a0) { + D_80187F38[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801B2274; + extern u8 D_801B2275; + extern u8 D_801B2276; + extern M2C_UNK D_801B2278; + extern u8 D_801B2279; + extern u8 D_801B227A; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801B2274) = 0x20; + D_801B2275 = 0x20; + D_801B2276 = 0; + (*(u8 *)&D_801B2278) = 0xc0; + D_801B2279 = 0xc0; + D_801B227A = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801B2274; +extern M2C_UNK D_801B2278; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801B2274, &D_801B2278, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801B2275; + extern u8 D_801B2276; + extern u8 D_801B2279; + extern u8 D_801B227A; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801B2274); + if (*p1 != 0) *p1 -= 4; + if (D_801B2275 != 0) D_801B2275 -= 4; + if (D_801B2276 != 0) D_801B2276 -= 4; + p2 = &(*(u8 *)&D_801B2278); + if (*p2 != 0) *p2 -= 4; + if (D_801B2279 != 0) D_801B2279 -= 4; + if (D_801B227A != 0) D_801B227A -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801B2274), &(*(int *)&D_801B2278), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801B2200; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801B2200); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80187F48; + extern s32 D_80187F50; + extern s32 D_80187F58; + extern s32 D_80187F60; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80187F48, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80187F50, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80187F58, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80187F60, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80187F68[])(void); + +void func_8016C14C(void *a0) { + D_80187F68[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801B227C[]; +extern u8 D_801B2284[]; +extern u8 D_801B2234[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801B227C, D_801B2284, D_801B2234); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801B2290[]; + extern u8 D_801B2350; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801B2290[1] = 0xff; + D_801B2290[2] = 0x10; + D_801B2290[0] = 0x10; + D_801B2290[6] = 0; + D_801B2290[5] = 0; + D_801B2290[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801B2290, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801B2350, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801B2290); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8016AB6C", func_8016C998); + + +extern void (*D_80187F70[])(void); + +void func_8016CB84(void *a0) { + D_80187F70[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801B2350[]; + + + Blk_8016CF04_8016CF04 *p = &D_801B2350[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80187F8C[])(void); + +void func_8016D19C(void *a0) { + D_80187F8C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80187F94[])(void); + +void func_8016D428(void *a0) { + D_80187F94[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80187FFC[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80187FFC[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80187FA0; +extern u8 D_80187FAC; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80187FA0, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80187FAC); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80188030[])(void); + +void func_8016DEA4(void *a0) { + D_80188030[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80188038[])(void); + +void func_8016DF20(void *a0) { + D_80188038[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_8018808C[])(void); + +void func_8016E5B8(void *a0) { + D_8018808C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_8018804C[4]; + extern s32 D_8018806C; + extern s32 D_80188074; + extern s32 D_8018807C; + extern s32 D_80188084; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_8018804C[0], pp, &tmp); + RotTransSV(&D_8018804C[1], &prim.v[1], &tmp); + RotTransSV(&D_8018804C[2], &prim.v[2], &tmp); + RotTransSV(&D_8018804C[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_8018806C; + prim.f1 = D_80188074; + prim.f2 = D_8018807C; + prim.f3 = D_80188084; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_801880CC[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_801880CC[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_801880C0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_801880C0[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_801880B0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_801880B0[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801880C0[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_801880C0[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_801880C0[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_801880DC; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_801880DC; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80188154[])(void); + +void func_8016F6E0(void *a0) { + D_80188154[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_8018815C[])(void); + +void func_8016F798(void *a0) { + D_8018815C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80188164[])(void); + +void func_8016F834(void *a0) { + D_80188164[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_8018816C[])(void); + +void func_8016F8E4(void *a0) { + D_8018816C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80188174[])(void); + +void func_8016F9C4(void *a0) { + D_80188174[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_8018817C[])(void); + +void func_8016FA84(void *a0) { + D_8018817C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80188188[])(void); + +void func_8016FB7C(void *a0) { + D_80188188[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80188194[])(void); + +void func_8016FC90(void *a0) { + D_80188194[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_801881A0[])(void); + +void func_8016FDB4(void *a0) { + D_801881A0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_801881B0[])(void); + +void func_8016FF30(void *a0) { + D_801881B0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_801881C0[])(void); + +void func_8016FFDC(void *a0) { + D_801881C0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_801881C8[])(void); + +void func_80170150(void *a0) { + D_801881C8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_801881D0[])(void); + +void func_80170240(void *a0) { + D_801881D0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_801881D8[])(void); + +void func_801702FC(void *a0) { + D_801881D8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_801881E0[])(void); + +void func_801703E0(void *a0) { + D_801881E0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_801881E8[])(void); + +void func_801704B0(void *a0) { + D_801881E8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_801881F0[])(void); + +void func_80170548(void *a0) { + D_801881F0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_801881F8[])(void); + +void func_801705F8(void *a0) { + D_801881F8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80188200[])(void); + +void func_801706AC(void *a0) { + D_80188200[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80188208[])(void); + +void func_80170748(void *a0) { + D_80188208[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80188210[])(void); + +void func_80170810(void *a0) { + D_80188210[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80188218[])(void); + +void func_80170AD8(void *a0) { + D_80188218[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80188220[])(void); + +void func_80170BD8(void *a0) { + D_80188220[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80188228[])(void); + +void func_80170C74(void *a0) { + D_80188228[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80188230[])(void); + +void func_80170D68(void *a0) { + D_80188230[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80188238[])(void); + +void func_80170E34(void *a0) { + D_80188238[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80188240[])(void); + +void func_80170EFC(void *a0) { + D_80188240[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80188248[])(void); + +void func_80170FB0(void *a0) { + D_80188248[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80188250[])(void); + +void func_80171064(void *a0) { + D_80188250[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80188258[])(void); + +void func_80171120(void *a0) { + D_80188258[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80188260[])(void); + +void func_801711C0(void *a0) { + D_80188260[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80188268[])(void); + +void func_80171260(void *a0) { + D_80188268[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80188270[])(void); + +void func_801714E4(void *a0) { + D_80188270[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8016AB6C", func_80172C50); + + +extern void (*D_801882B4[])(void); + +void func_80172CA0(void *a0) { + D_801882B4[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80188278; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80188278); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_093/ov_SC03_093_jr_8015AE2C.c b/src/ov_SC03_093/ov_SC03_093_jr_8015AE2C.c index 2bf287cfe..ecc931d99 100644 --- a/src/ov_SC03_093/ov_SC03_093_jr_8015AE2C.c +++ b/src/ov_SC03_093/ov_SC03_093_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_80189044[])(void); void func_8016AB30(void *a0) { D_80189044[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_801890C0[])(void); - -void func_8016B4BC(void *a0) { - D_801890C0[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801CB5A8; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801CB5A8); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_801890B4[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_801890B4; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_801890F8[]; -extern unsigned short D_80189100[]; -extern unsigned short D_80189108[]; -extern unsigned char D_801CB5B0[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801CB5B0 + param_2 * 0x40); - puVar3 = D_801890F8[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80189100[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80189108[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801CB5A8; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801CB5A8, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80189110[])(void); - -void func_8016BBA4(void *a0) { - D_80189110[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801CB6E4; - extern u8 D_801CB6E5; - extern u8 D_801CB6E6; - extern M2C_UNK D_801CB6E8; - extern u8 D_801CB6E9; - extern u8 D_801CB6EA; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801CB6E4) = 0x20; - D_801CB6E5 = 0x20; - D_801CB6E6 = 0; - (*(u8 *)&D_801CB6E8) = 0xc0; - D_801CB6E9 = 0xc0; - D_801CB6EA = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801CB6E4; -extern M2C_UNK D_801CB6E8; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801CB6E4, &D_801CB6E8, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801CB6E5; - extern u8 D_801CB6E6; - extern u8 D_801CB6E9; - extern u8 D_801CB6EA; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801CB6E4); - if (*p1 != 0) *p1 -= 4; - if (D_801CB6E5 != 0) D_801CB6E5 -= 4; - if (D_801CB6E6 != 0) D_801CB6E6 -= 4; - p2 = &(*(u8 *)&D_801CB6E8); - if (*p2 != 0) *p2 -= 4; - if (D_801CB6E9 != 0) D_801CB6E9 -= 4; - if (D_801CB6EA != 0) D_801CB6EA -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801CB6E4), &(*(int *)&D_801CB6E8), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801CB670; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801CB670); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80189120; - extern s32 D_80189128; - extern s32 D_80189130; - extern s32 D_80189138; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80189120, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80189128, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80189130, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80189138, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80189140[])(void); - -void func_8016C14C(void *a0) { - D_80189140[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801CB6EC[]; -extern u8 D_801CB6F4[]; -extern u8 D_801CB6A4[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801CB6EC, D_801CB6F4, D_801CB6A4); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801CB700[]; - extern u8 D_801CB7C0; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801CB700[1] = 0xff; - D_801CB700[2] = 0x10; - D_801CB700[0] = 0x10; - D_801CB700[6] = 0; - D_801CB700[5] = 0; - D_801CB700[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801CB700, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801CB7C0, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801CB700); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8015AE2C", func_8016C998); - - -extern void (*D_80189148[])(void); - -void func_8016CB84(void *a0) { - D_80189148[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801CB7C0[]; - - - Blk_8016CF04_8016CF04 *p = &D_801CB7C0[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80189164[])(void); - -void func_8016D19C(void *a0) { - D_80189164[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_8018916C[])(void); - -void func_8016D428(void *a0) { - D_8018916C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_801891D4[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_801891D4[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80189178; -extern u8 D_80189184; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80189178, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80189184); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80189208[])(void); - -void func_8016DEA4(void *a0) { - D_80189208[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80189210[])(void); - -void func_8016DF20(void *a0) { - D_80189210[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80189264[])(void); - -void func_8016E5B8(void *a0) { - D_80189264[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80189224[4]; - extern s32 D_80189244; - extern s32 D_8018924C; - extern s32 D_80189254; - extern s32 D_8018925C; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80189224[0], pp, &tmp); - RotTransSV(&D_80189224[1], &prim.v[1], &tmp); - RotTransSV(&D_80189224[2], &prim.v[2], &tmp); - RotTransSV(&D_80189224[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80189244; - prim.f1 = D_8018924C; - prim.f2 = D_80189254; - prim.f3 = D_8018925C; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_801892A4[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_801892A4[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80189298[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80189298[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80189288[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80189288[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80189298[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80189298[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80189298[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_801892B4; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_801892B4; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_8018932C[])(void); - -void func_8016F6E0(void *a0) { - D_8018932C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80189334[])(void); - -void func_8016F798(void *a0) { - D_80189334[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_8018933C[])(void); - -void func_8016F834(void *a0) { - D_8018933C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80189344[])(void); - -void func_8016F8E4(void *a0) { - D_80189344[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_8018934C[])(void); - -void func_8016F9C4(void *a0) { - D_8018934C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80189354[])(void); - -void func_8016FA84(void *a0) { - D_80189354[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80189360[])(void); - -void func_8016FB7C(void *a0) { - D_80189360[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_8018936C[])(void); - -void func_8016FC90(void *a0) { - D_8018936C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80189378[])(void); - -void func_8016FDB4(void *a0) { - D_80189378[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80189388[])(void); - -void func_8016FF30(void *a0) { - D_80189388[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80189398[])(void); - -void func_8016FFDC(void *a0) { - D_80189398[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_801893A0[])(void); - -void func_80170150(void *a0) { - D_801893A0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_801893A8[])(void); - -void func_80170240(void *a0) { - D_801893A8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_801893B0[])(void); - -void func_801702FC(void *a0) { - D_801893B0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_801893B8[])(void); - -void func_801703E0(void *a0) { - D_801893B8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_801893C0[])(void); - -void func_801704B0(void *a0) { - D_801893C0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_801893C8[])(void); - -void func_80170548(void *a0) { - D_801893C8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_801893D0[])(void); - -void func_801705F8(void *a0) { - D_801893D0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_801893D8[])(void); - -void func_801706AC(void *a0) { - D_801893D8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_801893E0[])(void); - -void func_80170748(void *a0) { - D_801893E0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_801893E8[])(void); - -void func_80170810(void *a0) { - D_801893E8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_801893F0[])(void); - -void func_80170AD8(void *a0) { - D_801893F0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_801893F8[])(void); - -void func_80170BD8(void *a0) { - D_801893F8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80189400[])(void); - -void func_80170C74(void *a0) { - D_80189400[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80189408[])(void); - -void func_80170D68(void *a0) { - D_80189408[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80189410[])(void); - -void func_80170E34(void *a0) { - D_80189410[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80189418[])(void); - -void func_80170EFC(void *a0) { - D_80189418[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80189420[])(void); - -void func_80170FB0(void *a0) { - D_80189420[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80189428[])(void); - -void func_80171064(void *a0) { - D_80189428[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80189430[])(void); - -void func_80171120(void *a0) { - D_80189430[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80189438[])(void); - -void func_801711C0(void *a0) { - D_80189438[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80189440[])(void); - -void func_80171260(void *a0) { - D_80189440[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80189448[])(void); - -void func_801714E4(void *a0) { - D_80189448[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8015AE2C", func_80172C50); - - -extern void (*D_8018948C[])(void); - -void func_80172CA0(void *a0) { - D_8018948C[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80189450; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80189450); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_093/ov_SC03_093_jr_8016AB6C.c b/src/ov_SC03_093/ov_SC03_093_jr_8016AB6C.c new file mode 100644 index 000000000..455fafe44 --- /dev/null +++ b/src/ov_SC03_093/ov_SC03_093_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80188410; +extern u8 D_80188380; +extern u8 D_8018835C; +extern u8 D_80188338; +extern u8 D_801883EC; +extern u8 D_801883C8; +extern u8 D_801883A4; +extern u8 D_80188314; +extern void func_80145934(void); +extern u8 D_801884A0; +extern u8 D_8018847C; +extern u8 D_80188458; +extern u8 D_80188434; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80187898[]; +extern unsigned char D_801878C8[]; +extern unsigned char D_80187918[]; +extern unsigned char D_80187948[]; +extern unsigned char D_80187978[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801879C8[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80187A90[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80187B18[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80187B20; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801CB138; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801CB13C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80187B50; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80187BF8[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80187C1C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80187C0C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80187C30[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80187C3C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80187C4C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80187C64[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80187C54; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80187C78[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80187C94[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80187C84; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80187CA8[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80187CBC[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80187CD0; +extern void (*D_80187CF8[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80187CD8; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80187D44[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80187D48[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_801881AC[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_801881BC[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801CB170; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_801881E4[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801881C4; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_801881D4; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80188224[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018822C[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_801881F8; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80188238[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80188208; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801CB178; +extern s32 D_801CB184; +extern s32 D_801CB188; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80188274[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80188248[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801CB180; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_801884C4[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_801882E4[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80188568[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_801886BC[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_801884D8; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_801886C4[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_801884E8; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80188508; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_801886CC[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_801886F4[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80188700[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80188574[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_801887A4; +extern void func_8015D380(s32 a0); +extern unsigned char D_80187888[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_801887B8[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_801887F4[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_8018883C; +extern u16 D_8018883E; +extern u16 D_80188840; +extern s32 D_80188844; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_8018884C; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80188558; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_801888D0[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80188980[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_801889B0[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80188A14; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801CB190[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80188A38[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801CB1E8[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80188A80[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80188A70; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801CA9F0[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80188A88[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80188ADC[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80188AA4; +extern s16 D_80188AD8; +extern s16 D_80188AD6; +extern s16 D_80188AD4; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80188AE8[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801CB248; +extern u8 D_801CB249; +extern u8 D_801CB24A; +extern u8 D_801CB24B; +extern u8 D_801CB24C; +extern u8 D_801CB24D; +extern u8 D_801CB24E; +extern u8 D_801CB24F; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80188AF8[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801CB288; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80188B3C[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80188BB8[]; +extern s32 D_80188BD8[]; +extern u8 D_80188C54[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80188C74[]; +extern u8 D_80188C94[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80188D30[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80188DAC[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801CAA00; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80188DB8[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80188DC0[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80188E88[])(void); +extern void func_80166618(void *a0); +extern void (*D_80188E98[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80188EA8[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80188EB4[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80188E14[]; +extern u8 D_80188E28[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80188ECC[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80188ED4[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80188EDC[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80188EE4[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80188EEC[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80188EF4[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80188EFC[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80188FB0[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80188FB8[])(void); +extern void func_80169F00(void *a0); +extern char D_80188F68[]; +extern char D_80188F28[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80188FF0[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80188FFC[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80189044[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80189004[]; + extern u8 D_80189014[]; + extern u8 D_801CB558[]; + extern u8 D_801CB580[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80189004, D_801CB558) + 3; + func_8001CE28(obj, D_801CB558); + } else { + var_s3 = func_80024054(D_80189014, D_801CB580) + 9; + func_8001CE28(obj, D_801CB580); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_801890C0[])(void); + +void func_8016B4BC(void *a0) { + D_801890C0[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801CB5A8; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801CB5A8); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_801890B4[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_801890B4; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_801890F8[]; +extern unsigned short D_80189100[]; +extern unsigned short D_80189108[]; +extern unsigned char D_801CB5B0[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801CB5B0 + param_2 * 0x40); + puVar3 = D_801890F8[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80189100[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80189108[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801CB5A8; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801CB5A8, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80189110[])(void); + +void func_8016BBA4(void *a0) { + D_80189110[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801CB6E4; + extern u8 D_801CB6E5; + extern u8 D_801CB6E6; + extern M2C_UNK D_801CB6E8; + extern u8 D_801CB6E9; + extern u8 D_801CB6EA; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801CB6E4) = 0x20; + D_801CB6E5 = 0x20; + D_801CB6E6 = 0; + (*(u8 *)&D_801CB6E8) = 0xc0; + D_801CB6E9 = 0xc0; + D_801CB6EA = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801CB6E4; +extern M2C_UNK D_801CB6E8; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801CB6E4, &D_801CB6E8, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801CB6E5; + extern u8 D_801CB6E6; + extern u8 D_801CB6E9; + extern u8 D_801CB6EA; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801CB6E4); + if (*p1 != 0) *p1 -= 4; + if (D_801CB6E5 != 0) D_801CB6E5 -= 4; + if (D_801CB6E6 != 0) D_801CB6E6 -= 4; + p2 = &(*(u8 *)&D_801CB6E8); + if (*p2 != 0) *p2 -= 4; + if (D_801CB6E9 != 0) D_801CB6E9 -= 4; + if (D_801CB6EA != 0) D_801CB6EA -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801CB6E4), &(*(int *)&D_801CB6E8), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801CB670; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801CB670); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80189120; + extern s32 D_80189128; + extern s32 D_80189130; + extern s32 D_80189138; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80189120, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80189128, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80189130, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80189138, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80189140[])(void); + +void func_8016C14C(void *a0) { + D_80189140[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801CB6EC[]; +extern u8 D_801CB6F4[]; +extern u8 D_801CB6A4[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801CB6EC, D_801CB6F4, D_801CB6A4); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801CB700[]; + extern u8 D_801CB7C0; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801CB700[1] = 0xff; + D_801CB700[2] = 0x10; + D_801CB700[0] = 0x10; + D_801CB700[6] = 0; + D_801CB700[5] = 0; + D_801CB700[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801CB700, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801CB7C0, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801CB700); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8016AB6C", func_8016C998); + + +extern void (*D_80189148[])(void); + +void func_8016CB84(void *a0) { + D_80189148[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801CB7C0[]; + + + Blk_8016CF04_8016CF04 *p = &D_801CB7C0[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80189164[])(void); + +void func_8016D19C(void *a0) { + D_80189164[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_8018916C[])(void); + +void func_8016D428(void *a0) { + D_8018916C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_801891D4[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_801891D4[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80189178; +extern u8 D_80189184; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80189178, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80189184); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80189208[])(void); + +void func_8016DEA4(void *a0) { + D_80189208[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80189210[])(void); + +void func_8016DF20(void *a0) { + D_80189210[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80189264[])(void); + +void func_8016E5B8(void *a0) { + D_80189264[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80189224[4]; + extern s32 D_80189244; + extern s32 D_8018924C; + extern s32 D_80189254; + extern s32 D_8018925C; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80189224[0], pp, &tmp); + RotTransSV(&D_80189224[1], &prim.v[1], &tmp); + RotTransSV(&D_80189224[2], &prim.v[2], &tmp); + RotTransSV(&D_80189224[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80189244; + prim.f1 = D_8018924C; + prim.f2 = D_80189254; + prim.f3 = D_8018925C; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_801892A4[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_801892A4[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80189298[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80189298[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80189288[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80189288[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80189298[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80189298[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80189298[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_801892B4; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_801892B4; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_8018932C[])(void); + +void func_8016F6E0(void *a0) { + D_8018932C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80189334[])(void); + +void func_8016F798(void *a0) { + D_80189334[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_8018933C[])(void); + +void func_8016F834(void *a0) { + D_8018933C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80189344[])(void); + +void func_8016F8E4(void *a0) { + D_80189344[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_8018934C[])(void); + +void func_8016F9C4(void *a0) { + D_8018934C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80189354[])(void); + +void func_8016FA84(void *a0) { + D_80189354[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80189360[])(void); + +void func_8016FB7C(void *a0) { + D_80189360[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_8018936C[])(void); + +void func_8016FC90(void *a0) { + D_8018936C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80189378[])(void); + +void func_8016FDB4(void *a0) { + D_80189378[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80189388[])(void); + +void func_8016FF30(void *a0) { + D_80189388[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80189398[])(void); + +void func_8016FFDC(void *a0) { + D_80189398[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_801893A0[])(void); + +void func_80170150(void *a0) { + D_801893A0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_801893A8[])(void); + +void func_80170240(void *a0) { + D_801893A8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_801893B0[])(void); + +void func_801702FC(void *a0) { + D_801893B0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_801893B8[])(void); + +void func_801703E0(void *a0) { + D_801893B8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_801893C0[])(void); + +void func_801704B0(void *a0) { + D_801893C0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_801893C8[])(void); + +void func_80170548(void *a0) { + D_801893C8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_801893D0[])(void); + +void func_801705F8(void *a0) { + D_801893D0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_801893D8[])(void); + +void func_801706AC(void *a0) { + D_801893D8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_801893E0[])(void); + +void func_80170748(void *a0) { + D_801893E0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_801893E8[])(void); + +void func_80170810(void *a0) { + D_801893E8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_801893F0[])(void); + +void func_80170AD8(void *a0) { + D_801893F0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_801893F8[])(void); + +void func_80170BD8(void *a0) { + D_801893F8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80189400[])(void); + +void func_80170C74(void *a0) { + D_80189400[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80189408[])(void); + +void func_80170D68(void *a0) { + D_80189408[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80189410[])(void); + +void func_80170E34(void *a0) { + D_80189410[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80189418[])(void); + +void func_80170EFC(void *a0) { + D_80189418[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80189420[])(void); + +void func_80170FB0(void *a0) { + D_80189420[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80189428[])(void); + +void func_80171064(void *a0) { + D_80189428[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80189430[])(void); + +void func_80171120(void *a0) { + D_80189430[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80189438[])(void); + +void func_801711C0(void *a0) { + D_80189438[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80189440[])(void); + +void func_80171260(void *a0) { + D_80189440[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80189448[])(void); + +void func_801714E4(void *a0) { + D_80189448[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8016AB6C", func_80172C50); + + +extern void (*D_8018948C[])(void); + +void func_80172CA0(void *a0) { + D_8018948C[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80189450; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80189450); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_094/ov_SC03_094_jr_8015AE2C.c b/src/ov_SC03_094/ov_SC03_094_jr_8015AE2C.c index f7ee875c3..df55512fe 100644 --- a/src/ov_SC03_094/ov_SC03_094_jr_8015AE2C.c +++ b/src/ov_SC03_094/ov_SC03_094_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_8018AA40[])(void); void func_8016AB30(void *a0) { D_8018AA40[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_8018AABC[])(void); - -void func_8016B4BC(void *a0) { - D_8018AABC[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801D23E8; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801D23E8); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_8018AAB0[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_8018AAB0; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_8018AAF4[]; -extern unsigned short D_8018AAFC[]; -extern unsigned short D_8018AB04[]; -extern unsigned char D_801D23F0[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801D23F0 + param_2 * 0x40); - puVar3 = D_8018AAF4[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_8018AAFC[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_8018AB04[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801D23E8; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801D23E8, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_8018AB0C[])(void); - -void func_8016BBA4(void *a0) { - D_8018AB0C[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801D2524; - extern u8 D_801D2525; - extern u8 D_801D2526; - extern M2C_UNK D_801D2528; - extern u8 D_801D2529; - extern u8 D_801D252A; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801D2524) = 0x20; - D_801D2525 = 0x20; - D_801D2526 = 0; - (*(u8 *)&D_801D2528) = 0xc0; - D_801D2529 = 0xc0; - D_801D252A = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801D2524; -extern M2C_UNK D_801D2528; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801D2524, &D_801D2528, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801D2525; - extern u8 D_801D2526; - extern u8 D_801D2529; - extern u8 D_801D252A; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801D2524); - if (*p1 != 0) *p1 -= 4; - if (D_801D2525 != 0) D_801D2525 -= 4; - if (D_801D2526 != 0) D_801D2526 -= 4; - p2 = &(*(u8 *)&D_801D2528); - if (*p2 != 0) *p2 -= 4; - if (D_801D2529 != 0) D_801D2529 -= 4; - if (D_801D252A != 0) D_801D252A -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801D2524), &(*(int *)&D_801D2528), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801D24B0; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801D24B0); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_8018AB1C; - extern s32 D_8018AB24; - extern s32 D_8018AB2C; - extern s32 D_8018AB34; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_8018AB1C, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_8018AB24, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_8018AB2C, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_8018AB34, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_8018AB3C[])(void); - -void func_8016C14C(void *a0) { - D_8018AB3C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801D252C[]; -extern u8 D_801D2534[]; -extern u8 D_801D24E4[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801D252C, D_801D2534, D_801D24E4); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801D2540[]; - extern u8 D_801D2600; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801D2540[1] = 0xff; - D_801D2540[2] = 0x10; - D_801D2540[0] = 0x10; - D_801D2540[6] = 0; - D_801D2540[5] = 0; - D_801D2540[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801D2540, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801D2600, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801D2540); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8015AE2C", func_8016C998); - - -extern void (*D_8018AB44[])(void); - -void func_8016CB84(void *a0) { - D_8018AB44[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801D2600[]; - - - Blk_8016CF04_8016CF04 *p = &D_801D2600[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_8018AB60[])(void); - -void func_8016D19C(void *a0) { - D_8018AB60[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_8018AB68[])(void); - -void func_8016D428(void *a0) { - D_8018AB68[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_8018ABD0[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_8018ABD0[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_8018AB74; -extern u8 D_8018AB80; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018AB74, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018AB80); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8015AE2C", func_8016DC20); - - -extern void (*D_8018AC04[])(void); - -void func_8016DEA4(void *a0) { - D_8018AC04[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_8018AC0C[])(void); - -void func_8016DF20(void *a0) { - D_8018AC0C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_8018AC60[])(void); - -void func_8016E5B8(void *a0) { - D_8018AC60[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_8018AC20[4]; - extern s32 D_8018AC40; - extern s32 D_8018AC48; - extern s32 D_8018AC50; - extern s32 D_8018AC58; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_8018AC20[0], pp, &tmp); - RotTransSV(&D_8018AC20[1], &prim.v[1], &tmp); - RotTransSV(&D_8018AC20[2], &prim.v[2], &tmp); - RotTransSV(&D_8018AC20[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_8018AC40; - prim.f1 = D_8018AC48; - prim.f2 = D_8018AC50; - prim.f3 = D_8018AC58; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_8018ACA0[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_8018ACA0[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_8018AC94[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_8018AC94[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_8018AC84[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_8018AC84[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018AC94[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_8018AC94[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_8018AC94[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_8018ACB0; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_8018ACB0; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_8018AD28[])(void); - -void func_8016F6E0(void *a0) { - D_8018AD28[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_8018AD30[])(void); - -void func_8016F798(void *a0) { - D_8018AD30[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_8018AD38[])(void); - -void func_8016F834(void *a0) { - D_8018AD38[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_8018AD40[])(void); - -void func_8016F8E4(void *a0) { - D_8018AD40[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_8018AD48[])(void); - -void func_8016F9C4(void *a0) { - D_8018AD48[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_8018AD50[])(void); - -void func_8016FA84(void *a0) { - D_8018AD50[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_8018AD5C[])(void); - -void func_8016FB7C(void *a0) { - D_8018AD5C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_8018AD68[])(void); - -void func_8016FC90(void *a0) { - D_8018AD68[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_8018AD74[])(void); - -void func_8016FDB4(void *a0) { - D_8018AD74[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_8018AD84[])(void); - -void func_8016FF30(void *a0) { - D_8018AD84[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_8018AD94[])(void); - -void func_8016FFDC(void *a0) { - D_8018AD94[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_8018AD9C[])(void); - -void func_80170150(void *a0) { - D_8018AD9C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_8018ADA4[])(void); - -void func_80170240(void *a0) { - D_8018ADA4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_8018ADAC[])(void); - -void func_801702FC(void *a0) { - D_8018ADAC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_8018ADB4[])(void); - -void func_801703E0(void *a0) { - D_8018ADB4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_8018ADBC[])(void); - -void func_801704B0(void *a0) { - D_8018ADBC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_8018ADC4[])(void); - -void func_80170548(void *a0) { - D_8018ADC4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_8018ADCC[])(void); - -void func_801705F8(void *a0) { - D_8018ADCC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_8018ADD4[])(void); - -void func_801706AC(void *a0) { - D_8018ADD4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_8018ADDC[])(void); - -void func_80170748(void *a0) { - D_8018ADDC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_8018ADE4[])(void); - -void func_80170810(void *a0) { - D_8018ADE4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_8018ADEC[])(void); - -void func_80170AD8(void *a0) { - D_8018ADEC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_8018ADF4[])(void); - -void func_80170BD8(void *a0) { - D_8018ADF4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_8018ADFC[])(void); - -void func_80170C74(void *a0) { - D_8018ADFC[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8015AE2C", func_80170CF0); - - -extern void (*D_8018AE04[])(void); - -void func_80170D68(void *a0) { - D_8018AE04[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_8018AE0C[])(void); - -void func_80170E34(void *a0) { - D_8018AE0C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_8018AE14[])(void); - -void func_80170EFC(void *a0) { - D_8018AE14[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_8018AE1C[])(void); - -void func_80170FB0(void *a0) { - D_8018AE1C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_8018AE24[])(void); - -void func_80171064(void *a0) { - D_8018AE24[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_8018AE2C[])(void); - -void func_80171120(void *a0) { - D_8018AE2C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_8018AE34[])(void); - -void func_801711C0(void *a0) { - D_8018AE34[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_8018AE3C[])(void); - -void func_80171260(void *a0) { - D_8018AE3C[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_8018AE44[])(void); - -void func_801714E4(void *a0) { - D_8018AE44[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8015AE2C", func_80172C50); - - -extern void (*D_8018AE88[])(void); - -void func_80172CA0(void *a0) { - D_8018AE88[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_8018AE4C; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_8018AE4C); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_094/ov_SC03_094_jr_8016AB6C.c b/src/ov_SC03_094/ov_SC03_094_jr_8016AB6C.c new file mode 100644 index 000000000..6c81bd983 --- /dev/null +++ b/src/ov_SC03_094/ov_SC03_094_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80189E0C; +extern u8 D_80189D7C; +extern u8 D_80189D58; +extern u8 D_80189D34; +extern u8 D_80189DE8; +extern u8 D_80189DC4; +extern u8 D_80189DA0; +extern u8 D_80189D10; +extern void func_80145934(void); +extern u8 D_80189E9C; +extern u8 D_80189E78; +extern u8 D_80189E54; +extern u8 D_80189E30; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80189294[]; +extern unsigned char D_801892C4[]; +extern unsigned char D_80189314[]; +extern unsigned char D_80189344[]; +extern unsigned char D_80189374[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801893C4[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018948C[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80189514[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018951C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801D1F78; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801D1F7C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018954C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801895F4[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80189618[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80189608; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018962C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80189638[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80189648[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80189660[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80189650; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80189674[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80189690[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80189680; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801896A4[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801896B8[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801896CC; +extern void (*D_801896F4[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801896D4; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80189740[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80189744[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80189BA8[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80189BB8[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801D1FB0; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80189BE0[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80189BC0; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80189BD0; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80189C20[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80189C28[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80189BF4; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80189C34[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80189C04; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801D1FB8; +extern s32 D_801D1FC4; +extern s32 D_801D1FC8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80189C70[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80189C44[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801D1FC0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80189EC0[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80189CE0[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80189F64[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018A0B8[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80189ED4; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018A0C0[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80189EE4; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80189F04; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_8018A0C8[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_8018A0F0[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_8018A0FC[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80189F70[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_8018A1A0; +extern void func_8015D380(s32 a0); +extern unsigned char D_80189284[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_8018A1B4[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_8018A1F0[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_8018A238; +extern u16 D_8018A23A; +extern u16 D_8018A23C; +extern s32 D_8018A240; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_8018A248; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80189F54; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_8018A2CC[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_8018A37C[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_8018A3AC[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_8018A410; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801D1FD0[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_8018A434[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801D2028[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_8018A47C[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_8018A46C; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801D182C[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_8018A484[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_8018A4D8[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_8018A4A0; +extern s16 D_8018A4D4; +extern s16 D_8018A4D2; +extern s16 D_8018A4D0; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_8018A4E4[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801D2088; +extern u8 D_801D2089; +extern u8 D_801D208A; +extern u8 D_801D208B; +extern u8 D_801D208C; +extern u8 D_801D208D; +extern u8 D_801D208E; +extern u8 D_801D208F; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_8018A4F4[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801D20C8; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_8018A538[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_8018A5B4[]; +extern s32 D_8018A5D4[]; +extern u8 D_8018A650[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_8018A670[]; +extern u8 D_8018A690[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_8018A72C[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_8018A7A8[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801D183C; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_8018A7B4[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_8018A7BC[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_8018A884[])(void); +extern void func_80166618(void *a0); +extern void (*D_8018A894[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_8018A8A4[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_8018A8B0[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_8018A810[]; +extern u8 D_8018A824[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_8018A8C8[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_8018A8D0[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_8018A8D8[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_8018A8E0[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_8018A8E8[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_8018A8F0[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_8018A8F8[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_8018A9AC[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_8018A9B4[])(void); +extern void func_80169F00(void *a0); +extern char D_8018A964[]; +extern char D_8018A924[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_8018A9EC[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_8018A9F8[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_8018AA40[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_8018AA00[]; + extern u8 D_8018AA10[]; + extern u8 D_801D2398[]; + extern u8 D_801D23C0[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_8018AA00, D_801D2398) + 3; + func_8001CE28(obj, D_801D2398); + } else { + var_s3 = func_80024054(D_8018AA10, D_801D23C0) + 9; + func_8001CE28(obj, D_801D23C0); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_8018AABC[])(void); + +void func_8016B4BC(void *a0) { + D_8018AABC[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801D23E8; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801D23E8); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_8018AAB0[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_8018AAB0; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_8018AAF4[]; +extern unsigned short D_8018AAFC[]; +extern unsigned short D_8018AB04[]; +extern unsigned char D_801D23F0[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801D23F0 + param_2 * 0x40); + puVar3 = D_8018AAF4[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_8018AAFC[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_8018AB04[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801D23E8; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801D23E8, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_8018AB0C[])(void); + +void func_8016BBA4(void *a0) { + D_8018AB0C[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801D2524; + extern u8 D_801D2525; + extern u8 D_801D2526; + extern M2C_UNK D_801D2528; + extern u8 D_801D2529; + extern u8 D_801D252A; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801D2524) = 0x20; + D_801D2525 = 0x20; + D_801D2526 = 0; + (*(u8 *)&D_801D2528) = 0xc0; + D_801D2529 = 0xc0; + D_801D252A = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801D2524; +extern M2C_UNK D_801D2528; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801D2524, &D_801D2528, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801D2525; + extern u8 D_801D2526; + extern u8 D_801D2529; + extern u8 D_801D252A; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801D2524); + if (*p1 != 0) *p1 -= 4; + if (D_801D2525 != 0) D_801D2525 -= 4; + if (D_801D2526 != 0) D_801D2526 -= 4; + p2 = &(*(u8 *)&D_801D2528); + if (*p2 != 0) *p2 -= 4; + if (D_801D2529 != 0) D_801D2529 -= 4; + if (D_801D252A != 0) D_801D252A -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801D2524), &(*(int *)&D_801D2528), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801D24B0; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801D24B0); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_8018AB1C; + extern s32 D_8018AB24; + extern s32 D_8018AB2C; + extern s32 D_8018AB34; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_8018AB1C, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_8018AB24, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_8018AB2C, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_8018AB34, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_8018AB3C[])(void); + +void func_8016C14C(void *a0) { + D_8018AB3C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801D252C[]; +extern u8 D_801D2534[]; +extern u8 D_801D24E4[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801D252C, D_801D2534, D_801D24E4); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801D2540[]; + extern u8 D_801D2600; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801D2540[1] = 0xff; + D_801D2540[2] = 0x10; + D_801D2540[0] = 0x10; + D_801D2540[6] = 0; + D_801D2540[5] = 0; + D_801D2540[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801D2540, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801D2600, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801D2540); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8016AB6C", func_8016C998); + + +extern void (*D_8018AB44[])(void); + +void func_8016CB84(void *a0) { + D_8018AB44[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801D2600[]; + + + Blk_8016CF04_8016CF04 *p = &D_801D2600[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_8018AB60[])(void); + +void func_8016D19C(void *a0) { + D_8018AB60[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_8018AB68[])(void); + +void func_8016D428(void *a0) { + D_8018AB68[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018ABD0[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_8018ABD0[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_8018AB74; +extern u8 D_8018AB80; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018AB74, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018AB80); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8016AB6C", func_8016DC20); + + +extern void (*D_8018AC04[])(void); + +void func_8016DEA4(void *a0) { + D_8018AC04[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_8018AC0C[])(void); + +void func_8016DF20(void *a0) { + D_8018AC0C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_8018AC60[])(void); + +void func_8016E5B8(void *a0) { + D_8018AC60[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_8018AC20[4]; + extern s32 D_8018AC40; + extern s32 D_8018AC48; + extern s32 D_8018AC50; + extern s32 D_8018AC58; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_8018AC20[0], pp, &tmp); + RotTransSV(&D_8018AC20[1], &prim.v[1], &tmp); + RotTransSV(&D_8018AC20[2], &prim.v[2], &tmp); + RotTransSV(&D_8018AC20[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_8018AC40; + prim.f1 = D_8018AC48; + prim.f2 = D_8018AC50; + prim.f3 = D_8018AC58; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_8018ACA0[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_8018ACA0[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_8018AC94[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_8018AC94[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_8018AC84[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_8018AC84[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018AC94[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_8018AC94[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_8018AC94[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_8018ACB0; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_8018ACB0; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_8018AD28[])(void); + +void func_8016F6E0(void *a0) { + D_8018AD28[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_8018AD30[])(void); + +void func_8016F798(void *a0) { + D_8018AD30[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_8018AD38[])(void); + +void func_8016F834(void *a0) { + D_8018AD38[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_8018AD40[])(void); + +void func_8016F8E4(void *a0) { + D_8018AD40[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_8018AD48[])(void); + +void func_8016F9C4(void *a0) { + D_8018AD48[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_8018AD50[])(void); + +void func_8016FA84(void *a0) { + D_8018AD50[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_8018AD5C[])(void); + +void func_8016FB7C(void *a0) { + D_8018AD5C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_8018AD68[])(void); + +void func_8016FC90(void *a0) { + D_8018AD68[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_8018AD74[])(void); + +void func_8016FDB4(void *a0) { + D_8018AD74[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_8018AD84[])(void); + +void func_8016FF30(void *a0) { + D_8018AD84[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_8018AD94[])(void); + +void func_8016FFDC(void *a0) { + D_8018AD94[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_8018AD9C[])(void); + +void func_80170150(void *a0) { + D_8018AD9C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_8018ADA4[])(void); + +void func_80170240(void *a0) { + D_8018ADA4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_8018ADAC[])(void); + +void func_801702FC(void *a0) { + D_8018ADAC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_8018ADB4[])(void); + +void func_801703E0(void *a0) { + D_8018ADB4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_8018ADBC[])(void); + +void func_801704B0(void *a0) { + D_8018ADBC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_8018ADC4[])(void); + +void func_80170548(void *a0) { + D_8018ADC4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_8018ADCC[])(void); + +void func_801705F8(void *a0) { + D_8018ADCC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_8018ADD4[])(void); + +void func_801706AC(void *a0) { + D_8018ADD4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_8018ADDC[])(void); + +void func_80170748(void *a0) { + D_8018ADDC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_8018ADE4[])(void); + +void func_80170810(void *a0) { + D_8018ADE4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_8018ADEC[])(void); + +void func_80170AD8(void *a0) { + D_8018ADEC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_8018ADF4[])(void); + +void func_80170BD8(void *a0) { + D_8018ADF4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_8018ADFC[])(void); + +void func_80170C74(void *a0) { + D_8018ADFC[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8016AB6C", func_80170CF0); + + +extern void (*D_8018AE04[])(void); + +void func_80170D68(void *a0) { + D_8018AE04[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_8018AE0C[])(void); + +void func_80170E34(void *a0) { + D_8018AE0C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_8018AE14[])(void); + +void func_80170EFC(void *a0) { + D_8018AE14[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_8018AE1C[])(void); + +void func_80170FB0(void *a0) { + D_8018AE1C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_8018AE24[])(void); + +void func_80171064(void *a0) { + D_8018AE24[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_8018AE2C[])(void); + +void func_80171120(void *a0) { + D_8018AE2C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_8018AE34[])(void); + +void func_801711C0(void *a0) { + D_8018AE34[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_8018AE3C[])(void); + +void func_80171260(void *a0) { + D_8018AE3C[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_8018AE44[])(void); + +void func_801714E4(void *a0) { + D_8018AE44[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8016AB6C", func_80172C50); + + +extern void (*D_8018AE88[])(void); + +void func_80172CA0(void *a0) { + D_8018AE88[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_8018AE4C; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_8018AE4C); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_095/ov_SC03_095_jr_8015AE2C.c b/src/ov_SC03_095/ov_SC03_095_jr_8015AE2C.c index f6915247f..17afbca2f 100644 --- a/src/ov_SC03_095/ov_SC03_095_jr_8015AE2C.c +++ b/src/ov_SC03_095/ov_SC03_095_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_801840A0[])(void); void func_8016AB30(void *a0) { D_801840A0[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_8018411C[])(void); - -void func_8016B4BC(void *a0) { - D_8018411C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_8019AFE0; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_8019AFE0); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80184110[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80184110; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80184154[]; -extern unsigned short D_8018415C[]; -extern unsigned short D_80184164[]; -extern unsigned char D_8019AFE8[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_8019AFE8 + param_2 * 0x40); - puVar3 = D_80184154[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_8018415C[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80184164[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_8019AFE0; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_8019AFE0, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_8018416C[])(void); - -void func_8016BBA4(void *a0) { - D_8018416C[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_8019B11C; - extern u8 D_8019B11D; - extern u8 D_8019B11E; - extern M2C_UNK D_8019B120; - extern u8 D_8019B121; - extern u8 D_8019B122; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_8019B11C) = 0x20; - D_8019B11D = 0x20; - D_8019B11E = 0; - (*(u8 *)&D_8019B120) = 0xc0; - D_8019B121 = 0xc0; - D_8019B122 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_8019B11C; -extern M2C_UNK D_8019B120; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_8019B11C, &D_8019B120, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_8019B11D; - extern u8 D_8019B11E; - extern u8 D_8019B121; - extern u8 D_8019B122; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_8019B11C); - if (*p1 != 0) *p1 -= 4; - if (D_8019B11D != 0) D_8019B11D -= 4; - if (D_8019B11E != 0) D_8019B11E -= 4; - p2 = &(*(u8 *)&D_8019B120); - if (*p2 != 0) *p2 -= 4; - if (D_8019B121 != 0) D_8019B121 -= 4; - if (D_8019B122 != 0) D_8019B122 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_8019B11C), &(*(int *)&D_8019B120), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_8019B0A8; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_8019B0A8); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_8018417C; - extern s32 D_80184184; - extern s32 D_8018418C; - extern s32 D_80184194; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_8018417C, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80184184, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_8018418C, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80184194, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_8018419C[])(void); - -void func_8016C14C(void *a0) { - D_8018419C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_8019B124[]; -extern u8 D_8019B12C[]; -extern u8 D_8019B0DC[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_8019B124, D_8019B12C, D_8019B0DC); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_8019B138[]; - extern u8 D_8019B1F8; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_8019B138[1] = 0xff; - D_8019B138[2] = 0x10; - D_8019B138[0] = 0x10; - D_8019B138[6] = 0; - D_8019B138[5] = 0; - D_8019B138[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_8019B138, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_8019B1F8, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_8019B138); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8015AE2C", func_8016C998); - - -extern void (*D_801841A4[])(void); - -void func_8016CB84(void *a0) { - D_801841A4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_8019B1F8[]; - - - Blk_8016CF04_8016CF04 *p = &D_8019B1F8[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_801841C0[])(void); - -void func_8016D19C(void *a0) { - D_801841C0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_801841C8[])(void); - -void func_8016D428(void *a0) { - D_801841C8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80184230[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80184230[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_801841D4; -extern u8 D_801841E0; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801841D4, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801841E0); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80184264[])(void); - -void func_8016DEA4(void *a0) { - D_80184264[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_8018426C[])(void); - -void func_8016DF20(void *a0) { - D_8018426C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_801842C0[])(void); - -void func_8016E5B8(void *a0) { - D_801842C0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80184280[4]; - extern s32 D_801842A0; - extern s32 D_801842A8; - extern s32 D_801842B0; - extern s32 D_801842B8; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80184280[0], pp, &tmp); - RotTransSV(&D_80184280[1], &prim.v[1], &tmp); - RotTransSV(&D_80184280[2], &prim.v[2], &tmp); - RotTransSV(&D_80184280[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_801842A0; - prim.f1 = D_801842A8; - prim.f2 = D_801842B0; - prim.f3 = D_801842B8; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80184300[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80184300[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_801842F4[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_801842F4[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_801842E4[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_801842E4[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801842F4[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_801842F4[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_801842F4[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80184310; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80184310; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80184388[])(void); - -void func_8016F6E0(void *a0) { - D_80184388[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80184390[])(void); - -void func_8016F798(void *a0) { - D_80184390[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80184398[])(void); - -void func_8016F834(void *a0) { - D_80184398[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_801843A0[])(void); - -void func_8016F8E4(void *a0) { - D_801843A0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_801843A8[])(void); - -void func_8016F9C4(void *a0) { - D_801843A8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_801843B0[])(void); - -void func_8016FA84(void *a0) { - D_801843B0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_801843BC[])(void); - -void func_8016FB7C(void *a0) { - D_801843BC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_801843C8[])(void); - -void func_8016FC90(void *a0) { - D_801843C8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_801843D4[])(void); - -void func_8016FDB4(void *a0) { - D_801843D4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_801843E4[])(void); - -void func_8016FF30(void *a0) { - D_801843E4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_801843F4[])(void); - -void func_8016FFDC(void *a0) { - D_801843F4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_801843FC[])(void); - -void func_80170150(void *a0) { - D_801843FC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80184404[])(void); - -void func_80170240(void *a0) { - D_80184404[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_8018440C[])(void); - -void func_801702FC(void *a0) { - D_8018440C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80184414[])(void); - -void func_801703E0(void *a0) { - D_80184414[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_8018441C[])(void); - -void func_801704B0(void *a0) { - D_8018441C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80184424[])(void); - -void func_80170548(void *a0) { - D_80184424[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_8018442C[])(void); - -void func_801705F8(void *a0) { - D_8018442C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80184434[])(void); - -void func_801706AC(void *a0) { - D_80184434[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_8018443C[])(void); - -void func_80170748(void *a0) { - D_8018443C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80184444[])(void); - -void func_80170810(void *a0) { - D_80184444[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_8018444C[])(void); - -void func_80170AD8(void *a0) { - D_8018444C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80184454[])(void); - -void func_80170BD8(void *a0) { - D_80184454[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_8018445C[])(void); - -void func_80170C74(void *a0) { - D_8018445C[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80184464[])(void); - -void func_80170D68(void *a0) { - D_80184464[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_8018446C[])(void); - -void func_80170E34(void *a0) { - D_8018446C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80184474[])(void); - -void func_80170EFC(void *a0) { - D_80184474[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_8018447C[])(void); - -void func_80170FB0(void *a0) { - D_8018447C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80184484[])(void); - -void func_80171064(void *a0) { - D_80184484[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_8018448C[])(void); - -void func_80171120(void *a0) { - D_8018448C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80184494[])(void); - -void func_801711C0(void *a0) { - D_80184494[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_8018449C[])(void); - -void func_80171260(void *a0) { - D_8018449C[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_801844A4[])(void); - -void func_801714E4(void *a0) { - D_801844A4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8015AE2C", func_80172C50); - - -extern void (*D_801844E8[])(void); - -void func_80172CA0(void *a0) { - D_801844E8[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_801844AC; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_801844AC); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_095/ov_SC03_095_jr_8016AB6C.c b/src/ov_SC03_095/ov_SC03_095_jr_8016AB6C.c new file mode 100644 index 000000000..86536a852 --- /dev/null +++ b/src/ov_SC03_095/ov_SC03_095_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018346C; +extern u8 D_801833DC; +extern u8 D_801833B8; +extern u8 D_80183394; +extern u8 D_80183448; +extern u8 D_80183424; +extern u8 D_80183400; +extern u8 D_80183370; +extern void func_80145934(void); +extern u8 D_801834FC; +extern u8 D_801834D8; +extern u8 D_801834B4; +extern u8 D_80183490; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801828F4[]; +extern unsigned char D_80182924[]; +extern unsigned char D_80182974[]; +extern unsigned char D_801829A4[]; +extern unsigned char D_801829D4[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80182A24[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80182AEC[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80182B74[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80182B7C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8019AB70; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019AB74; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80182BAC; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80182C54[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80182C78[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80182C68; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80182C8C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80182C98[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80182CA8[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80182CC0[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80182CB0; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80182CD4[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80182CF0[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80182CE0; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80182D04[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80182D18[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80182D2C; +extern void (*D_80182D54[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80182D34; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80182DA0[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80182DA4[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80183208[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80183218[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_8019ABA8; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80183240[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80183220; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80183230; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80183280[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80183288[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80183254; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80183294[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80183264; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_8019ABB0; +extern s32 D_8019ABBC; +extern s32 D_8019ABC0; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801832D0[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801832A4[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_8019ABB8; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80183520[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80183340[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_801835C4[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80183718[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80183534; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80183720[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80183544; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80183564; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80183728[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80183750[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_8018375C[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_801835D0[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80183800; +extern void func_8015D380(s32 a0); +extern unsigned char D_801828E4[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80183814[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80183850[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80183898; +extern u16 D_8018389A; +extern u16 D_8018389C; +extern s32 D_801838A0; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_801838A8; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_801835B4; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_8018392C[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_801839DC[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80183A0C[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80183A70; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_8019ABC8[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80183A94[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_8019AC20[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80183ADC[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80183ACC; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_8019A458[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80183AE4[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80183B38[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80183B00; +extern s16 D_80183B34; +extern s16 D_80183B32; +extern s16 D_80183B30; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80183B44[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_8019AC80; +extern u8 D_8019AC81; +extern u8 D_8019AC82; +extern u8 D_8019AC83; +extern u8 D_8019AC84; +extern u8 D_8019AC85; +extern u8 D_8019AC86; +extern u8 D_8019AC87; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80183B54[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_8019ACC0; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80183B98[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80183C14[]; +extern s32 D_80183C34[]; +extern u8 D_80183CB0[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80183CD0[]; +extern u8 D_80183CF0[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80183D8C[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80183E08[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_8019A468; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80183E14[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80183E1C[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80183EE4[])(void); +extern void func_80166618(void *a0); +extern void (*D_80183EF4[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80183F04[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80183F10[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80183E70[]; +extern u8 D_80183E84[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80183F28[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80183F30[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80183F38[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80183F40[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80183F48[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80183F50[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80183F58[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_8018400C[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80184014[])(void); +extern void func_80169F00(void *a0); +extern char D_80183FC4[]; +extern char D_80183F84[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_8018404C[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80184058[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_801840A0[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80184060[]; + extern u8 D_80184070[]; + extern u8 D_8019AF90[]; + extern u8 D_8019AFB8[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80184060, D_8019AF90) + 3; + func_8001CE28(obj, D_8019AF90); + } else { + var_s3 = func_80024054(D_80184070, D_8019AFB8) + 9; + func_8001CE28(obj, D_8019AFB8); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_8018411C[])(void); + +void func_8016B4BC(void *a0) { + D_8018411C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_8019AFE0; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_8019AFE0); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80184110[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80184110; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80184154[]; +extern unsigned short D_8018415C[]; +extern unsigned short D_80184164[]; +extern unsigned char D_8019AFE8[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_8019AFE8 + param_2 * 0x40); + puVar3 = D_80184154[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_8018415C[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80184164[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_8019AFE0; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_8019AFE0, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_8018416C[])(void); + +void func_8016BBA4(void *a0) { + D_8018416C[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_8019B11C; + extern u8 D_8019B11D; + extern u8 D_8019B11E; + extern M2C_UNK D_8019B120; + extern u8 D_8019B121; + extern u8 D_8019B122; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_8019B11C) = 0x20; + D_8019B11D = 0x20; + D_8019B11E = 0; + (*(u8 *)&D_8019B120) = 0xc0; + D_8019B121 = 0xc0; + D_8019B122 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_8019B11C; +extern M2C_UNK D_8019B120; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_8019B11C, &D_8019B120, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_8019B11D; + extern u8 D_8019B11E; + extern u8 D_8019B121; + extern u8 D_8019B122; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_8019B11C); + if (*p1 != 0) *p1 -= 4; + if (D_8019B11D != 0) D_8019B11D -= 4; + if (D_8019B11E != 0) D_8019B11E -= 4; + p2 = &(*(u8 *)&D_8019B120); + if (*p2 != 0) *p2 -= 4; + if (D_8019B121 != 0) D_8019B121 -= 4; + if (D_8019B122 != 0) D_8019B122 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_8019B11C), &(*(int *)&D_8019B120), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_8019B0A8; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_8019B0A8); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_8018417C; + extern s32 D_80184184; + extern s32 D_8018418C; + extern s32 D_80184194; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_8018417C, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80184184, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_8018418C, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80184194, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_8018419C[])(void); + +void func_8016C14C(void *a0) { + D_8018419C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_8019B124[]; +extern u8 D_8019B12C[]; +extern u8 D_8019B0DC[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_8019B124, D_8019B12C, D_8019B0DC); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_8019B138[]; + extern u8 D_8019B1F8; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_8019B138[1] = 0xff; + D_8019B138[2] = 0x10; + D_8019B138[0] = 0x10; + D_8019B138[6] = 0; + D_8019B138[5] = 0; + D_8019B138[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_8019B138, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_8019B1F8, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_8019B138); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8016AB6C", func_8016C998); + + +extern void (*D_801841A4[])(void); + +void func_8016CB84(void *a0) { + D_801841A4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_8019B1F8[]; + + + Blk_8016CF04_8016CF04 *p = &D_8019B1F8[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_801841C0[])(void); + +void func_8016D19C(void *a0) { + D_801841C0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_801841C8[])(void); + +void func_8016D428(void *a0) { + D_801841C8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80184230[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80184230[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_801841D4; +extern u8 D_801841E0; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801841D4, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801841E0); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80184264[])(void); + +void func_8016DEA4(void *a0) { + D_80184264[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_8018426C[])(void); + +void func_8016DF20(void *a0) { + D_8018426C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_801842C0[])(void); + +void func_8016E5B8(void *a0) { + D_801842C0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80184280[4]; + extern s32 D_801842A0; + extern s32 D_801842A8; + extern s32 D_801842B0; + extern s32 D_801842B8; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80184280[0], pp, &tmp); + RotTransSV(&D_80184280[1], &prim.v[1], &tmp); + RotTransSV(&D_80184280[2], &prim.v[2], &tmp); + RotTransSV(&D_80184280[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_801842A0; + prim.f1 = D_801842A8; + prim.f2 = D_801842B0; + prim.f3 = D_801842B8; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80184300[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80184300[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_801842F4[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_801842F4[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_801842E4[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_801842E4[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801842F4[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_801842F4[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_801842F4[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80184310; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80184310; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80184388[])(void); + +void func_8016F6E0(void *a0) { + D_80184388[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80184390[])(void); + +void func_8016F798(void *a0) { + D_80184390[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80184398[])(void); + +void func_8016F834(void *a0) { + D_80184398[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_801843A0[])(void); + +void func_8016F8E4(void *a0) { + D_801843A0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_801843A8[])(void); + +void func_8016F9C4(void *a0) { + D_801843A8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_801843B0[])(void); + +void func_8016FA84(void *a0) { + D_801843B0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_801843BC[])(void); + +void func_8016FB7C(void *a0) { + D_801843BC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_801843C8[])(void); + +void func_8016FC90(void *a0) { + D_801843C8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_801843D4[])(void); + +void func_8016FDB4(void *a0) { + D_801843D4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_801843E4[])(void); + +void func_8016FF30(void *a0) { + D_801843E4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_801843F4[])(void); + +void func_8016FFDC(void *a0) { + D_801843F4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_801843FC[])(void); + +void func_80170150(void *a0) { + D_801843FC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80184404[])(void); + +void func_80170240(void *a0) { + D_80184404[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_8018440C[])(void); + +void func_801702FC(void *a0) { + D_8018440C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80184414[])(void); + +void func_801703E0(void *a0) { + D_80184414[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_8018441C[])(void); + +void func_801704B0(void *a0) { + D_8018441C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80184424[])(void); + +void func_80170548(void *a0) { + D_80184424[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_8018442C[])(void); + +void func_801705F8(void *a0) { + D_8018442C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80184434[])(void); + +void func_801706AC(void *a0) { + D_80184434[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_8018443C[])(void); + +void func_80170748(void *a0) { + D_8018443C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80184444[])(void); + +void func_80170810(void *a0) { + D_80184444[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_8018444C[])(void); + +void func_80170AD8(void *a0) { + D_8018444C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80184454[])(void); + +void func_80170BD8(void *a0) { + D_80184454[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_8018445C[])(void); + +void func_80170C74(void *a0) { + D_8018445C[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80184464[])(void); + +void func_80170D68(void *a0) { + D_80184464[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_8018446C[])(void); + +void func_80170E34(void *a0) { + D_8018446C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80184474[])(void); + +void func_80170EFC(void *a0) { + D_80184474[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_8018447C[])(void); + +void func_80170FB0(void *a0) { + D_8018447C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80184484[])(void); + +void func_80171064(void *a0) { + D_80184484[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_8018448C[])(void); + +void func_80171120(void *a0) { + D_8018448C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80184494[])(void); + +void func_801711C0(void *a0) { + D_80184494[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_8018449C[])(void); + +void func_80171260(void *a0) { + D_8018449C[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_801844A4[])(void); + +void func_801714E4(void *a0) { + D_801844A4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8016AB6C", func_80172C50); + + +extern void (*D_801844E8[])(void); + +void func_80172CA0(void *a0) { + D_801844E8[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_801844AC; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_801844AC); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_096/ov_SC03_096_jr_8015AE2C.c b/src/ov_SC03_096/ov_SC03_096_jr_8015AE2C.c index a2ea0411c..40e36866d 100644 --- a/src/ov_SC03_096/ov_SC03_096_jr_8015AE2C.c +++ b/src/ov_SC03_096/ov_SC03_096_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_80183C20[])(void); void func_8016AB30(void *a0) { D_80183C20[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80183C9C[])(void); - -void func_8016B4BC(void *a0) { - D_80183C9C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_80199A98; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_80199A98); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80183C90[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80183C90; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80183CD4[]; -extern unsigned short D_80183CDC[]; -extern unsigned short D_80183CE4[]; -extern unsigned char D_80199AA0[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_80199AA0 + param_2 * 0x40); - puVar3 = D_80183CD4[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80183CDC[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80183CE4[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_80199A98; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_80199A98, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80183CEC[])(void); - -void func_8016BBA4(void *a0) { - D_80183CEC[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_80199BD4; - extern u8 D_80199BD5; - extern u8 D_80199BD6; - extern M2C_UNK D_80199BD8; - extern u8 D_80199BD9; - extern u8 D_80199BDA; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_80199BD4) = 0x20; - D_80199BD5 = 0x20; - D_80199BD6 = 0; - (*(u8 *)&D_80199BD8) = 0xc0; - D_80199BD9 = 0xc0; - D_80199BDA = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_80199BD4; -extern M2C_UNK D_80199BD8; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_80199BD4, &D_80199BD8, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_80199BD5; - extern u8 D_80199BD6; - extern u8 D_80199BD9; - extern u8 D_80199BDA; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_80199BD4); - if (*p1 != 0) *p1 -= 4; - if (D_80199BD5 != 0) D_80199BD5 -= 4; - if (D_80199BD6 != 0) D_80199BD6 -= 4; - p2 = &(*(u8 *)&D_80199BD8); - if (*p2 != 0) *p2 -= 4; - if (D_80199BD9 != 0) D_80199BD9 -= 4; - if (D_80199BDA != 0) D_80199BDA -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_80199BD4), &(*(int *)&D_80199BD8), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_80199B60; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_80199B60); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80183CFC; - extern s32 D_80183D04; - extern s32 D_80183D0C; - extern s32 D_80183D14; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80183CFC, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80183D04, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80183D0C, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80183D14, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80183D1C[])(void); - -void func_8016C14C(void *a0) { - D_80183D1C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_80199BDC[]; -extern u8 D_80199BE4[]; -extern u8 D_80199B94[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_80199BDC, D_80199BE4, D_80199B94); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_80199BF0[]; - extern u8 D_80199CB0; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_80199BF0[1] = 0xff; - D_80199BF0[2] = 0x10; - D_80199BF0[0] = 0x10; - D_80199BF0[6] = 0; - D_80199BF0[5] = 0; - D_80199BF0[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_80199BF0, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_80199CB0, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_80199BF0); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8015AE2C", func_8016C998); - - -extern void (*D_80183D24[])(void); - -void func_8016CB84(void *a0) { - D_80183D24[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_80199CB0[]; - - - Blk_8016CF04_8016CF04 *p = &D_80199CB0[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80183D40[])(void); - -void func_8016D19C(void *a0) { - D_80183D40[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80183D48[])(void); - -void func_8016D428(void *a0) { - D_80183D48[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80183DB0[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80183DB0[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80183D54; -extern u8 D_80183D60; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80183D54, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80183D60); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80183DE4[])(void); - -void func_8016DEA4(void *a0) { - D_80183DE4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80183DEC[])(void); - -void func_8016DF20(void *a0) { - D_80183DEC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80183E40[])(void); - -void func_8016E5B8(void *a0) { - D_80183E40[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80183E00[4]; - extern s32 D_80183E20; - extern s32 D_80183E28; - extern s32 D_80183E30; - extern s32 D_80183E38; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80183E00[0], pp, &tmp); - RotTransSV(&D_80183E00[1], &prim.v[1], &tmp); - RotTransSV(&D_80183E00[2], &prim.v[2], &tmp); - RotTransSV(&D_80183E00[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80183E20; - prim.f1 = D_80183E28; - prim.f2 = D_80183E30; - prim.f3 = D_80183E38; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80183E80[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80183E80[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80183E74[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80183E74[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80183E64[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80183E64[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80183E74[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80183E74[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80183E74[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80183E90; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80183E90; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80183F08[])(void); - -void func_8016F6E0(void *a0) { - D_80183F08[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80183F10[])(void); - -void func_8016F798(void *a0) { - D_80183F10[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80183F18[])(void); - -void func_8016F834(void *a0) { - D_80183F18[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80183F20[])(void); - -void func_8016F8E4(void *a0) { - D_80183F20[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80183F28[])(void); - -void func_8016F9C4(void *a0) { - D_80183F28[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80183F30[])(void); - -void func_8016FA84(void *a0) { - D_80183F30[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80183F3C[])(void); - -void func_8016FB7C(void *a0) { - D_80183F3C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80183F48[])(void); - -void func_8016FC90(void *a0) { - D_80183F48[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80183F54[])(void); - -void func_8016FDB4(void *a0) { - D_80183F54[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80183F64[])(void); - -void func_8016FF30(void *a0) { - D_80183F64[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80183F74[])(void); - -void func_8016FFDC(void *a0) { - D_80183F74[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80183F7C[])(void); - -void func_80170150(void *a0) { - D_80183F7C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80183F84[])(void); - -void func_80170240(void *a0) { - D_80183F84[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80183F8C[])(void); - -void func_801702FC(void *a0) { - D_80183F8C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80183F94[])(void); - -void func_801703E0(void *a0) { - D_80183F94[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80183F9C[])(void); - -void func_801704B0(void *a0) { - D_80183F9C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80183FA4[])(void); - -void func_80170548(void *a0) { - D_80183FA4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80183FAC[])(void); - -void func_801705F8(void *a0) { - D_80183FAC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80183FB4[])(void); - -void func_801706AC(void *a0) { - D_80183FB4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80183FBC[])(void); - -void func_80170748(void *a0) { - D_80183FBC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80183FC4[])(void); - -void func_80170810(void *a0) { - D_80183FC4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80183FCC[])(void); - -void func_80170AD8(void *a0) { - D_80183FCC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80183FD4[])(void); - -void func_80170BD8(void *a0) { - D_80183FD4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80183FDC[])(void); - -void func_80170C74(void *a0) { - D_80183FDC[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80183FE4[])(void); - -void func_80170D68(void *a0) { - D_80183FE4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80183FEC[])(void); - -void func_80170E34(void *a0) { - D_80183FEC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80183FF4[])(void); - -void func_80170EFC(void *a0) { - D_80183FF4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80183FFC[])(void); - -void func_80170FB0(void *a0) { - D_80183FFC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80184004[])(void); - -void func_80171064(void *a0) { - D_80184004[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_8018400C[])(void); - -void func_80171120(void *a0) { - D_8018400C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80184014[])(void); - -void func_801711C0(void *a0) { - D_80184014[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_8018401C[])(void); - -void func_80171260(void *a0) { - D_8018401C[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80184024[])(void); - -void func_801714E4(void *a0) { - D_80184024[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8015AE2C", func_80172C50); - - -extern void (*D_80184068[])(void); - -void func_80172CA0(void *a0) { - D_80184068[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_8018402C; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_8018402C); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_096/ov_SC03_096_jr_8016AB6C.c b/src/ov_SC03_096/ov_SC03_096_jr_8016AB6C.c new file mode 100644 index 000000000..af23f58e3 --- /dev/null +++ b/src/ov_SC03_096/ov_SC03_096_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80182FEC; +extern u8 D_80182F5C; +extern u8 D_80182F38; +extern u8 D_80182F14; +extern u8 D_80182FC8; +extern u8 D_80182FA4; +extern u8 D_80182F80; +extern u8 D_80182EF0; +extern void func_80145934(void); +extern u8 D_8018307C; +extern u8 D_80183058; +extern u8 D_80183034; +extern u8 D_80183010; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80182474[]; +extern unsigned char D_801824A4[]; +extern unsigned char D_801824F4[]; +extern unsigned char D_80182524[]; +extern unsigned char D_80182554[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801825A4[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018266C[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801826F4[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801826FC; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_80199628; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019962C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018272C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801827D4[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801827F8[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801827E8; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018280C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80182818[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80182828[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80182840[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80182830; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80182854[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80182870[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80182860; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80182884[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80182898[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801828AC; +extern void (*D_801828D4[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801828B4; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80182920[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80182924[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80182D88[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80182D98[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_80199660; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80182DC0[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80182DA0; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80182DB0; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80182E00[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80182E08[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80182DD4; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80182E14[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80182DE4; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_80199668; +extern s32 D_80199674; +extern s32 D_80199678; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80182E50[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80182E24[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_80199670; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_801830A0[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80182EC0[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80183144[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80183298[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_801830B4; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_801832A0[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_801830C4; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801830E4; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_801832A8[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_801832D0[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_801832DC[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80183150[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80183380; +extern void func_8015D380(s32 a0); +extern unsigned char D_80182464[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80183394[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_801833D0[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80183418; +extern u16 D_8018341A; +extern u16 D_8018341C; +extern s32 D_80183420; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80183428; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80183134; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_801834AC[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_8018355C[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_8018358C[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_801835F0; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_80199680[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80183614[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801996D8[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_8018365C[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_8018364C; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_80198F0C[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80183664[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_801836B8[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80183680; +extern s16 D_801836B4; +extern s16 D_801836B2; +extern s16 D_801836B0; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_801836C4[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_80199738; +extern u8 D_80199739; +extern u8 D_8019973A; +extern u8 D_8019973B; +extern u8 D_8019973C; +extern u8 D_8019973D; +extern u8 D_8019973E; +extern u8 D_8019973F; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_801836D4[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_80199778; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80183718[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80183794[]; +extern s32 D_801837B4[]; +extern u8 D_80183830[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80183850[]; +extern u8 D_80183870[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_8018390C[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80183988[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_80198F1C; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80183994[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_8018399C[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80183A64[])(void); +extern void func_80166618(void *a0); +extern void (*D_80183A74[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80183A84[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80183A90[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_801839F0[]; +extern u8 D_80183A04[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80183AA8[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80183AB0[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80183AB8[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80183AC0[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80183AC8[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80183AD0[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80183AD8[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80183B8C[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80183B94[])(void); +extern void func_80169F00(void *a0); +extern char D_80183B44[]; +extern char D_80183B04[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80183BCC[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80183BD8[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80183C20[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80183BE0[]; + extern u8 D_80183BF0[]; + extern u8 D_80199A48[]; + extern u8 D_80199A70[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80183BE0, D_80199A48) + 3; + func_8001CE28(obj, D_80199A48); + } else { + var_s3 = func_80024054(D_80183BF0, D_80199A70) + 9; + func_8001CE28(obj, D_80199A70); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80183C9C[])(void); + +void func_8016B4BC(void *a0) { + D_80183C9C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_80199A98; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_80199A98); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80183C90[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80183C90; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80183CD4[]; +extern unsigned short D_80183CDC[]; +extern unsigned short D_80183CE4[]; +extern unsigned char D_80199AA0[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_80199AA0 + param_2 * 0x40); + puVar3 = D_80183CD4[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80183CDC[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80183CE4[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_80199A98; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_80199A98, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80183CEC[])(void); + +void func_8016BBA4(void *a0) { + D_80183CEC[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_80199BD4; + extern u8 D_80199BD5; + extern u8 D_80199BD6; + extern M2C_UNK D_80199BD8; + extern u8 D_80199BD9; + extern u8 D_80199BDA; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_80199BD4) = 0x20; + D_80199BD5 = 0x20; + D_80199BD6 = 0; + (*(u8 *)&D_80199BD8) = 0xc0; + D_80199BD9 = 0xc0; + D_80199BDA = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_80199BD4; +extern M2C_UNK D_80199BD8; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_80199BD4, &D_80199BD8, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_80199BD5; + extern u8 D_80199BD6; + extern u8 D_80199BD9; + extern u8 D_80199BDA; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_80199BD4); + if (*p1 != 0) *p1 -= 4; + if (D_80199BD5 != 0) D_80199BD5 -= 4; + if (D_80199BD6 != 0) D_80199BD6 -= 4; + p2 = &(*(u8 *)&D_80199BD8); + if (*p2 != 0) *p2 -= 4; + if (D_80199BD9 != 0) D_80199BD9 -= 4; + if (D_80199BDA != 0) D_80199BDA -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_80199BD4), &(*(int *)&D_80199BD8), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_80199B60; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_80199B60); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80183CFC; + extern s32 D_80183D04; + extern s32 D_80183D0C; + extern s32 D_80183D14; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80183CFC, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80183D04, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80183D0C, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80183D14, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80183D1C[])(void); + +void func_8016C14C(void *a0) { + D_80183D1C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_80199BDC[]; +extern u8 D_80199BE4[]; +extern u8 D_80199B94[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_80199BDC, D_80199BE4, D_80199B94); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_80199BF0[]; + extern u8 D_80199CB0; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_80199BF0[1] = 0xff; + D_80199BF0[2] = 0x10; + D_80199BF0[0] = 0x10; + D_80199BF0[6] = 0; + D_80199BF0[5] = 0; + D_80199BF0[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_80199BF0, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_80199CB0, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_80199BF0); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8016AB6C", func_8016C998); + + +extern void (*D_80183D24[])(void); + +void func_8016CB84(void *a0) { + D_80183D24[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_80199CB0[]; + + + Blk_8016CF04_8016CF04 *p = &D_80199CB0[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80183D40[])(void); + +void func_8016D19C(void *a0) { + D_80183D40[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80183D48[])(void); + +void func_8016D428(void *a0) { + D_80183D48[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80183DB0[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80183DB0[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80183D54; +extern u8 D_80183D60; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80183D54, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80183D60); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80183DE4[])(void); + +void func_8016DEA4(void *a0) { + D_80183DE4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80183DEC[])(void); + +void func_8016DF20(void *a0) { + D_80183DEC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80183E40[])(void); + +void func_8016E5B8(void *a0) { + D_80183E40[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80183E00[4]; + extern s32 D_80183E20; + extern s32 D_80183E28; + extern s32 D_80183E30; + extern s32 D_80183E38; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80183E00[0], pp, &tmp); + RotTransSV(&D_80183E00[1], &prim.v[1], &tmp); + RotTransSV(&D_80183E00[2], &prim.v[2], &tmp); + RotTransSV(&D_80183E00[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80183E20; + prim.f1 = D_80183E28; + prim.f2 = D_80183E30; + prim.f3 = D_80183E38; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80183E80[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80183E80[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80183E74[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80183E74[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80183E64[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80183E64[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80183E74[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80183E74[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80183E74[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80183E90; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80183E90; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80183F08[])(void); + +void func_8016F6E0(void *a0) { + D_80183F08[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80183F10[])(void); + +void func_8016F798(void *a0) { + D_80183F10[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80183F18[])(void); + +void func_8016F834(void *a0) { + D_80183F18[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80183F20[])(void); + +void func_8016F8E4(void *a0) { + D_80183F20[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80183F28[])(void); + +void func_8016F9C4(void *a0) { + D_80183F28[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80183F30[])(void); + +void func_8016FA84(void *a0) { + D_80183F30[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80183F3C[])(void); + +void func_8016FB7C(void *a0) { + D_80183F3C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80183F48[])(void); + +void func_8016FC90(void *a0) { + D_80183F48[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80183F54[])(void); + +void func_8016FDB4(void *a0) { + D_80183F54[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80183F64[])(void); + +void func_8016FF30(void *a0) { + D_80183F64[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80183F74[])(void); + +void func_8016FFDC(void *a0) { + D_80183F74[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80183F7C[])(void); + +void func_80170150(void *a0) { + D_80183F7C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80183F84[])(void); + +void func_80170240(void *a0) { + D_80183F84[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80183F8C[])(void); + +void func_801702FC(void *a0) { + D_80183F8C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80183F94[])(void); + +void func_801703E0(void *a0) { + D_80183F94[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80183F9C[])(void); + +void func_801704B0(void *a0) { + D_80183F9C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80183FA4[])(void); + +void func_80170548(void *a0) { + D_80183FA4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80183FAC[])(void); + +void func_801705F8(void *a0) { + D_80183FAC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80183FB4[])(void); + +void func_801706AC(void *a0) { + D_80183FB4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80183FBC[])(void); + +void func_80170748(void *a0) { + D_80183FBC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80183FC4[])(void); + +void func_80170810(void *a0) { + D_80183FC4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80183FCC[])(void); + +void func_80170AD8(void *a0) { + D_80183FCC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80183FD4[])(void); + +void func_80170BD8(void *a0) { + D_80183FD4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80183FDC[])(void); + +void func_80170C74(void *a0) { + D_80183FDC[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80183FE4[])(void); + +void func_80170D68(void *a0) { + D_80183FE4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80183FEC[])(void); + +void func_80170E34(void *a0) { + D_80183FEC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80183FF4[])(void); + +void func_80170EFC(void *a0) { + D_80183FF4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80183FFC[])(void); + +void func_80170FB0(void *a0) { + D_80183FFC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80184004[])(void); + +void func_80171064(void *a0) { + D_80184004[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_8018400C[])(void); + +void func_80171120(void *a0) { + D_8018400C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80184014[])(void); + +void func_801711C0(void *a0) { + D_80184014[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_8018401C[])(void); + +void func_80171260(void *a0) { + D_8018401C[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80184024[])(void); + +void func_801714E4(void *a0) { + D_80184024[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8016AB6C", func_80172C50); + + +extern void (*D_80184068[])(void); + +void func_80172CA0(void *a0) { + D_80184068[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_8018402C; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_8018402C); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_097/ov_SC03_097_jr_8015AE2C.c b/src/ov_SC03_097/ov_SC03_097_jr_8015AE2C.c index c5c40f5b8..39f678ab2 100644 --- a/src/ov_SC03_097/ov_SC03_097_jr_8015AE2C.c +++ b/src/ov_SC03_097/ov_SC03_097_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_80189000[])(void); void func_8016AB30(void *a0) { D_80189000[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_8018907C[])(void); - -void func_8016B4BC(void *a0) { - D_8018907C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801A9B20; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801A9B20); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80189070[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80189070; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_801890B4[]; -extern unsigned short D_801890BC[]; -extern unsigned short D_801890C4[]; -extern unsigned char D_801A9B28[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801A9B28 + param_2 * 0x40); - puVar3 = D_801890B4[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_801890BC[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_801890C4[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801A9B20; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801A9B20, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_801890CC[])(void); - -void func_8016BBA4(void *a0) { - D_801890CC[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801A9C5C; - extern u8 D_801A9C5D; - extern u8 D_801A9C5E; - extern M2C_UNK D_801A9C60; - extern u8 D_801A9C61; - extern u8 D_801A9C62; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801A9C5C) = 0x20; - D_801A9C5D = 0x20; - D_801A9C5E = 0; - (*(u8 *)&D_801A9C60) = 0xc0; - D_801A9C61 = 0xc0; - D_801A9C62 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801A9C5C; -extern M2C_UNK D_801A9C60; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801A9C5C, &D_801A9C60, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801A9C5D; - extern u8 D_801A9C5E; - extern u8 D_801A9C61; - extern u8 D_801A9C62; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801A9C5C); - if (*p1 != 0) *p1 -= 4; - if (D_801A9C5D != 0) D_801A9C5D -= 4; - if (D_801A9C5E != 0) D_801A9C5E -= 4; - p2 = &(*(u8 *)&D_801A9C60); - if (*p2 != 0) *p2 -= 4; - if (D_801A9C61 != 0) D_801A9C61 -= 4; - if (D_801A9C62 != 0) D_801A9C62 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801A9C5C), &(*(int *)&D_801A9C60), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801A9BE8; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801A9BE8); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_801890DC; - extern s32 D_801890E4; - extern s32 D_801890EC; - extern s32 D_801890F4; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_801890DC, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_801890E4, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_801890EC, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_801890F4, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_801890FC[])(void); - -void func_8016C14C(void *a0) { - D_801890FC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801A9C64[]; -extern u8 D_801A9C6C[]; -extern u8 D_801A9C1C[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801A9C64, D_801A9C6C, D_801A9C1C); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801A9C78[]; - extern u8 D_801A9D38; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801A9C78[1] = 0xff; - D_801A9C78[2] = 0x10; - D_801A9C78[0] = 0x10; - D_801A9C78[6] = 0; - D_801A9C78[5] = 0; - D_801A9C78[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801A9C78, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801A9D38, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801A9C78); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8015AE2C", func_8016C998); - - -extern void (*D_80189104[])(void); - -void func_8016CB84(void *a0) { - D_80189104[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801A9D38[]; - - - Blk_8016CF04_8016CF04 *p = &D_801A9D38[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80189120[])(void); - -void func_8016D19C(void *a0) { - D_80189120[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80189128[])(void); - -void func_8016D428(void *a0) { - D_80189128[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80189190[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80189190[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80189134; -extern u8 D_80189140; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80189134, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80189140); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8015AE2C", func_8016DC20); - - -extern void (*D_801891C4[])(void); - -void func_8016DEA4(void *a0) { - D_801891C4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_801891CC[])(void); - -void func_8016DF20(void *a0) { - D_801891CC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80189220[])(void); - -void func_8016E5B8(void *a0) { - D_80189220[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_801891E0[4]; - extern s32 D_80189200; - extern s32 D_80189208; - extern s32 D_80189210; - extern s32 D_80189218; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_801891E0[0], pp, &tmp); - RotTransSV(&D_801891E0[1], &prim.v[1], &tmp); - RotTransSV(&D_801891E0[2], &prim.v[2], &tmp); - RotTransSV(&D_801891E0[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80189200; - prim.f1 = D_80189208; - prim.f2 = D_80189210; - prim.f3 = D_80189218; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80189260[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80189260[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80189254[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80189254[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80189244[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80189244[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80189254[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80189254[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80189254[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80189270; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80189270; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_801892E8[])(void); - -void func_8016F6E0(void *a0) { - D_801892E8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_801892F0[])(void); - -void func_8016F798(void *a0) { - D_801892F0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_801892F8[])(void); - -void func_8016F834(void *a0) { - D_801892F8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80189300[])(void); - -void func_8016F8E4(void *a0) { - D_80189300[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80189308[])(void); - -void func_8016F9C4(void *a0) { - D_80189308[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80189310[])(void); - -void func_8016FA84(void *a0) { - D_80189310[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_8018931C[])(void); - -void func_8016FB7C(void *a0) { - D_8018931C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80189328[])(void); - -void func_8016FC90(void *a0) { - D_80189328[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80189334[])(void); - -void func_8016FDB4(void *a0) { - D_80189334[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80189344[])(void); - -void func_8016FF30(void *a0) { - D_80189344[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80189354[])(void); - -void func_8016FFDC(void *a0) { - D_80189354[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_8018935C[])(void); - -void func_80170150(void *a0) { - D_8018935C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80189364[])(void); - -void func_80170240(void *a0) { - D_80189364[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_8018936C[])(void); - -void func_801702FC(void *a0) { - D_8018936C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80189374[])(void); - -void func_801703E0(void *a0) { - D_80189374[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_8018937C[])(void); - -void func_801704B0(void *a0) { - D_8018937C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80189384[])(void); - -void func_80170548(void *a0) { - D_80189384[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_8018938C[])(void); - -void func_801705F8(void *a0) { - D_8018938C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80189394[])(void); - -void func_801706AC(void *a0) { - D_80189394[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_8018939C[])(void); - -void func_80170748(void *a0) { - D_8018939C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_801893A4[])(void); - -void func_80170810(void *a0) { - D_801893A4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_801893AC[])(void); - -void func_80170AD8(void *a0) { - D_801893AC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_801893B4[])(void); - -void func_80170BD8(void *a0) { - D_801893B4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_801893BC[])(void); - -void func_80170C74(void *a0) { - D_801893BC[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8015AE2C", func_80170CF0); - - -extern void (*D_801893C4[])(void); - -void func_80170D68(void *a0) { - D_801893C4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_801893CC[])(void); - -void func_80170E34(void *a0) { - D_801893CC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_801893D4[])(void); - -void func_80170EFC(void *a0) { - D_801893D4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_801893DC[])(void); - -void func_80170FB0(void *a0) { - D_801893DC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_801893E4[])(void); - -void func_80171064(void *a0) { - D_801893E4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_801893EC[])(void); - -void func_80171120(void *a0) { - D_801893EC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_801893F4[])(void); - -void func_801711C0(void *a0) { - D_801893F4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_801893FC[])(void); - -void func_80171260(void *a0) { - D_801893FC[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80189404[])(void); - -void func_801714E4(void *a0) { - D_80189404[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8015AE2C", func_80172C50); - - -extern void (*D_80189448[])(void); - -void func_80172CA0(void *a0) { - D_80189448[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_8018940C; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_8018940C); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_097/ov_SC03_097_jr_8016AB6C.c b/src/ov_SC03_097/ov_SC03_097_jr_8016AB6C.c new file mode 100644 index 000000000..401d935aa --- /dev/null +++ b/src/ov_SC03_097/ov_SC03_097_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801883CC; +extern u8 D_8018833C; +extern u8 D_80188318; +extern u8 D_801882F4; +extern u8 D_801883A8; +extern u8 D_80188384; +extern u8 D_80188360; +extern u8 D_801882D0; +extern void func_80145934(void); +extern u8 D_8018845C; +extern u8 D_80188438; +extern u8 D_80188414; +extern u8 D_801883F0; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80187854[]; +extern unsigned char D_80187884[]; +extern unsigned char D_801878D4[]; +extern unsigned char D_80187904[]; +extern unsigned char D_80187934[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80187984[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80187A4C[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80187AD4[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80187ADC; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801A96B0; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801A96B4; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80187B0C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80187BB4[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80187BD8[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80187BC8; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80187BEC[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80187BF8[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80187C08[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80187C20[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80187C10; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80187C34[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80187C50[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80187C40; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80187C64[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80187C78[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80187C8C; +extern void (*D_80187CB4[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80187C94; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80187D00[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80187D04[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80188168[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80188178[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801A96E8; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_801881A0[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80188180; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80188190; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801881E0[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801881E8[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_801881B4; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801881F4[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_801881C4; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801A96F0; +extern s32 D_801A96FC; +extern s32 D_801A9700; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80188230[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80188204[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801A96F8; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80188480[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_801882A0[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80188524[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80188678[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80188494; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80188680[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_801884A4; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801884C4; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80188688[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_801886B0[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_801886BC[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80188530[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80188760; +extern void func_8015D380(s32 a0); +extern unsigned char D_80187844[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80188774[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_801887B0[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_801887F8; +extern u16 D_801887FA; +extern u16 D_801887FC; +extern s32 D_80188800; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80188808; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80188514; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_8018888C[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_8018893C[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_8018896C[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_801889D0; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801A9708[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_801889F4[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801A9760[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80188A3C[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80188A2C; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801A8F7C[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80188A44[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80188A98[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80188A60; +extern s16 D_80188A94; +extern s16 D_80188A92; +extern s16 D_80188A90; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80188AA4[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801A97C0; +extern u8 D_801A97C1; +extern u8 D_801A97C2; +extern u8 D_801A97C3; +extern u8 D_801A97C4; +extern u8 D_801A97C5; +extern u8 D_801A97C6; +extern u8 D_801A97C7; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80188AB4[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801A9800; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80188AF8[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80188B74[]; +extern s32 D_80188B94[]; +extern u8 D_80188C10[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80188C30[]; +extern u8 D_80188C50[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80188CEC[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80188D68[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801A8F8C; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80188D74[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80188D7C[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80188E44[])(void); +extern void func_80166618(void *a0); +extern void (*D_80188E54[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80188E64[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80188E70[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80188DD0[]; +extern u8 D_80188DE4[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80188E88[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80188E90[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80188E98[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80188EA0[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80188EA8[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80188EB0[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80188EB8[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80188F6C[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80188F74[])(void); +extern void func_80169F00(void *a0); +extern char D_80188F24[]; +extern char D_80188EE4[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80188FAC[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80188FB8[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80189000[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80188FC0[]; + extern u8 D_80188FD0[]; + extern u8 D_801A9AD0[]; + extern u8 D_801A9AF8[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80188FC0, D_801A9AD0) + 3; + func_8001CE28(obj, D_801A9AD0); + } else { + var_s3 = func_80024054(D_80188FD0, D_801A9AF8) + 9; + func_8001CE28(obj, D_801A9AF8); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_8018907C[])(void); + +void func_8016B4BC(void *a0) { + D_8018907C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801A9B20; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801A9B20); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80189070[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80189070; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_801890B4[]; +extern unsigned short D_801890BC[]; +extern unsigned short D_801890C4[]; +extern unsigned char D_801A9B28[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801A9B28 + param_2 * 0x40); + puVar3 = D_801890B4[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_801890BC[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_801890C4[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801A9B20; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801A9B20, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_801890CC[])(void); + +void func_8016BBA4(void *a0) { + D_801890CC[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801A9C5C; + extern u8 D_801A9C5D; + extern u8 D_801A9C5E; + extern M2C_UNK D_801A9C60; + extern u8 D_801A9C61; + extern u8 D_801A9C62; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801A9C5C) = 0x20; + D_801A9C5D = 0x20; + D_801A9C5E = 0; + (*(u8 *)&D_801A9C60) = 0xc0; + D_801A9C61 = 0xc0; + D_801A9C62 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801A9C5C; +extern M2C_UNK D_801A9C60; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801A9C5C, &D_801A9C60, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801A9C5D; + extern u8 D_801A9C5E; + extern u8 D_801A9C61; + extern u8 D_801A9C62; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801A9C5C); + if (*p1 != 0) *p1 -= 4; + if (D_801A9C5D != 0) D_801A9C5D -= 4; + if (D_801A9C5E != 0) D_801A9C5E -= 4; + p2 = &(*(u8 *)&D_801A9C60); + if (*p2 != 0) *p2 -= 4; + if (D_801A9C61 != 0) D_801A9C61 -= 4; + if (D_801A9C62 != 0) D_801A9C62 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801A9C5C), &(*(int *)&D_801A9C60), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801A9BE8; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801A9BE8); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_801890DC; + extern s32 D_801890E4; + extern s32 D_801890EC; + extern s32 D_801890F4; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_801890DC, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_801890E4, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_801890EC, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_801890F4, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_801890FC[])(void); + +void func_8016C14C(void *a0) { + D_801890FC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801A9C64[]; +extern u8 D_801A9C6C[]; +extern u8 D_801A9C1C[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801A9C64, D_801A9C6C, D_801A9C1C); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801A9C78[]; + extern u8 D_801A9D38; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801A9C78[1] = 0xff; + D_801A9C78[2] = 0x10; + D_801A9C78[0] = 0x10; + D_801A9C78[6] = 0; + D_801A9C78[5] = 0; + D_801A9C78[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801A9C78, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801A9D38, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801A9C78); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8016AB6C", func_8016C998); + + +extern void (*D_80189104[])(void); + +void func_8016CB84(void *a0) { + D_80189104[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801A9D38[]; + + + Blk_8016CF04_8016CF04 *p = &D_801A9D38[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80189120[])(void); + +void func_8016D19C(void *a0) { + D_80189120[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80189128[])(void); + +void func_8016D428(void *a0) { + D_80189128[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80189190[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80189190[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80189134; +extern u8 D_80189140; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80189134, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80189140); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8016AB6C", func_8016DC20); + + +extern void (*D_801891C4[])(void); + +void func_8016DEA4(void *a0) { + D_801891C4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_801891CC[])(void); + +void func_8016DF20(void *a0) { + D_801891CC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80189220[])(void); + +void func_8016E5B8(void *a0) { + D_80189220[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_801891E0[4]; + extern s32 D_80189200; + extern s32 D_80189208; + extern s32 D_80189210; + extern s32 D_80189218; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_801891E0[0], pp, &tmp); + RotTransSV(&D_801891E0[1], &prim.v[1], &tmp); + RotTransSV(&D_801891E0[2], &prim.v[2], &tmp); + RotTransSV(&D_801891E0[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80189200; + prim.f1 = D_80189208; + prim.f2 = D_80189210; + prim.f3 = D_80189218; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80189260[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80189260[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80189254[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80189254[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80189244[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80189244[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80189254[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80189254[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80189254[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80189270; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80189270; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_801892E8[])(void); + +void func_8016F6E0(void *a0) { + D_801892E8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_801892F0[])(void); + +void func_8016F798(void *a0) { + D_801892F0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_801892F8[])(void); + +void func_8016F834(void *a0) { + D_801892F8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80189300[])(void); + +void func_8016F8E4(void *a0) { + D_80189300[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80189308[])(void); + +void func_8016F9C4(void *a0) { + D_80189308[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80189310[])(void); + +void func_8016FA84(void *a0) { + D_80189310[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_8018931C[])(void); + +void func_8016FB7C(void *a0) { + D_8018931C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80189328[])(void); + +void func_8016FC90(void *a0) { + D_80189328[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80189334[])(void); + +void func_8016FDB4(void *a0) { + D_80189334[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80189344[])(void); + +void func_8016FF30(void *a0) { + D_80189344[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80189354[])(void); + +void func_8016FFDC(void *a0) { + D_80189354[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_8018935C[])(void); + +void func_80170150(void *a0) { + D_8018935C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80189364[])(void); + +void func_80170240(void *a0) { + D_80189364[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_8018936C[])(void); + +void func_801702FC(void *a0) { + D_8018936C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80189374[])(void); + +void func_801703E0(void *a0) { + D_80189374[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_8018937C[])(void); + +void func_801704B0(void *a0) { + D_8018937C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80189384[])(void); + +void func_80170548(void *a0) { + D_80189384[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_8018938C[])(void); + +void func_801705F8(void *a0) { + D_8018938C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80189394[])(void); + +void func_801706AC(void *a0) { + D_80189394[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_8018939C[])(void); + +void func_80170748(void *a0) { + D_8018939C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_801893A4[])(void); + +void func_80170810(void *a0) { + D_801893A4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_801893AC[])(void); + +void func_80170AD8(void *a0) { + D_801893AC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_801893B4[])(void); + +void func_80170BD8(void *a0) { + D_801893B4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_801893BC[])(void); + +void func_80170C74(void *a0) { + D_801893BC[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8016AB6C", func_80170CF0); + + +extern void (*D_801893C4[])(void); + +void func_80170D68(void *a0) { + D_801893C4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_801893CC[])(void); + +void func_80170E34(void *a0) { + D_801893CC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_801893D4[])(void); + +void func_80170EFC(void *a0) { + D_801893D4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_801893DC[])(void); + +void func_80170FB0(void *a0) { + D_801893DC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_801893E4[])(void); + +void func_80171064(void *a0) { + D_801893E4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_801893EC[])(void); + +void func_80171120(void *a0) { + D_801893EC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_801893F4[])(void); + +void func_801711C0(void *a0) { + D_801893F4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_801893FC[])(void); + +void func_80171260(void *a0) { + D_801893FC[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80189404[])(void); + +void func_801714E4(void *a0) { + D_80189404[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8016AB6C", func_80172C50); + + +extern void (*D_80189448[])(void); + +void func_80172CA0(void *a0) { + D_80189448[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_8018940C; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_8018940C); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_098/ov_SC03_098_jr_8015AE2C.c b/src/ov_SC03_098/ov_SC03_098_jr_8015AE2C.c index b9eb02877..8513c3108 100644 --- a/src/ov_SC03_098/ov_SC03_098_jr_8015AE2C.c +++ b/src/ov_SC03_098/ov_SC03_098_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_8018848C[])(void); void func_8016AB30(void *a0) { D_8018848C[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80188508[])(void); - -void func_8016B4BC(void *a0) { - D_80188508[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801C4790; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801C4790); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_801884FC[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_801884FC; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80188540[]; -extern unsigned short D_80188548[]; -extern unsigned short D_80188550[]; -extern unsigned char D_801C4798[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801C4798 + param_2 * 0x40); - puVar3 = D_80188540[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80188548[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80188550[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801C4790; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801C4790, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80188558[])(void); - -void func_8016BBA4(void *a0) { - D_80188558[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801C48CC; - extern u8 D_801C48CD; - extern u8 D_801C48CE; - extern M2C_UNK D_801C48D0; - extern u8 D_801C48D1; - extern u8 D_801C48D2; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801C48CC) = 0x20; - D_801C48CD = 0x20; - D_801C48CE = 0; - (*(u8 *)&D_801C48D0) = 0xc0; - D_801C48D1 = 0xc0; - D_801C48D2 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801C48CC; -extern M2C_UNK D_801C48D0; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801C48CC, &D_801C48D0, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801C48CD; - extern u8 D_801C48CE; - extern u8 D_801C48D1; - extern u8 D_801C48D2; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801C48CC); - if (*p1 != 0) *p1 -= 4; - if (D_801C48CD != 0) D_801C48CD -= 4; - if (D_801C48CE != 0) D_801C48CE -= 4; - p2 = &(*(u8 *)&D_801C48D0); - if (*p2 != 0) *p2 -= 4; - if (D_801C48D1 != 0) D_801C48D1 -= 4; - if (D_801C48D2 != 0) D_801C48D2 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801C48CC), &(*(int *)&D_801C48D0), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801C4858; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801C4858); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80188568; - extern s32 D_80188570; - extern s32 D_80188578; - extern s32 D_80188580; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80188568, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80188570, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80188578, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80188580, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80188588[])(void); - -void func_8016C14C(void *a0) { - D_80188588[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801C48D4[]; -extern u8 D_801C48DC[]; -extern u8 D_801C488C[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801C48D4, D_801C48DC, D_801C488C); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801C48E8[]; - extern u8 D_801C49A8; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801C48E8[1] = 0xff; - D_801C48E8[2] = 0x10; - D_801C48E8[0] = 0x10; - D_801C48E8[6] = 0; - D_801C48E8[5] = 0; - D_801C48E8[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801C48E8, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801C49A8, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801C48E8); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8015AE2C", func_8016C998); - - -extern void (*D_80188590[])(void); - -void func_8016CB84(void *a0) { - D_80188590[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801C49A8[]; - - - Blk_8016CF04_8016CF04 *p = &D_801C49A8[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_801885AC[])(void); - -void func_8016D19C(void *a0) { - D_801885AC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_801885B4[])(void); - -void func_8016D428(void *a0) { - D_801885B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_8018861C[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_8018861C[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_801885C0; -extern u8 D_801885CC; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801885C0, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801885CC); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80188650[])(void); - -void func_8016DEA4(void *a0) { - D_80188650[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80188658[])(void); - -void func_8016DF20(void *a0) { - D_80188658[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_801886AC[])(void); - -void func_8016E5B8(void *a0) { - D_801886AC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_8018866C[4]; - extern s32 D_8018868C; - extern s32 D_80188694; - extern s32 D_8018869C; - extern s32 D_801886A4; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_8018866C[0], pp, &tmp); - RotTransSV(&D_8018866C[1], &prim.v[1], &tmp); - RotTransSV(&D_8018866C[2], &prim.v[2], &tmp); - RotTransSV(&D_8018866C[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_8018868C; - prim.f1 = D_80188694; - prim.f2 = D_8018869C; - prim.f3 = D_801886A4; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_801886EC[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_801886EC[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_801886E0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_801886E0[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_801886D0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_801886D0[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801886E0[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_801886E0[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_801886E0[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_801886FC; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_801886FC; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80188774[])(void); - -void func_8016F6E0(void *a0) { - D_80188774[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_8018877C[])(void); - -void func_8016F798(void *a0) { - D_8018877C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80188784[])(void); - -void func_8016F834(void *a0) { - D_80188784[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_8018878C[])(void); - -void func_8016F8E4(void *a0) { - D_8018878C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80188794[])(void); - -void func_8016F9C4(void *a0) { - D_80188794[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_8018879C[])(void); - -void func_8016FA84(void *a0) { - D_8018879C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_801887A8[])(void); - -void func_8016FB7C(void *a0) { - D_801887A8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_801887B4[])(void); - -void func_8016FC90(void *a0) { - D_801887B4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_801887C0[])(void); - -void func_8016FDB4(void *a0) { - D_801887C0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_801887D0[])(void); - -void func_8016FF30(void *a0) { - D_801887D0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_801887E0[])(void); - -void func_8016FFDC(void *a0) { - D_801887E0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_801887E8[])(void); - -void func_80170150(void *a0) { - D_801887E8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_801887F0[])(void); - -void func_80170240(void *a0) { - D_801887F0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_801887F8[])(void); - -void func_801702FC(void *a0) { - D_801887F8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80188800[])(void); - -void func_801703E0(void *a0) { - D_80188800[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80188808[])(void); - -void func_801704B0(void *a0) { - D_80188808[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80188810[])(void); - -void func_80170548(void *a0) { - D_80188810[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80188818[])(void); - -void func_801705F8(void *a0) { - D_80188818[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80188820[])(void); - -void func_801706AC(void *a0) { - D_80188820[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80188828[])(void); - -void func_80170748(void *a0) { - D_80188828[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80188830[])(void); - -void func_80170810(void *a0) { - D_80188830[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80188838[])(void); - -void func_80170AD8(void *a0) { - D_80188838[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80188840[])(void); - -void func_80170BD8(void *a0) { - D_80188840[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80188848[])(void); - -void func_80170C74(void *a0) { - D_80188848[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80188850[])(void); - -void func_80170D68(void *a0) { - D_80188850[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80188858[])(void); - -void func_80170E34(void *a0) { - D_80188858[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80188860[])(void); - -void func_80170EFC(void *a0) { - D_80188860[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80188868[])(void); - -void func_80170FB0(void *a0) { - D_80188868[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80188870[])(void); - -void func_80171064(void *a0) { - D_80188870[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80188878[])(void); - -void func_80171120(void *a0) { - D_80188878[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80188880[])(void); - -void func_801711C0(void *a0) { - D_80188880[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80188888[])(void); - -void func_80171260(void *a0) { - D_80188888[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80188890[])(void); - -void func_801714E4(void *a0) { - D_80188890[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8015AE2C", func_80172C50); - - -extern void (*D_801888D4[])(void); - -void func_80172CA0(void *a0) { - D_801888D4[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80188898; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80188898); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_098/ov_SC03_098_jr_8016AB6C.c b/src/ov_SC03_098/ov_SC03_098_jr_8016AB6C.c new file mode 100644 index 000000000..5a01c2919 --- /dev/null +++ b/src/ov_SC03_098/ov_SC03_098_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80187858; +extern u8 D_801877C8; +extern u8 D_801877A4; +extern u8 D_80187780; +extern u8 D_80187834; +extern u8 D_80187810; +extern u8 D_801877EC; +extern u8 D_8018775C; +extern void func_80145934(void); +extern u8 D_801878E8; +extern u8 D_801878C4; +extern u8 D_801878A0; +extern u8 D_8018787C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80186CE0[]; +extern unsigned char D_80186D10[]; +extern unsigned char D_80186D60[]; +extern unsigned char D_80186D90[]; +extern unsigned char D_80186DC0[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80186E10[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80186ED8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80186F60[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80186F68; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801C4320; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801C4324; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80186F98; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80187040[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80187064[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80187054; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80187078[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80187084[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80187094[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801870AC[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018709C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801870C0[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801870DC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801870CC; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801870F0[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80187104[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80187118; +extern void (*D_80187140[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80187120; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018718C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80187190[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_801875F4[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80187604[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801C4358; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018762C[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018760C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018761C; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018766C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80187674[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80187640; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80187680[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80187650; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801C4360; +extern s32 D_801C436C; +extern s32 D_801C4370; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801876BC[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80187690[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801C4368; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018790C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018772C[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_801879B0[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80187B04[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80187920; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80187B0C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80187930; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80187950; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80187B14[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80187B3C[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80187B48[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_801879BC[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80187BEC; +extern void func_8015D380(s32 a0); +extern unsigned char D_80186CD0[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80187C00[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80187C3C[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80187C84; +extern u16 D_80187C86; +extern u16 D_80187C88; +extern s32 D_80187C8C; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80187C94; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_801879A0; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80187D18[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80187DC8[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80187DF8[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80187E5C; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801C4378[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80187E80[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801C43D0[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80187EC8[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80187EB8; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801C3C00[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80187ED0[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80187F24[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80187EEC; +extern s16 D_80187F20; +extern s16 D_80187F1E; +extern s16 D_80187F1C; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80187F30[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801C4430; +extern u8 D_801C4431; +extern u8 D_801C4432; +extern u8 D_801C4433; +extern u8 D_801C4434; +extern u8 D_801C4435; +extern u8 D_801C4436; +extern u8 D_801C4437; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80187F40[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801C4470; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80187F84[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80188000[]; +extern s32 D_80188020[]; +extern u8 D_8018809C[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_801880BC[]; +extern u8 D_801880DC[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80188178[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_801881F4[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801C3C10; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80188200[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80188208[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_801882D0[])(void); +extern void func_80166618(void *a0); +extern void (*D_801882E0[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_801882F0[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_801882FC[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_8018825C[]; +extern u8 D_80188270[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80188314[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_8018831C[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80188324[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_8018832C[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80188334[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_8018833C[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80188344[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_801883F8[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80188400[])(void); +extern void func_80169F00(void *a0); +extern char D_801883B0[]; +extern char D_80188370[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80188438[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80188444[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_8018848C[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_8018844C[]; + extern u8 D_8018845C[]; + extern u8 D_801C4740[]; + extern u8 D_801C4768[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_8018844C, D_801C4740) + 3; + func_8001CE28(obj, D_801C4740); + } else { + var_s3 = func_80024054(D_8018845C, D_801C4768) + 9; + func_8001CE28(obj, D_801C4768); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80188508[])(void); + +void func_8016B4BC(void *a0) { + D_80188508[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801C4790; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801C4790); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_801884FC[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_801884FC; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80188540[]; +extern unsigned short D_80188548[]; +extern unsigned short D_80188550[]; +extern unsigned char D_801C4798[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801C4798 + param_2 * 0x40); + puVar3 = D_80188540[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80188548[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80188550[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801C4790; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801C4790, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80188558[])(void); + +void func_8016BBA4(void *a0) { + D_80188558[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801C48CC; + extern u8 D_801C48CD; + extern u8 D_801C48CE; + extern M2C_UNK D_801C48D0; + extern u8 D_801C48D1; + extern u8 D_801C48D2; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801C48CC) = 0x20; + D_801C48CD = 0x20; + D_801C48CE = 0; + (*(u8 *)&D_801C48D0) = 0xc0; + D_801C48D1 = 0xc0; + D_801C48D2 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801C48CC; +extern M2C_UNK D_801C48D0; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801C48CC, &D_801C48D0, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801C48CD; + extern u8 D_801C48CE; + extern u8 D_801C48D1; + extern u8 D_801C48D2; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801C48CC); + if (*p1 != 0) *p1 -= 4; + if (D_801C48CD != 0) D_801C48CD -= 4; + if (D_801C48CE != 0) D_801C48CE -= 4; + p2 = &(*(u8 *)&D_801C48D0); + if (*p2 != 0) *p2 -= 4; + if (D_801C48D1 != 0) D_801C48D1 -= 4; + if (D_801C48D2 != 0) D_801C48D2 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801C48CC), &(*(int *)&D_801C48D0), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801C4858; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801C4858); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80188568; + extern s32 D_80188570; + extern s32 D_80188578; + extern s32 D_80188580; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80188568, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80188570, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80188578, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80188580, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80188588[])(void); + +void func_8016C14C(void *a0) { + D_80188588[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801C48D4[]; +extern u8 D_801C48DC[]; +extern u8 D_801C488C[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801C48D4, D_801C48DC, D_801C488C); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801C48E8[]; + extern u8 D_801C49A8; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801C48E8[1] = 0xff; + D_801C48E8[2] = 0x10; + D_801C48E8[0] = 0x10; + D_801C48E8[6] = 0; + D_801C48E8[5] = 0; + D_801C48E8[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801C48E8, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801C49A8, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801C48E8); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8016AB6C", func_8016C998); + + +extern void (*D_80188590[])(void); + +void func_8016CB84(void *a0) { + D_80188590[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801C49A8[]; + + + Blk_8016CF04_8016CF04 *p = &D_801C49A8[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_801885AC[])(void); + +void func_8016D19C(void *a0) { + D_801885AC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_801885B4[])(void); + +void func_8016D428(void *a0) { + D_801885B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018861C[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_8018861C[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_801885C0; +extern u8 D_801885CC; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801885C0, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801885CC); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80188650[])(void); + +void func_8016DEA4(void *a0) { + D_80188650[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80188658[])(void); + +void func_8016DF20(void *a0) { + D_80188658[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_801886AC[])(void); + +void func_8016E5B8(void *a0) { + D_801886AC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_8018866C[4]; + extern s32 D_8018868C; + extern s32 D_80188694; + extern s32 D_8018869C; + extern s32 D_801886A4; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_8018866C[0], pp, &tmp); + RotTransSV(&D_8018866C[1], &prim.v[1], &tmp); + RotTransSV(&D_8018866C[2], &prim.v[2], &tmp); + RotTransSV(&D_8018866C[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_8018868C; + prim.f1 = D_80188694; + prim.f2 = D_8018869C; + prim.f3 = D_801886A4; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_801886EC[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_801886EC[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_801886E0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_801886E0[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_801886D0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_801886D0[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801886E0[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_801886E0[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_801886E0[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_801886FC; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_801886FC; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80188774[])(void); + +void func_8016F6E0(void *a0) { + D_80188774[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_8018877C[])(void); + +void func_8016F798(void *a0) { + D_8018877C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80188784[])(void); + +void func_8016F834(void *a0) { + D_80188784[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_8018878C[])(void); + +void func_8016F8E4(void *a0) { + D_8018878C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80188794[])(void); + +void func_8016F9C4(void *a0) { + D_80188794[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_8018879C[])(void); + +void func_8016FA84(void *a0) { + D_8018879C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_801887A8[])(void); + +void func_8016FB7C(void *a0) { + D_801887A8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_801887B4[])(void); + +void func_8016FC90(void *a0) { + D_801887B4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_801887C0[])(void); + +void func_8016FDB4(void *a0) { + D_801887C0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_801887D0[])(void); + +void func_8016FF30(void *a0) { + D_801887D0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_801887E0[])(void); + +void func_8016FFDC(void *a0) { + D_801887E0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_801887E8[])(void); + +void func_80170150(void *a0) { + D_801887E8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_801887F0[])(void); + +void func_80170240(void *a0) { + D_801887F0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_801887F8[])(void); + +void func_801702FC(void *a0) { + D_801887F8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80188800[])(void); + +void func_801703E0(void *a0) { + D_80188800[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80188808[])(void); + +void func_801704B0(void *a0) { + D_80188808[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80188810[])(void); + +void func_80170548(void *a0) { + D_80188810[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80188818[])(void); + +void func_801705F8(void *a0) { + D_80188818[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80188820[])(void); + +void func_801706AC(void *a0) { + D_80188820[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80188828[])(void); + +void func_80170748(void *a0) { + D_80188828[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80188830[])(void); + +void func_80170810(void *a0) { + D_80188830[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80188838[])(void); + +void func_80170AD8(void *a0) { + D_80188838[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80188840[])(void); + +void func_80170BD8(void *a0) { + D_80188840[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80188848[])(void); + +void func_80170C74(void *a0) { + D_80188848[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80188850[])(void); + +void func_80170D68(void *a0) { + D_80188850[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80188858[])(void); + +void func_80170E34(void *a0) { + D_80188858[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80188860[])(void); + +void func_80170EFC(void *a0) { + D_80188860[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80188868[])(void); + +void func_80170FB0(void *a0) { + D_80188868[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80188870[])(void); + +void func_80171064(void *a0) { + D_80188870[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80188878[])(void); + +void func_80171120(void *a0) { + D_80188878[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80188880[])(void); + +void func_801711C0(void *a0) { + D_80188880[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80188888[])(void); + +void func_80171260(void *a0) { + D_80188888[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80188890[])(void); + +void func_801714E4(void *a0) { + D_80188890[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8016AB6C", func_80172C50); + + +extern void (*D_801888D4[])(void); + +void func_80172CA0(void *a0) { + D_801888D4[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80188898; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80188898); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_099/ov_SC03_099_jr_8015AE2C.c b/src/ov_SC03_099/ov_SC03_099_jr_8015AE2C.c index 832c59132..5fee60e18 100644 --- a/src/ov_SC03_099/ov_SC03_099_jr_8015AE2C.c +++ b/src/ov_SC03_099/ov_SC03_099_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_8018658C[])(void); void func_8016AB30(void *a0) { D_8018658C[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80186608[])(void); - -void func_8016B4BC(void *a0) { - D_80186608[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801BE460; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801BE460); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_801865FC[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_801865FC; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80186640[]; -extern unsigned short D_80186648[]; -extern unsigned short D_80186650[]; -extern unsigned char D_801BE468[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801BE468 + param_2 * 0x40); - puVar3 = D_80186640[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80186648[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80186650[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801BE460; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801BE460, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80186658[])(void); - -void func_8016BBA4(void *a0) { - D_80186658[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801BE59C; - extern u8 D_801BE59D; - extern u8 D_801BE59E; - extern M2C_UNK D_801BE5A0; - extern u8 D_801BE5A1; - extern u8 D_801BE5A2; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801BE59C) = 0x20; - D_801BE59D = 0x20; - D_801BE59E = 0; - (*(u8 *)&D_801BE5A0) = 0xc0; - D_801BE5A1 = 0xc0; - D_801BE5A2 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801BE59C; -extern M2C_UNK D_801BE5A0; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801BE59C, &D_801BE5A0, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801BE59D; - extern u8 D_801BE59E; - extern u8 D_801BE5A1; - extern u8 D_801BE5A2; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801BE59C); - if (*p1 != 0) *p1 -= 4; - if (D_801BE59D != 0) D_801BE59D -= 4; - if (D_801BE59E != 0) D_801BE59E -= 4; - p2 = &(*(u8 *)&D_801BE5A0); - if (*p2 != 0) *p2 -= 4; - if (D_801BE5A1 != 0) D_801BE5A1 -= 4; - if (D_801BE5A2 != 0) D_801BE5A2 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801BE59C), &(*(int *)&D_801BE5A0), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801BE528; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801BE528); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80186668; - extern s32 D_80186670; - extern s32 D_80186678; - extern s32 D_80186680; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80186668, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80186670, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80186678, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80186680, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80186688[])(void); - -void func_8016C14C(void *a0) { - D_80186688[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801BE5A4[]; -extern u8 D_801BE5AC[]; -extern u8 D_801BE55C[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801BE5A4, D_801BE5AC, D_801BE55C); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801BE5B8[]; - extern u8 D_801BE678; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801BE5B8[1] = 0xff; - D_801BE5B8[2] = 0x10; - D_801BE5B8[0] = 0x10; - D_801BE5B8[6] = 0; - D_801BE5B8[5] = 0; - D_801BE5B8[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801BE5B8, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801BE678, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801BE5B8); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8015AE2C", func_8016C998); - - -extern void (*D_80186690[])(void); - -void func_8016CB84(void *a0) { - D_80186690[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801BE678[]; - - - Blk_8016CF04_8016CF04 *p = &D_801BE678[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_801866AC[])(void); - -void func_8016D19C(void *a0) { - D_801866AC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_801866B4[])(void); - -void func_8016D428(void *a0) { - D_801866B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_8018671C[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_8018671C[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_801866C0; -extern u8 D_801866CC; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801866C0, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801866CC); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80186750[])(void); - -void func_8016DEA4(void *a0) { - D_80186750[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80186758[])(void); - -void func_8016DF20(void *a0) { - D_80186758[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_801867AC[])(void); - -void func_8016E5B8(void *a0) { - D_801867AC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_8018676C[4]; - extern s32 D_8018678C; - extern s32 D_80186794; - extern s32 D_8018679C; - extern s32 D_801867A4; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_8018676C[0], pp, &tmp); - RotTransSV(&D_8018676C[1], &prim.v[1], &tmp); - RotTransSV(&D_8018676C[2], &prim.v[2], &tmp); - RotTransSV(&D_8018676C[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_8018678C; - prim.f1 = D_80186794; - prim.f2 = D_8018679C; - prim.f3 = D_801867A4; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_801867EC[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_801867EC[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_801867E0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_801867E0[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_801867D0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_801867D0[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801867E0[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_801867E0[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_801867E0[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_801867FC; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_801867FC; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80186874[])(void); - -void func_8016F6E0(void *a0) { - D_80186874[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_8018687C[])(void); - -void func_8016F798(void *a0) { - D_8018687C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80186884[])(void); - -void func_8016F834(void *a0) { - D_80186884[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_8018688C[])(void); - -void func_8016F8E4(void *a0) { - D_8018688C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80186894[])(void); - -void func_8016F9C4(void *a0) { - D_80186894[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_8018689C[])(void); - -void func_8016FA84(void *a0) { - D_8018689C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_801868A8[])(void); - -void func_8016FB7C(void *a0) { - D_801868A8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_801868B4[])(void); - -void func_8016FC90(void *a0) { - D_801868B4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_801868C0[])(void); - -void func_8016FDB4(void *a0) { - D_801868C0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_801868D0[])(void); - -void func_8016FF30(void *a0) { - D_801868D0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_801868E0[])(void); - -void func_8016FFDC(void *a0) { - D_801868E0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_801868E8[])(void); - -void func_80170150(void *a0) { - D_801868E8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_801868F0[])(void); - -void func_80170240(void *a0) { - D_801868F0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_801868F8[])(void); - -void func_801702FC(void *a0) { - D_801868F8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80186900[])(void); - -void func_801703E0(void *a0) { - D_80186900[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80186908[])(void); - -void func_801704B0(void *a0) { - D_80186908[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80186910[])(void); - -void func_80170548(void *a0) { - D_80186910[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80186918[])(void); - -void func_801705F8(void *a0) { - D_80186918[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80186920[])(void); - -void func_801706AC(void *a0) { - D_80186920[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80186928[])(void); - -void func_80170748(void *a0) { - D_80186928[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80186930[])(void); - -void func_80170810(void *a0) { - D_80186930[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80186938[])(void); - -void func_80170AD8(void *a0) { - D_80186938[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80186940[])(void); - -void func_80170BD8(void *a0) { - D_80186940[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80186948[])(void); - -void func_80170C74(void *a0) { - D_80186948[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80186950[])(void); - -void func_80170D68(void *a0) { - D_80186950[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80186958[])(void); - -void func_80170E34(void *a0) { - D_80186958[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80186960[])(void); - -void func_80170EFC(void *a0) { - D_80186960[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80186968[])(void); - -void func_80170FB0(void *a0) { - D_80186968[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80186970[])(void); - -void func_80171064(void *a0) { - D_80186970[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80186978[])(void); - -void func_80171120(void *a0) { - D_80186978[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80186980[])(void); - -void func_801711C0(void *a0) { - D_80186980[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80186988[])(void); - -void func_80171260(void *a0) { - D_80186988[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80186990[])(void); - -void func_801714E4(void *a0) { - D_80186990[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8015AE2C", func_80172C50); - - -extern void (*D_801869D4[])(void); - -void func_80172CA0(void *a0) { - D_801869D4[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80186998; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80186998); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_099/ov_SC03_099_jr_8016AB6C.c b/src/ov_SC03_099/ov_SC03_099_jr_8016AB6C.c new file mode 100644 index 000000000..cdfdee450 --- /dev/null +++ b/src/ov_SC03_099/ov_SC03_099_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80185958; +extern u8 D_801858C8; +extern u8 D_801858A4; +extern u8 D_80185880; +extern u8 D_80185934; +extern u8 D_80185910; +extern u8 D_801858EC; +extern u8 D_8018585C; +extern void func_80145934(void); +extern u8 D_801859E8; +extern u8 D_801859C4; +extern u8 D_801859A0; +extern u8 D_8018597C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80184DE0[]; +extern unsigned char D_80184E10[]; +extern unsigned char D_80184E60[]; +extern unsigned char D_80184E90[]; +extern unsigned char D_80184EC0[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80184F10[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80184FD8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80185060[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80185068; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801BDFF0; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801BDFF4; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80185098; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80185140[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80185164[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80185154; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80185178[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80185184[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80185194[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801851AC[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018519C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801851C0[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801851DC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801851CC; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801851F0[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80185204[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80185218; +extern void (*D_80185240[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80185220; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018528C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80185290[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_801856F4[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80185704[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801BE028; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018572C[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018570C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018571C; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018576C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80185774[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80185740; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80185780[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80185750; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801BE030; +extern s32 D_801BE03C; +extern s32 D_801BE040; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801857BC[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80185790[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801BE038; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80185A0C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018582C[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80185AB0[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80185C04[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80185A20; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80185C0C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80185A30; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80185A50; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80185C14[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80185C3C[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80185C48[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80185ABC[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80185CEC; +extern void func_8015D380(s32 a0); +extern unsigned char D_80184DD0[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80185D00[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80185D3C[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80185D84; +extern u16 D_80185D86; +extern u16 D_80185D88; +extern s32 D_80185D8C; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80185D94; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80185AA0; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80185E18[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80185EC8[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80185EF8[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80185F5C; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801BE048[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80185F80[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801BE0A0[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80185FC8[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80185FB8; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801BD8D4[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80185FD0[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80186024[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80185FEC; +extern s16 D_80186020; +extern s16 D_8018601E; +extern s16 D_8018601C; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80186030[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801BE100; +extern u8 D_801BE101; +extern u8 D_801BE102; +extern u8 D_801BE103; +extern u8 D_801BE104; +extern u8 D_801BE105; +extern u8 D_801BE106; +extern u8 D_801BE107; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80186040[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801BE140; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80186084[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80186100[]; +extern s32 D_80186120[]; +extern u8 D_8018619C[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_801861BC[]; +extern u8 D_801861DC[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80186278[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_801862F4[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801BD8E4; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80186300[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80186308[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_801863D0[])(void); +extern void func_80166618(void *a0); +extern void (*D_801863E0[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_801863F0[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_801863FC[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_8018635C[]; +extern u8 D_80186370[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80186414[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_8018641C[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80186424[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_8018642C[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80186434[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_8018643C[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80186444[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_801864F8[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80186500[])(void); +extern void func_80169F00(void *a0); +extern char D_801864B0[]; +extern char D_80186470[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80186538[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80186544[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_8018658C[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_8018654C[]; + extern u8 D_8018655C[]; + extern u8 D_801BE410[]; + extern u8 D_801BE438[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_8018654C, D_801BE410) + 3; + func_8001CE28(obj, D_801BE410); + } else { + var_s3 = func_80024054(D_8018655C, D_801BE438) + 9; + func_8001CE28(obj, D_801BE438); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80186608[])(void); + +void func_8016B4BC(void *a0) { + D_80186608[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801BE460; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801BE460); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_801865FC[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_801865FC; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80186640[]; +extern unsigned short D_80186648[]; +extern unsigned short D_80186650[]; +extern unsigned char D_801BE468[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801BE468 + param_2 * 0x40); + puVar3 = D_80186640[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80186648[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80186650[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801BE460; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801BE460, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80186658[])(void); + +void func_8016BBA4(void *a0) { + D_80186658[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801BE59C; + extern u8 D_801BE59D; + extern u8 D_801BE59E; + extern M2C_UNK D_801BE5A0; + extern u8 D_801BE5A1; + extern u8 D_801BE5A2; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801BE59C) = 0x20; + D_801BE59D = 0x20; + D_801BE59E = 0; + (*(u8 *)&D_801BE5A0) = 0xc0; + D_801BE5A1 = 0xc0; + D_801BE5A2 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801BE59C; +extern M2C_UNK D_801BE5A0; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801BE59C, &D_801BE5A0, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801BE59D; + extern u8 D_801BE59E; + extern u8 D_801BE5A1; + extern u8 D_801BE5A2; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801BE59C); + if (*p1 != 0) *p1 -= 4; + if (D_801BE59D != 0) D_801BE59D -= 4; + if (D_801BE59E != 0) D_801BE59E -= 4; + p2 = &(*(u8 *)&D_801BE5A0); + if (*p2 != 0) *p2 -= 4; + if (D_801BE5A1 != 0) D_801BE5A1 -= 4; + if (D_801BE5A2 != 0) D_801BE5A2 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801BE59C), &(*(int *)&D_801BE5A0), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801BE528; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801BE528); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80186668; + extern s32 D_80186670; + extern s32 D_80186678; + extern s32 D_80186680; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80186668, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80186670, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80186678, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80186680, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80186688[])(void); + +void func_8016C14C(void *a0) { + D_80186688[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801BE5A4[]; +extern u8 D_801BE5AC[]; +extern u8 D_801BE55C[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801BE5A4, D_801BE5AC, D_801BE55C); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801BE5B8[]; + extern u8 D_801BE678; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801BE5B8[1] = 0xff; + D_801BE5B8[2] = 0x10; + D_801BE5B8[0] = 0x10; + D_801BE5B8[6] = 0; + D_801BE5B8[5] = 0; + D_801BE5B8[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801BE5B8, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801BE678, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801BE5B8); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8016AB6C", func_8016C998); + + +extern void (*D_80186690[])(void); + +void func_8016CB84(void *a0) { + D_80186690[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801BE678[]; + + + Blk_8016CF04_8016CF04 *p = &D_801BE678[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_801866AC[])(void); + +void func_8016D19C(void *a0) { + D_801866AC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_801866B4[])(void); + +void func_8016D428(void *a0) { + D_801866B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018671C[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_8018671C[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_801866C0; +extern u8 D_801866CC; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801866C0, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801866CC); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80186750[])(void); + +void func_8016DEA4(void *a0) { + D_80186750[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80186758[])(void); + +void func_8016DF20(void *a0) { + D_80186758[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_801867AC[])(void); + +void func_8016E5B8(void *a0) { + D_801867AC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_8018676C[4]; + extern s32 D_8018678C; + extern s32 D_80186794; + extern s32 D_8018679C; + extern s32 D_801867A4; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_8018676C[0], pp, &tmp); + RotTransSV(&D_8018676C[1], &prim.v[1], &tmp); + RotTransSV(&D_8018676C[2], &prim.v[2], &tmp); + RotTransSV(&D_8018676C[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_8018678C; + prim.f1 = D_80186794; + prim.f2 = D_8018679C; + prim.f3 = D_801867A4; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_801867EC[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_801867EC[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_801867E0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_801867E0[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_801867D0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_801867D0[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801867E0[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_801867E0[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_801867E0[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_801867FC; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_801867FC; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80186874[])(void); + +void func_8016F6E0(void *a0) { + D_80186874[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_8018687C[])(void); + +void func_8016F798(void *a0) { + D_8018687C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80186884[])(void); + +void func_8016F834(void *a0) { + D_80186884[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_8018688C[])(void); + +void func_8016F8E4(void *a0) { + D_8018688C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80186894[])(void); + +void func_8016F9C4(void *a0) { + D_80186894[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_8018689C[])(void); + +void func_8016FA84(void *a0) { + D_8018689C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_801868A8[])(void); + +void func_8016FB7C(void *a0) { + D_801868A8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_801868B4[])(void); + +void func_8016FC90(void *a0) { + D_801868B4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_801868C0[])(void); + +void func_8016FDB4(void *a0) { + D_801868C0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_801868D0[])(void); + +void func_8016FF30(void *a0) { + D_801868D0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_801868E0[])(void); + +void func_8016FFDC(void *a0) { + D_801868E0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_801868E8[])(void); + +void func_80170150(void *a0) { + D_801868E8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_801868F0[])(void); + +void func_80170240(void *a0) { + D_801868F0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_801868F8[])(void); + +void func_801702FC(void *a0) { + D_801868F8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80186900[])(void); + +void func_801703E0(void *a0) { + D_80186900[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80186908[])(void); + +void func_801704B0(void *a0) { + D_80186908[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80186910[])(void); + +void func_80170548(void *a0) { + D_80186910[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80186918[])(void); + +void func_801705F8(void *a0) { + D_80186918[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80186920[])(void); + +void func_801706AC(void *a0) { + D_80186920[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80186928[])(void); + +void func_80170748(void *a0) { + D_80186928[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80186930[])(void); + +void func_80170810(void *a0) { + D_80186930[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80186938[])(void); + +void func_80170AD8(void *a0) { + D_80186938[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80186940[])(void); + +void func_80170BD8(void *a0) { + D_80186940[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80186948[])(void); + +void func_80170C74(void *a0) { + D_80186948[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80186950[])(void); + +void func_80170D68(void *a0) { + D_80186950[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80186958[])(void); + +void func_80170E34(void *a0) { + D_80186958[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80186960[])(void); + +void func_80170EFC(void *a0) { + D_80186960[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80186968[])(void); + +void func_80170FB0(void *a0) { + D_80186968[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80186970[])(void); + +void func_80171064(void *a0) { + D_80186970[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80186978[])(void); + +void func_80171120(void *a0) { + D_80186978[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80186980[])(void); + +void func_801711C0(void *a0) { + D_80186980[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80186988[])(void); + +void func_80171260(void *a0) { + D_80186988[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80186990[])(void); + +void func_801714E4(void *a0) { + D_80186990[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8016AB6C", func_80172C50); + + +extern void (*D_801869D4[])(void); + +void func_80172CA0(void *a0) { + D_801869D4[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80186998; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80186998); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_100/ov_SC03_100_jr_8015AE2C.c b/src/ov_SC03_100/ov_SC03_100_jr_8015AE2C.c index 106230c19..3e65499b8 100644 --- a/src/ov_SC03_100/ov_SC03_100_jr_8015AE2C.c +++ b/src/ov_SC03_100/ov_SC03_100_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_80187A58[])(void); void func_8016AB30(void *a0) { D_80187A58[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80187AD4[])(void); - -void func_8016B4BC(void *a0) { - D_80187AD4[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801C76E8; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801C76E8); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80187AC8[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80187AC8; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80187B0C[]; -extern unsigned short D_80187B14[]; -extern unsigned short D_80187B1C[]; -extern unsigned char D_801C76F0[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801C76F0 + param_2 * 0x40); - puVar3 = D_80187B0C[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80187B14[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80187B1C[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801C76E8; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801C76E8, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80187B24[])(void); - -void func_8016BBA4(void *a0) { - D_80187B24[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801C7824; - extern u8 D_801C7825; - extern u8 D_801C7826; - extern M2C_UNK D_801C7828; - extern u8 D_801C7829; - extern u8 D_801C782A; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801C7824) = 0x20; - D_801C7825 = 0x20; - D_801C7826 = 0; - (*(u8 *)&D_801C7828) = 0xc0; - D_801C7829 = 0xc0; - D_801C782A = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801C7824; -extern M2C_UNK D_801C7828; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801C7824, &D_801C7828, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801C7825; - extern u8 D_801C7826; - extern u8 D_801C7829; - extern u8 D_801C782A; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801C7824); - if (*p1 != 0) *p1 -= 4; - if (D_801C7825 != 0) D_801C7825 -= 4; - if (D_801C7826 != 0) D_801C7826 -= 4; - p2 = &(*(u8 *)&D_801C7828); - if (*p2 != 0) *p2 -= 4; - if (D_801C7829 != 0) D_801C7829 -= 4; - if (D_801C782A != 0) D_801C782A -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801C7824), &(*(int *)&D_801C7828), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801C77B0; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801C77B0); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80187B34; - extern s32 D_80187B3C; - extern s32 D_80187B44; - extern s32 D_80187B4C; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80187B34, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80187B3C, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80187B44, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80187B4C, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80187B54[])(void); - -void func_8016C14C(void *a0) { - D_80187B54[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801C782C[]; -extern u8 D_801C7834[]; -extern u8 D_801C77E4[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801C782C, D_801C7834, D_801C77E4); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801C7840[]; - extern u8 D_801C7900; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801C7840[1] = 0xff; - D_801C7840[2] = 0x10; - D_801C7840[0] = 0x10; - D_801C7840[6] = 0; - D_801C7840[5] = 0; - D_801C7840[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801C7840, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801C7900, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801C7840); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8015AE2C", func_8016C998); - - -extern void (*D_80187B5C[])(void); - -void func_8016CB84(void *a0) { - D_80187B5C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801C7900[]; - - - Blk_8016CF04_8016CF04 *p = &D_801C7900[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80187B78[])(void); - -void func_8016D19C(void *a0) { - D_80187B78[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80187B80[])(void); - -void func_8016D428(void *a0) { - D_80187B80[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80187BE8[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80187BE8[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80187B8C; -extern u8 D_80187B98; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80187B8C, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80187B98); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80187C1C[])(void); - -void func_8016DEA4(void *a0) { - D_80187C1C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80187C24[])(void); - -void func_8016DF20(void *a0) { - D_80187C24[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80187C78[])(void); - -void func_8016E5B8(void *a0) { - D_80187C78[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80187C38[4]; - extern s32 D_80187C58; - extern s32 D_80187C60; - extern s32 D_80187C68; - extern s32 D_80187C70; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80187C38[0], pp, &tmp); - RotTransSV(&D_80187C38[1], &prim.v[1], &tmp); - RotTransSV(&D_80187C38[2], &prim.v[2], &tmp); - RotTransSV(&D_80187C38[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80187C58; - prim.f1 = D_80187C60; - prim.f2 = D_80187C68; - prim.f3 = D_80187C70; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80187CB8[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80187CB8[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80187CAC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80187CAC[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80187C9C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80187C9C[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80187CAC[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80187CAC[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80187CAC[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80187CC8; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80187CC8; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80187D40[])(void); - -void func_8016F6E0(void *a0) { - D_80187D40[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80187D48[])(void); - -void func_8016F798(void *a0) { - D_80187D48[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80187D50[])(void); - -void func_8016F834(void *a0) { - D_80187D50[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80187D58[])(void); - -void func_8016F8E4(void *a0) { - D_80187D58[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80187D60[])(void); - -void func_8016F9C4(void *a0) { - D_80187D60[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80187D68[])(void); - -void func_8016FA84(void *a0) { - D_80187D68[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80187D74[])(void); - -void func_8016FB7C(void *a0) { - D_80187D74[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80187D80[])(void); - -void func_8016FC90(void *a0) { - D_80187D80[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80187D8C[])(void); - -void func_8016FDB4(void *a0) { - D_80187D8C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80187D9C[])(void); - -void func_8016FF30(void *a0) { - D_80187D9C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80187DAC[])(void); - -void func_8016FFDC(void *a0) { - D_80187DAC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80187DB4[])(void); - -void func_80170150(void *a0) { - D_80187DB4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80187DBC[])(void); - -void func_80170240(void *a0) { - D_80187DBC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80187DC4[])(void); - -void func_801702FC(void *a0) { - D_80187DC4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80187DCC[])(void); - -void func_801703E0(void *a0) { - D_80187DCC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80187DD4[])(void); - -void func_801704B0(void *a0) { - D_80187DD4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80187DDC[])(void); - -void func_80170548(void *a0) { - D_80187DDC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80187DE4[])(void); - -void func_801705F8(void *a0) { - D_80187DE4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80187DEC[])(void); - -void func_801706AC(void *a0) { - D_80187DEC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80187DF4[])(void); - -void func_80170748(void *a0) { - D_80187DF4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80187DFC[])(void); - -void func_80170810(void *a0) { - D_80187DFC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80187E04[])(void); - -void func_80170AD8(void *a0) { - D_80187E04[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80187E0C[])(void); - -void func_80170BD8(void *a0) { - D_80187E0C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80187E14[])(void); - -void func_80170C74(void *a0) { - D_80187E14[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80187E1C[])(void); - -void func_80170D68(void *a0) { - D_80187E1C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80187E24[])(void); - -void func_80170E34(void *a0) { - D_80187E24[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80187E2C[])(void); - -void func_80170EFC(void *a0) { - D_80187E2C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80187E34[])(void); - -void func_80170FB0(void *a0) { - D_80187E34[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80187E3C[])(void); - -void func_80171064(void *a0) { - D_80187E3C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80187E44[])(void); - -void func_80171120(void *a0) { - D_80187E44[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80187E4C[])(void); - -void func_801711C0(void *a0) { - D_80187E4C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80187E54[])(void); - -void func_80171260(void *a0) { - D_80187E54[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80187E5C[])(void); - -void func_801714E4(void *a0) { - D_80187E5C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8015AE2C", func_80172C50); - - -extern void (*D_80187EA0[])(void); - -void func_80172CA0(void *a0) { - D_80187EA0[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80187E64; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80187E64); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_100/ov_SC03_100_jr_8016AB6C.c b/src/ov_SC03_100/ov_SC03_100_jr_8016AB6C.c new file mode 100644 index 000000000..d02e65192 --- /dev/null +++ b/src/ov_SC03_100/ov_SC03_100_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80186E24; +extern u8 D_80186D94; +extern u8 D_80186D70; +extern u8 D_80186D4C; +extern u8 D_80186E00; +extern u8 D_80186DDC; +extern u8 D_80186DB8; +extern u8 D_80186D28; +extern void func_80145934(void); +extern u8 D_80186EB4; +extern u8 D_80186E90; +extern u8 D_80186E6C; +extern u8 D_80186E48; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801862AC[]; +extern unsigned char D_801862DC[]; +extern unsigned char D_8018632C[]; +extern unsigned char D_8018635C[]; +extern unsigned char D_8018638C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801863DC[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801864A4[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018652C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80186534; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801C7278; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801C727C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80186564; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018660C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80186630[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80186620; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80186644[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80186650[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80186660[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80186678[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80186668; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018668C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801866A8[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80186698; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801866BC[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801866D0[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801866E4; +extern void (*D_8018670C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801866EC; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80186758[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018675C[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80186BC0[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80186BD0[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801C72B0; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80186BF8[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80186BD8; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80186BE8; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80186C38[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80186C40[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80186C0C; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80186C4C[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80186C1C; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801C72B8; +extern s32 D_801C72C4; +extern s32 D_801C72C8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80186C88[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80186C5C[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801C72C0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80186ED8[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80186CF8[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80186F7C[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_801870D0[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80186EEC; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_801870D8[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80186EFC; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80186F1C; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_801870E0[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80187108[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80187114[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80186F88[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_801871B8; +extern void func_8015D380(s32 a0); +extern unsigned char D_8018629C[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_801871CC[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80187208[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80187250; +extern u16 D_80187252; +extern u16 D_80187254; +extern s32 D_80187258; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80187260; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80186F6C; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_801872E4[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80187394[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_801873C4[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80187428; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801C72D0[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_8018744C[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801C7328[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80187494[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80187484; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801C6B58[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_8018749C[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_801874F0[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_801874B8; +extern s16 D_801874EC; +extern s16 D_801874EA; +extern s16 D_801874E8; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_801874FC[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801C7388; +extern u8 D_801C7389; +extern u8 D_801C738A; +extern u8 D_801C738B; +extern u8 D_801C738C; +extern u8 D_801C738D; +extern u8 D_801C738E; +extern u8 D_801C738F; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_8018750C[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801C73C8; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80187550[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_801875CC[]; +extern s32 D_801875EC[]; +extern u8 D_80187668[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80187688[]; +extern u8 D_801876A8[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80187744[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_801877C0[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801C6B68; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_801877CC[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_801877D4[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_8018789C[])(void); +extern void func_80166618(void *a0); +extern void (*D_801878AC[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_801878BC[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_801878C8[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80187828[]; +extern u8 D_8018783C[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_801878E0[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_801878E8[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_801878F0[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_801878F8[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80187900[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80187908[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80187910[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_801879C4[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_801879CC[])(void); +extern void func_80169F00(void *a0); +extern char D_8018797C[]; +extern char D_8018793C[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80187A04[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80187A10[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80187A58[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80187A18[]; + extern u8 D_80187A28[]; + extern u8 D_801C7698[]; + extern u8 D_801C76C0[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80187A18, D_801C7698) + 3; + func_8001CE28(obj, D_801C7698); + } else { + var_s3 = func_80024054(D_80187A28, D_801C76C0) + 9; + func_8001CE28(obj, D_801C76C0); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80187AD4[])(void); + +void func_8016B4BC(void *a0) { + D_80187AD4[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801C76E8; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801C76E8); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80187AC8[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80187AC8; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80187B0C[]; +extern unsigned short D_80187B14[]; +extern unsigned short D_80187B1C[]; +extern unsigned char D_801C76F0[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801C76F0 + param_2 * 0x40); + puVar3 = D_80187B0C[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80187B14[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80187B1C[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801C76E8; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801C76E8, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80187B24[])(void); + +void func_8016BBA4(void *a0) { + D_80187B24[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801C7824; + extern u8 D_801C7825; + extern u8 D_801C7826; + extern M2C_UNK D_801C7828; + extern u8 D_801C7829; + extern u8 D_801C782A; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801C7824) = 0x20; + D_801C7825 = 0x20; + D_801C7826 = 0; + (*(u8 *)&D_801C7828) = 0xc0; + D_801C7829 = 0xc0; + D_801C782A = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801C7824; +extern M2C_UNK D_801C7828; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801C7824, &D_801C7828, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801C7825; + extern u8 D_801C7826; + extern u8 D_801C7829; + extern u8 D_801C782A; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801C7824); + if (*p1 != 0) *p1 -= 4; + if (D_801C7825 != 0) D_801C7825 -= 4; + if (D_801C7826 != 0) D_801C7826 -= 4; + p2 = &(*(u8 *)&D_801C7828); + if (*p2 != 0) *p2 -= 4; + if (D_801C7829 != 0) D_801C7829 -= 4; + if (D_801C782A != 0) D_801C782A -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801C7824), &(*(int *)&D_801C7828), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801C77B0; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801C77B0); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80187B34; + extern s32 D_80187B3C; + extern s32 D_80187B44; + extern s32 D_80187B4C; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80187B34, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80187B3C, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80187B44, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80187B4C, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80187B54[])(void); + +void func_8016C14C(void *a0) { + D_80187B54[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801C782C[]; +extern u8 D_801C7834[]; +extern u8 D_801C77E4[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801C782C, D_801C7834, D_801C77E4); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801C7840[]; + extern u8 D_801C7900; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801C7840[1] = 0xff; + D_801C7840[2] = 0x10; + D_801C7840[0] = 0x10; + D_801C7840[6] = 0; + D_801C7840[5] = 0; + D_801C7840[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801C7840, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801C7900, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801C7840); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8016AB6C", func_8016C998); + + +extern void (*D_80187B5C[])(void); + +void func_8016CB84(void *a0) { + D_80187B5C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801C7900[]; + + + Blk_8016CF04_8016CF04 *p = &D_801C7900[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80187B78[])(void); + +void func_8016D19C(void *a0) { + D_80187B78[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80187B80[])(void); + +void func_8016D428(void *a0) { + D_80187B80[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80187BE8[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80187BE8[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80187B8C; +extern u8 D_80187B98; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80187B8C, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80187B98); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80187C1C[])(void); + +void func_8016DEA4(void *a0) { + D_80187C1C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80187C24[])(void); + +void func_8016DF20(void *a0) { + D_80187C24[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80187C78[])(void); + +void func_8016E5B8(void *a0) { + D_80187C78[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80187C38[4]; + extern s32 D_80187C58; + extern s32 D_80187C60; + extern s32 D_80187C68; + extern s32 D_80187C70; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80187C38[0], pp, &tmp); + RotTransSV(&D_80187C38[1], &prim.v[1], &tmp); + RotTransSV(&D_80187C38[2], &prim.v[2], &tmp); + RotTransSV(&D_80187C38[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80187C58; + prim.f1 = D_80187C60; + prim.f2 = D_80187C68; + prim.f3 = D_80187C70; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80187CB8[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80187CB8[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80187CAC[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80187CAC[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80187C9C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80187C9C[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80187CAC[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80187CAC[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80187CAC[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80187CC8; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80187CC8; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80187D40[])(void); + +void func_8016F6E0(void *a0) { + D_80187D40[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80187D48[])(void); + +void func_8016F798(void *a0) { + D_80187D48[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80187D50[])(void); + +void func_8016F834(void *a0) { + D_80187D50[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80187D58[])(void); + +void func_8016F8E4(void *a0) { + D_80187D58[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80187D60[])(void); + +void func_8016F9C4(void *a0) { + D_80187D60[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80187D68[])(void); + +void func_8016FA84(void *a0) { + D_80187D68[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80187D74[])(void); + +void func_8016FB7C(void *a0) { + D_80187D74[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80187D80[])(void); + +void func_8016FC90(void *a0) { + D_80187D80[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80187D8C[])(void); + +void func_8016FDB4(void *a0) { + D_80187D8C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80187D9C[])(void); + +void func_8016FF30(void *a0) { + D_80187D9C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80187DAC[])(void); + +void func_8016FFDC(void *a0) { + D_80187DAC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80187DB4[])(void); + +void func_80170150(void *a0) { + D_80187DB4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80187DBC[])(void); + +void func_80170240(void *a0) { + D_80187DBC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80187DC4[])(void); + +void func_801702FC(void *a0) { + D_80187DC4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80187DCC[])(void); + +void func_801703E0(void *a0) { + D_80187DCC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80187DD4[])(void); + +void func_801704B0(void *a0) { + D_80187DD4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80187DDC[])(void); + +void func_80170548(void *a0) { + D_80187DDC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80187DE4[])(void); + +void func_801705F8(void *a0) { + D_80187DE4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80187DEC[])(void); + +void func_801706AC(void *a0) { + D_80187DEC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80187DF4[])(void); + +void func_80170748(void *a0) { + D_80187DF4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80187DFC[])(void); + +void func_80170810(void *a0) { + D_80187DFC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80187E04[])(void); + +void func_80170AD8(void *a0) { + D_80187E04[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80187E0C[])(void); + +void func_80170BD8(void *a0) { + D_80187E0C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80187E14[])(void); + +void func_80170C74(void *a0) { + D_80187E14[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80187E1C[])(void); + +void func_80170D68(void *a0) { + D_80187E1C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80187E24[])(void); + +void func_80170E34(void *a0) { + D_80187E24[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80187E2C[])(void); + +void func_80170EFC(void *a0) { + D_80187E2C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80187E34[])(void); + +void func_80170FB0(void *a0) { + D_80187E34[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80187E3C[])(void); + +void func_80171064(void *a0) { + D_80187E3C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80187E44[])(void); + +void func_80171120(void *a0) { + D_80187E44[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80187E4C[])(void); + +void func_801711C0(void *a0) { + D_80187E4C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80187E54[])(void); + +void func_80171260(void *a0) { + D_80187E54[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80187E5C[])(void); + +void func_801714E4(void *a0) { + D_80187E5C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8016AB6C", func_80172C50); + + +extern void (*D_80187EA0[])(void); + +void func_80172CA0(void *a0) { + D_80187EA0[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80187E64; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80187E64); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_101/ov_SC03_101_jr_8015AE2C.c b/src/ov_SC03_101/ov_SC03_101_jr_8015AE2C.c index 44ef2ab73..be5489baf 100644 --- a/src/ov_SC03_101/ov_SC03_101_jr_8015AE2C.c +++ b/src/ov_SC03_101/ov_SC03_101_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_80186A34[])(void); void func_8016AB30(void *a0) { D_80186A34[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80186AB0[])(void); - -void func_8016B4BC(void *a0) { - D_80186AB0[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_8019CFB0; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_8019CFB0); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80186AA4[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80186AA4; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80186AE8[]; -extern unsigned short D_80186AF0[]; -extern unsigned short D_80186AF8[]; -extern unsigned char D_8019CFB8[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_8019CFB8 + param_2 * 0x40); - puVar3 = D_80186AE8[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80186AF0[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80186AF8[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_8019CFB0; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_8019CFB0, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80186B00[])(void); - -void func_8016BBA4(void *a0) { - D_80186B00[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_8019D0EC; - extern u8 D_8019D0ED; - extern u8 D_8019D0EE; - extern M2C_UNK D_8019D0F0; - extern u8 D_8019D0F1; - extern u8 D_8019D0F2; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_8019D0EC) = 0x20; - D_8019D0ED = 0x20; - D_8019D0EE = 0; - (*(u8 *)&D_8019D0F0) = 0xc0; - D_8019D0F1 = 0xc0; - D_8019D0F2 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_8019D0EC; -extern M2C_UNK D_8019D0F0; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_8019D0EC, &D_8019D0F0, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_8019D0ED; - extern u8 D_8019D0EE; - extern u8 D_8019D0F1; - extern u8 D_8019D0F2; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_8019D0EC); - if (*p1 != 0) *p1 -= 4; - if (D_8019D0ED != 0) D_8019D0ED -= 4; - if (D_8019D0EE != 0) D_8019D0EE -= 4; - p2 = &(*(u8 *)&D_8019D0F0); - if (*p2 != 0) *p2 -= 4; - if (D_8019D0F1 != 0) D_8019D0F1 -= 4; - if (D_8019D0F2 != 0) D_8019D0F2 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_8019D0EC), &(*(int *)&D_8019D0F0), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_8019D078; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_8019D078); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80186B10; - extern s32 D_80186B18; - extern s32 D_80186B20; - extern s32 D_80186B28; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80186B10, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80186B18, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80186B20, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80186B28, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80186B30[])(void); - -void func_8016C14C(void *a0) { - D_80186B30[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_8019D0F4[]; -extern u8 D_8019D0FC[]; -extern u8 D_8019D0AC[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_8019D0F4, D_8019D0FC, D_8019D0AC); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_8019D108[]; - extern u8 D_8019D1C8; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_8019D108[1] = 0xff; - D_8019D108[2] = 0x10; - D_8019D108[0] = 0x10; - D_8019D108[6] = 0; - D_8019D108[5] = 0; - D_8019D108[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_8019D108, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_8019D1C8, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_8019D108); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8015AE2C", func_8016C998); - - -extern void (*D_80186B38[])(void); - -void func_8016CB84(void *a0) { - D_80186B38[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_8019D1C8[]; - - - Blk_8016CF04_8016CF04 *p = &D_8019D1C8[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80186B54[])(void); - -void func_8016D19C(void *a0) { - D_80186B54[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80186B5C[])(void); - -void func_8016D428(void *a0) { - D_80186B5C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80186BC4[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80186BC4[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80186B68; -extern u8 D_80186B74; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80186B68, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80186B74); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80186BF8[])(void); - -void func_8016DEA4(void *a0) { - D_80186BF8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80186C00[])(void); - -void func_8016DF20(void *a0) { - D_80186C00[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80186C54[])(void); - -void func_8016E5B8(void *a0) { - D_80186C54[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80186C14[4]; - extern s32 D_80186C34; - extern s32 D_80186C3C; - extern s32 D_80186C44; - extern s32 D_80186C4C; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80186C14[0], pp, &tmp); - RotTransSV(&D_80186C14[1], &prim.v[1], &tmp); - RotTransSV(&D_80186C14[2], &prim.v[2], &tmp); - RotTransSV(&D_80186C14[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80186C34; - prim.f1 = D_80186C3C; - prim.f2 = D_80186C44; - prim.f3 = D_80186C4C; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80186C94[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80186C94[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80186C88[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80186C88[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80186C78[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80186C78[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80186C88[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80186C88[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80186C88[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80186CA4; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80186CA4; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80186D1C[])(void); - -void func_8016F6E0(void *a0) { - D_80186D1C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80186D24[])(void); - -void func_8016F798(void *a0) { - D_80186D24[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80186D2C[])(void); - -void func_8016F834(void *a0) { - D_80186D2C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80186D34[])(void); - -void func_8016F8E4(void *a0) { - D_80186D34[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80186D3C[])(void); - -void func_8016F9C4(void *a0) { - D_80186D3C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80186D44[])(void); - -void func_8016FA84(void *a0) { - D_80186D44[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80186D50[])(void); - -void func_8016FB7C(void *a0) { - D_80186D50[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80186D5C[])(void); - -void func_8016FC90(void *a0) { - D_80186D5C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80186D68[])(void); - -void func_8016FDB4(void *a0) { - D_80186D68[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80186D78[])(void); - -void func_8016FF30(void *a0) { - D_80186D78[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80186D88[])(void); - -void func_8016FFDC(void *a0) { - D_80186D88[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80186D90[])(void); - -void func_80170150(void *a0) { - D_80186D90[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80186D98[])(void); - -void func_80170240(void *a0) { - D_80186D98[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80186DA0[])(void); - -void func_801702FC(void *a0) { - D_80186DA0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80186DA8[])(void); - -void func_801703E0(void *a0) { - D_80186DA8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80186DB0[])(void); - -void func_801704B0(void *a0) { - D_80186DB0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80186DB8[])(void); - -void func_80170548(void *a0) { - D_80186DB8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80186DC0[])(void); - -void func_801705F8(void *a0) { - D_80186DC0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80186DC8[])(void); - -void func_801706AC(void *a0) { - D_80186DC8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80186DD0[])(void); - -void func_80170748(void *a0) { - D_80186DD0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80186DD8[])(void); - -void func_80170810(void *a0) { - D_80186DD8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80186DE0[])(void); - -void func_80170AD8(void *a0) { - D_80186DE0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80186DE8[])(void); - -void func_80170BD8(void *a0) { - D_80186DE8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80186DF0[])(void); - -void func_80170C74(void *a0) { - D_80186DF0[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80186DF8[])(void); - -void func_80170D68(void *a0) { - D_80186DF8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80186E00[])(void); - -void func_80170E34(void *a0) { - D_80186E00[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80186E08[])(void); - -void func_80170EFC(void *a0) { - D_80186E08[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80186E10[])(void); - -void func_80170FB0(void *a0) { - D_80186E10[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80186E18[])(void); - -void func_80171064(void *a0) { - D_80186E18[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80186E20[])(void); - -void func_80171120(void *a0) { - D_80186E20[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80186E28[])(void); - -void func_801711C0(void *a0) { - D_80186E28[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80186E30[])(void); - -void func_80171260(void *a0) { - D_80186E30[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80186E38[])(void); - -void func_801714E4(void *a0) { - D_80186E38[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8015AE2C", func_80172C50); - - -extern void (*D_80186E7C[])(void); - -void func_80172CA0(void *a0) { - D_80186E7C[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80186E40; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80186E40); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_101/ov_SC03_101_jr_8016AB6C.c b/src/ov_SC03_101/ov_SC03_101_jr_8016AB6C.c new file mode 100644 index 000000000..645eea5e8 --- /dev/null +++ b/src/ov_SC03_101/ov_SC03_101_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80185E00; +extern u8 D_80185D70; +extern u8 D_80185D4C; +extern u8 D_80185D28; +extern u8 D_80185DDC; +extern u8 D_80185DB8; +extern u8 D_80185D94; +extern u8 D_80185D04; +extern void func_80145934(void); +extern u8 D_80185E90; +extern u8 D_80185E6C; +extern u8 D_80185E48; +extern u8 D_80185E24; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80185288[]; +extern unsigned char D_801852B8[]; +extern unsigned char D_80185308[]; +extern unsigned char D_80185338[]; +extern unsigned char D_80185368[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801853B8[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80185480[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80185508[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80185510; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8019CB40; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019CB44; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80185540; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801855E8[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018560C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801855FC; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80185620[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018562C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018563C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80185654[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80185644; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80185668[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80185684[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80185674; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80185698[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801856AC[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801856C0; +extern void (*D_801856E8[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801856C8; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80185734[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80185738[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80185B9C[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80185BAC[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_8019CB78; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80185BD4[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80185BB4; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80185BC4; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80185C14[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80185C1C[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80185BE8; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80185C28[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80185BF8; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_8019CB80; +extern s32 D_8019CB8C; +extern s32 D_8019CB90; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80185C64[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80185C38[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_8019CB88; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80185EB4[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80185CD4[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80185F58[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_801860AC[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80185EC8; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_801860B4[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80185ED8; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80185EF8; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_801860BC[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_801860E4[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_801860F0[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80185F64[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80186194; +extern void func_8015D380(s32 a0); +extern unsigned char D_80185278[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_801861A8[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_801861E4[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_8018622C; +extern u16 D_8018622E; +extern u16 D_80186230; +extern s32 D_80186234; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_8018623C; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80185F48; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_801862C0[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80186370[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_801863A0[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80186404; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_8019CB98[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80186428[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_8019CBF0[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80186470[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80186460; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_8019C420[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80186478[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_801864CC[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80186494; +extern s16 D_801864C8; +extern s16 D_801864C6; +extern s16 D_801864C4; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_801864D8[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_8019CC50; +extern u8 D_8019CC51; +extern u8 D_8019CC52; +extern u8 D_8019CC53; +extern u8 D_8019CC54; +extern u8 D_8019CC55; +extern u8 D_8019CC56; +extern u8 D_8019CC57; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_801864E8[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_8019CC90; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_8018652C[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_801865A8[]; +extern s32 D_801865C8[]; +extern u8 D_80186644[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80186664[]; +extern u8 D_80186684[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80186720[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_8018679C[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_8019C430; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_801867A8[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_801867B0[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80186878[])(void); +extern void func_80166618(void *a0); +extern void (*D_80186888[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80186898[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_801868A4[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80186804[]; +extern u8 D_80186818[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_801868BC[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_801868C4[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_801868CC[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_801868D4[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_801868DC[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_801868E4[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_801868EC[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_801869A0[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_801869A8[])(void); +extern void func_80169F00(void *a0); +extern char D_80186958[]; +extern char D_80186918[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_801869E0[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_801869EC[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80186A34[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_801869F4[]; + extern u8 D_80186A04[]; + extern u8 D_8019CF60[]; + extern u8 D_8019CF88[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_801869F4, D_8019CF60) + 3; + func_8001CE28(obj, D_8019CF60); + } else { + var_s3 = func_80024054(D_80186A04, D_8019CF88) + 9; + func_8001CE28(obj, D_8019CF88); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80186AB0[])(void); + +void func_8016B4BC(void *a0) { + D_80186AB0[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_8019CFB0; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_8019CFB0); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80186AA4[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80186AA4; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80186AE8[]; +extern unsigned short D_80186AF0[]; +extern unsigned short D_80186AF8[]; +extern unsigned char D_8019CFB8[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_8019CFB8 + param_2 * 0x40); + puVar3 = D_80186AE8[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80186AF0[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80186AF8[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_8019CFB0; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_8019CFB0, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80186B00[])(void); + +void func_8016BBA4(void *a0) { + D_80186B00[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_8019D0EC; + extern u8 D_8019D0ED; + extern u8 D_8019D0EE; + extern M2C_UNK D_8019D0F0; + extern u8 D_8019D0F1; + extern u8 D_8019D0F2; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_8019D0EC) = 0x20; + D_8019D0ED = 0x20; + D_8019D0EE = 0; + (*(u8 *)&D_8019D0F0) = 0xc0; + D_8019D0F1 = 0xc0; + D_8019D0F2 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_8019D0EC; +extern M2C_UNK D_8019D0F0; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_8019D0EC, &D_8019D0F0, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_8019D0ED; + extern u8 D_8019D0EE; + extern u8 D_8019D0F1; + extern u8 D_8019D0F2; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_8019D0EC); + if (*p1 != 0) *p1 -= 4; + if (D_8019D0ED != 0) D_8019D0ED -= 4; + if (D_8019D0EE != 0) D_8019D0EE -= 4; + p2 = &(*(u8 *)&D_8019D0F0); + if (*p2 != 0) *p2 -= 4; + if (D_8019D0F1 != 0) D_8019D0F1 -= 4; + if (D_8019D0F2 != 0) D_8019D0F2 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_8019D0EC), &(*(int *)&D_8019D0F0), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_8019D078; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_8019D078); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80186B10; + extern s32 D_80186B18; + extern s32 D_80186B20; + extern s32 D_80186B28; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80186B10, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80186B18, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80186B20, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80186B28, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80186B30[])(void); + +void func_8016C14C(void *a0) { + D_80186B30[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_8019D0F4[]; +extern u8 D_8019D0FC[]; +extern u8 D_8019D0AC[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_8019D0F4, D_8019D0FC, D_8019D0AC); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_8019D108[]; + extern u8 D_8019D1C8; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_8019D108[1] = 0xff; + D_8019D108[2] = 0x10; + D_8019D108[0] = 0x10; + D_8019D108[6] = 0; + D_8019D108[5] = 0; + D_8019D108[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_8019D108, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_8019D1C8, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_8019D108); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8016AB6C", func_8016C998); + + +extern void (*D_80186B38[])(void); + +void func_8016CB84(void *a0) { + D_80186B38[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_8019D1C8[]; + + + Blk_8016CF04_8016CF04 *p = &D_8019D1C8[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80186B54[])(void); + +void func_8016D19C(void *a0) { + D_80186B54[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80186B5C[])(void); + +void func_8016D428(void *a0) { + D_80186B5C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80186BC4[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80186BC4[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80186B68; +extern u8 D_80186B74; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80186B68, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80186B74); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80186BF8[])(void); + +void func_8016DEA4(void *a0) { + D_80186BF8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80186C00[])(void); + +void func_8016DF20(void *a0) { + D_80186C00[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80186C54[])(void); + +void func_8016E5B8(void *a0) { + D_80186C54[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80186C14[4]; + extern s32 D_80186C34; + extern s32 D_80186C3C; + extern s32 D_80186C44; + extern s32 D_80186C4C; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80186C14[0], pp, &tmp); + RotTransSV(&D_80186C14[1], &prim.v[1], &tmp); + RotTransSV(&D_80186C14[2], &prim.v[2], &tmp); + RotTransSV(&D_80186C14[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80186C34; + prim.f1 = D_80186C3C; + prim.f2 = D_80186C44; + prim.f3 = D_80186C4C; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80186C94[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80186C94[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80186C88[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80186C88[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80186C78[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80186C78[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80186C88[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80186C88[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80186C88[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80186CA4; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80186CA4; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80186D1C[])(void); + +void func_8016F6E0(void *a0) { + D_80186D1C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80186D24[])(void); + +void func_8016F798(void *a0) { + D_80186D24[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80186D2C[])(void); + +void func_8016F834(void *a0) { + D_80186D2C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80186D34[])(void); + +void func_8016F8E4(void *a0) { + D_80186D34[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80186D3C[])(void); + +void func_8016F9C4(void *a0) { + D_80186D3C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80186D44[])(void); + +void func_8016FA84(void *a0) { + D_80186D44[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80186D50[])(void); + +void func_8016FB7C(void *a0) { + D_80186D50[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80186D5C[])(void); + +void func_8016FC90(void *a0) { + D_80186D5C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80186D68[])(void); + +void func_8016FDB4(void *a0) { + D_80186D68[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80186D78[])(void); + +void func_8016FF30(void *a0) { + D_80186D78[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80186D88[])(void); + +void func_8016FFDC(void *a0) { + D_80186D88[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80186D90[])(void); + +void func_80170150(void *a0) { + D_80186D90[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80186D98[])(void); + +void func_80170240(void *a0) { + D_80186D98[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80186DA0[])(void); + +void func_801702FC(void *a0) { + D_80186DA0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80186DA8[])(void); + +void func_801703E0(void *a0) { + D_80186DA8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80186DB0[])(void); + +void func_801704B0(void *a0) { + D_80186DB0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80186DB8[])(void); + +void func_80170548(void *a0) { + D_80186DB8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80186DC0[])(void); + +void func_801705F8(void *a0) { + D_80186DC0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80186DC8[])(void); + +void func_801706AC(void *a0) { + D_80186DC8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80186DD0[])(void); + +void func_80170748(void *a0) { + D_80186DD0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80186DD8[])(void); + +void func_80170810(void *a0) { + D_80186DD8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80186DE0[])(void); + +void func_80170AD8(void *a0) { + D_80186DE0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80186DE8[])(void); + +void func_80170BD8(void *a0) { + D_80186DE8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80186DF0[])(void); + +void func_80170C74(void *a0) { + D_80186DF0[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80186DF8[])(void); + +void func_80170D68(void *a0) { + D_80186DF8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80186E00[])(void); + +void func_80170E34(void *a0) { + D_80186E00[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80186E08[])(void); + +void func_80170EFC(void *a0) { + D_80186E08[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80186E10[])(void); + +void func_80170FB0(void *a0) { + D_80186E10[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80186E18[])(void); + +void func_80171064(void *a0) { + D_80186E18[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80186E20[])(void); + +void func_80171120(void *a0) { + D_80186E20[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80186E28[])(void); + +void func_801711C0(void *a0) { + D_80186E28[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80186E30[])(void); + +void func_80171260(void *a0) { + D_80186E30[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80186E38[])(void); + +void func_801714E4(void *a0) { + D_80186E38[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8016AB6C", func_80172C50); + + +extern void (*D_80186E7C[])(void); + +void func_80172CA0(void *a0) { + D_80186E7C[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80186E40; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80186E40); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_102/ov_SC03_102_jr_8015AE2C.c b/src/ov_SC03_102/ov_SC03_102_jr_8015AE2C.c index f44d95842..ed5d99a36 100644 --- a/src/ov_SC03_102/ov_SC03_102_jr_8015AE2C.c +++ b/src/ov_SC03_102/ov_SC03_102_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_801892EC[])(void); void func_8016AB30(void *a0) { D_801892EC[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80189368[])(void); - -void func_8016B4BC(void *a0) { - D_80189368[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801B8C28; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801B8C28); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_8018935C[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_8018935C; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_801893A0[]; -extern unsigned short D_801893A8[]; -extern unsigned short D_801893B0[]; -extern unsigned char D_801B8C30[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801B8C30 + param_2 * 0x40); - puVar3 = D_801893A0[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_801893A8[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_801893B0[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801B8C28; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801B8C28, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_801893B8[])(void); - -void func_8016BBA4(void *a0) { - D_801893B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801B8D64; - extern u8 D_801B8D65; - extern u8 D_801B8D66; - extern M2C_UNK D_801B8D68; - extern u8 D_801B8D69; - extern u8 D_801B8D6A; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801B8D64) = 0x20; - D_801B8D65 = 0x20; - D_801B8D66 = 0; - (*(u8 *)&D_801B8D68) = 0xc0; - D_801B8D69 = 0xc0; - D_801B8D6A = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801B8D64; -extern M2C_UNK D_801B8D68; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801B8D64, &D_801B8D68, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801B8D65; - extern u8 D_801B8D66; - extern u8 D_801B8D69; - extern u8 D_801B8D6A; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801B8D64); - if (*p1 != 0) *p1 -= 4; - if (D_801B8D65 != 0) D_801B8D65 -= 4; - if (D_801B8D66 != 0) D_801B8D66 -= 4; - p2 = &(*(u8 *)&D_801B8D68); - if (*p2 != 0) *p2 -= 4; - if (D_801B8D69 != 0) D_801B8D69 -= 4; - if (D_801B8D6A != 0) D_801B8D6A -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801B8D64), &(*(int *)&D_801B8D68), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801B8CF0; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801B8CF0); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_801893C8; - extern s32 D_801893D0; - extern s32 D_801893D8; - extern s32 D_801893E0; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_801893C8, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_801893D0, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_801893D8, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_801893E0, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_801893E8[])(void); - -void func_8016C14C(void *a0) { - D_801893E8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801B8D6C[]; -extern u8 D_801B8D74[]; -extern u8 D_801B8D24[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801B8D6C, D_801B8D74, D_801B8D24); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801B8D80[]; - extern u8 D_801B8E40; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801B8D80[1] = 0xff; - D_801B8D80[2] = 0x10; - D_801B8D80[0] = 0x10; - D_801B8D80[6] = 0; - D_801B8D80[5] = 0; - D_801B8D80[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801B8D80, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801B8E40, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801B8D80); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8015AE2C", func_8016C998); - - -extern void (*D_801893F0[])(void); - -void func_8016CB84(void *a0) { - D_801893F0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801B8E40[]; - - - Blk_8016CF04_8016CF04 *p = &D_801B8E40[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_8018940C[])(void); - -void func_8016D19C(void *a0) { - D_8018940C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80189414[])(void); - -void func_8016D428(void *a0) { - D_80189414[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_8018947C[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_8018947C[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80189420; -extern u8 D_8018942C; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80189420, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018942C); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8015AE2C", func_8016DC20); - - -extern void (*D_801894B0[])(void); - -void func_8016DEA4(void *a0) { - D_801894B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_801894B8[])(void); - -void func_8016DF20(void *a0) { - D_801894B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_8018950C[])(void); - -void func_8016E5B8(void *a0) { - D_8018950C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_801894CC[4]; - extern s32 D_801894EC; - extern s32 D_801894F4; - extern s32 D_801894FC; - extern s32 D_80189504; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_801894CC[0], pp, &tmp); - RotTransSV(&D_801894CC[1], &prim.v[1], &tmp); - RotTransSV(&D_801894CC[2], &prim.v[2], &tmp); - RotTransSV(&D_801894CC[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_801894EC; - prim.f1 = D_801894F4; - prim.f2 = D_801894FC; - prim.f3 = D_80189504; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_8018954C[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_8018954C[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80189540[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80189540[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80189530[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80189530[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80189540[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80189540[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80189540[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_8018955C; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_8018955C; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_801895D4[])(void); - -void func_8016F6E0(void *a0) { - D_801895D4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_801895DC[])(void); - -void func_8016F798(void *a0) { - D_801895DC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_801895E4[])(void); - -void func_8016F834(void *a0) { - D_801895E4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_801895EC[])(void); - -void func_8016F8E4(void *a0) { - D_801895EC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_801895F4[])(void); - -void func_8016F9C4(void *a0) { - D_801895F4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_801895FC[])(void); - -void func_8016FA84(void *a0) { - D_801895FC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80189608[])(void); - -void func_8016FB7C(void *a0) { - D_80189608[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80189614[])(void); - -void func_8016FC90(void *a0) { - D_80189614[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80189620[])(void); - -void func_8016FDB4(void *a0) { - D_80189620[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80189630[])(void); - -void func_8016FF30(void *a0) { - D_80189630[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80189640[])(void); - -void func_8016FFDC(void *a0) { - D_80189640[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80189648[])(void); - -void func_80170150(void *a0) { - D_80189648[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80189650[])(void); - -void func_80170240(void *a0) { - D_80189650[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80189658[])(void); - -void func_801702FC(void *a0) { - D_80189658[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80189660[])(void); - -void func_801703E0(void *a0) { - D_80189660[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80189668[])(void); - -void func_801704B0(void *a0) { - D_80189668[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80189670[])(void); - -void func_80170548(void *a0) { - D_80189670[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80189678[])(void); - -void func_801705F8(void *a0) { - D_80189678[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80189680[])(void); - -void func_801706AC(void *a0) { - D_80189680[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80189688[])(void); - -void func_80170748(void *a0) { - D_80189688[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80189690[])(void); - -void func_80170810(void *a0) { - D_80189690[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80189698[])(void); - -void func_80170AD8(void *a0) { - D_80189698[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_801896A0[])(void); - -void func_80170BD8(void *a0) { - D_801896A0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_801896A8[])(void); - -void func_80170C74(void *a0) { - D_801896A8[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8015AE2C", func_80170CF0); - - -extern void (*D_801896B0[])(void); - -void func_80170D68(void *a0) { - D_801896B0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_801896B8[])(void); - -void func_80170E34(void *a0) { - D_801896B8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_801896C0[])(void); - -void func_80170EFC(void *a0) { - D_801896C0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_801896C8[])(void); - -void func_80170FB0(void *a0) { - D_801896C8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_801896D0[])(void); - -void func_80171064(void *a0) { - D_801896D0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_801896D8[])(void); - -void func_80171120(void *a0) { - D_801896D8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_801896E0[])(void); - -void func_801711C0(void *a0) { - D_801896E0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_801896E8[])(void); - -void func_80171260(void *a0) { - D_801896E8[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_801896F0[])(void); - -void func_801714E4(void *a0) { - D_801896F0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8015AE2C", func_80172C50); - - -extern void (*D_80189734[])(void); - -void func_80172CA0(void *a0) { - D_80189734[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_801896F8; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_801896F8); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_102/ov_SC03_102_jr_8016AB6C.c b/src/ov_SC03_102/ov_SC03_102_jr_8016AB6C.c new file mode 100644 index 000000000..739461841 --- /dev/null +++ b/src/ov_SC03_102/ov_SC03_102_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801886B8; +extern u8 D_80188628; +extern u8 D_80188604; +extern u8 D_801885E0; +extern u8 D_80188694; +extern u8 D_80188670; +extern u8 D_8018864C; +extern u8 D_801885BC; +extern void func_80145934(void); +extern u8 D_80188748; +extern u8 D_80188724; +extern u8 D_80188700; +extern u8 D_801886DC; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80187B40[]; +extern unsigned char D_80187B70[]; +extern unsigned char D_80187BC0[]; +extern unsigned char D_80187BF0[]; +extern unsigned char D_80187C20[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80187C70[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80187D38[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80187DC0[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80187DC8; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801B87B8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801B87BC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80187DF8; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80187EA0[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80187EC4[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80187EB4; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80187ED8[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80187EE4[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80187EF4[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80187F0C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80187EFC; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80187F20[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80187F3C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80187F2C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80187F50[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80187F64[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80187F78; +extern void (*D_80187FA0[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80187F80; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80187FEC[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80187FF0[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80188454[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80188464[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801B87F0; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018848C[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018846C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018847C; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801884CC[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801884D4[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_801884A0; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801884E0[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_801884B0; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801B87F8; +extern s32 D_801B8804; +extern s32 D_801B8808; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018851C[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801884F0[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801B8800; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018876C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018858C[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80188810[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80188964[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80188780; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018896C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80188790; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801887B0; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80188974[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_8018899C[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_801889A8[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_8018881C[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80188A4C; +extern void func_8015D380(s32 a0); +extern unsigned char D_80187B30[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80188A60[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80188A9C[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80188AE4; +extern u16 D_80188AE6; +extern u16 D_80188AE8; +extern s32 D_80188AEC; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80188AF4; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80188800; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80188B78[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80188C28[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80188C58[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80188CBC; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801B8810[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80188CE0[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801B8868[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80188D28[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80188D18; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801B809C[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80188D30[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80188D84[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80188D4C; +extern s16 D_80188D80; +extern s16 D_80188D7E; +extern s16 D_80188D7C; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80188D90[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801B88C8; +extern u8 D_801B88C9; +extern u8 D_801B88CA; +extern u8 D_801B88CB; +extern u8 D_801B88CC; +extern u8 D_801B88CD; +extern u8 D_801B88CE; +extern u8 D_801B88CF; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80188DA0[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801B8908; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80188DE4[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80188E60[]; +extern s32 D_80188E80[]; +extern u8 D_80188EFC[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80188F1C[]; +extern u8 D_80188F3C[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80188FD8[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80189054[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801B80AC; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80189060[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80189068[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80189130[])(void); +extern void func_80166618(void *a0); +extern void (*D_80189140[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80189150[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_8018915C[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_801890BC[]; +extern u8 D_801890D0[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80189174[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_8018917C[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80189184[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_8018918C[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80189194[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_8018919C[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_801891A4[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80189258[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80189260[])(void); +extern void func_80169F00(void *a0); +extern char D_80189210[]; +extern char D_801891D0[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80189298[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_801892A4[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_801892EC[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_801892AC[]; + extern u8 D_801892BC[]; + extern u8 D_801B8BD8[]; + extern u8 D_801B8C00[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_801892AC, D_801B8BD8) + 3; + func_8001CE28(obj, D_801B8BD8); + } else { + var_s3 = func_80024054(D_801892BC, D_801B8C00) + 9; + func_8001CE28(obj, D_801B8C00); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80189368[])(void); + +void func_8016B4BC(void *a0) { + D_80189368[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801B8C28; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801B8C28); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_8018935C[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_8018935C; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_801893A0[]; +extern unsigned short D_801893A8[]; +extern unsigned short D_801893B0[]; +extern unsigned char D_801B8C30[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801B8C30 + param_2 * 0x40); + puVar3 = D_801893A0[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_801893A8[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_801893B0[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801B8C28; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801B8C28, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_801893B8[])(void); + +void func_8016BBA4(void *a0) { + D_801893B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801B8D64; + extern u8 D_801B8D65; + extern u8 D_801B8D66; + extern M2C_UNK D_801B8D68; + extern u8 D_801B8D69; + extern u8 D_801B8D6A; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801B8D64) = 0x20; + D_801B8D65 = 0x20; + D_801B8D66 = 0; + (*(u8 *)&D_801B8D68) = 0xc0; + D_801B8D69 = 0xc0; + D_801B8D6A = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801B8D64; +extern M2C_UNK D_801B8D68; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801B8D64, &D_801B8D68, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801B8D65; + extern u8 D_801B8D66; + extern u8 D_801B8D69; + extern u8 D_801B8D6A; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801B8D64); + if (*p1 != 0) *p1 -= 4; + if (D_801B8D65 != 0) D_801B8D65 -= 4; + if (D_801B8D66 != 0) D_801B8D66 -= 4; + p2 = &(*(u8 *)&D_801B8D68); + if (*p2 != 0) *p2 -= 4; + if (D_801B8D69 != 0) D_801B8D69 -= 4; + if (D_801B8D6A != 0) D_801B8D6A -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801B8D64), &(*(int *)&D_801B8D68), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801B8CF0; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801B8CF0); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_801893C8; + extern s32 D_801893D0; + extern s32 D_801893D8; + extern s32 D_801893E0; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_801893C8, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_801893D0, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_801893D8, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_801893E0, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_801893E8[])(void); + +void func_8016C14C(void *a0) { + D_801893E8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801B8D6C[]; +extern u8 D_801B8D74[]; +extern u8 D_801B8D24[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801B8D6C, D_801B8D74, D_801B8D24); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801B8D80[]; + extern u8 D_801B8E40; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801B8D80[1] = 0xff; + D_801B8D80[2] = 0x10; + D_801B8D80[0] = 0x10; + D_801B8D80[6] = 0; + D_801B8D80[5] = 0; + D_801B8D80[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801B8D80, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801B8E40, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801B8D80); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8016AB6C", func_8016C998); + + +extern void (*D_801893F0[])(void); + +void func_8016CB84(void *a0) { + D_801893F0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801B8E40[]; + + + Blk_8016CF04_8016CF04 *p = &D_801B8E40[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_8018940C[])(void); + +void func_8016D19C(void *a0) { + D_8018940C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80189414[])(void); + +void func_8016D428(void *a0) { + D_80189414[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018947C[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_8018947C[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80189420; +extern u8 D_8018942C; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80189420, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018942C); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8016AB6C", func_8016DC20); + + +extern void (*D_801894B0[])(void); + +void func_8016DEA4(void *a0) { + D_801894B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_801894B8[])(void); + +void func_8016DF20(void *a0) { + D_801894B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_8018950C[])(void); + +void func_8016E5B8(void *a0) { + D_8018950C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_801894CC[4]; + extern s32 D_801894EC; + extern s32 D_801894F4; + extern s32 D_801894FC; + extern s32 D_80189504; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_801894CC[0], pp, &tmp); + RotTransSV(&D_801894CC[1], &prim.v[1], &tmp); + RotTransSV(&D_801894CC[2], &prim.v[2], &tmp); + RotTransSV(&D_801894CC[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_801894EC; + prim.f1 = D_801894F4; + prim.f2 = D_801894FC; + prim.f3 = D_80189504; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_8018954C[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_8018954C[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80189540[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80189540[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80189530[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80189530[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80189540[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80189540[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80189540[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_8018955C; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_8018955C; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_801895D4[])(void); + +void func_8016F6E0(void *a0) { + D_801895D4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_801895DC[])(void); + +void func_8016F798(void *a0) { + D_801895DC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_801895E4[])(void); + +void func_8016F834(void *a0) { + D_801895E4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_801895EC[])(void); + +void func_8016F8E4(void *a0) { + D_801895EC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_801895F4[])(void); + +void func_8016F9C4(void *a0) { + D_801895F4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_801895FC[])(void); + +void func_8016FA84(void *a0) { + D_801895FC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80189608[])(void); + +void func_8016FB7C(void *a0) { + D_80189608[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80189614[])(void); + +void func_8016FC90(void *a0) { + D_80189614[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80189620[])(void); + +void func_8016FDB4(void *a0) { + D_80189620[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80189630[])(void); + +void func_8016FF30(void *a0) { + D_80189630[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80189640[])(void); + +void func_8016FFDC(void *a0) { + D_80189640[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80189648[])(void); + +void func_80170150(void *a0) { + D_80189648[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80189650[])(void); + +void func_80170240(void *a0) { + D_80189650[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80189658[])(void); + +void func_801702FC(void *a0) { + D_80189658[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80189660[])(void); + +void func_801703E0(void *a0) { + D_80189660[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80189668[])(void); + +void func_801704B0(void *a0) { + D_80189668[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80189670[])(void); + +void func_80170548(void *a0) { + D_80189670[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80189678[])(void); + +void func_801705F8(void *a0) { + D_80189678[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80189680[])(void); + +void func_801706AC(void *a0) { + D_80189680[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80189688[])(void); + +void func_80170748(void *a0) { + D_80189688[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80189690[])(void); + +void func_80170810(void *a0) { + D_80189690[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80189698[])(void); + +void func_80170AD8(void *a0) { + D_80189698[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_801896A0[])(void); + +void func_80170BD8(void *a0) { + D_801896A0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_801896A8[])(void); + +void func_80170C74(void *a0) { + D_801896A8[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8016AB6C", func_80170CF0); + + +extern void (*D_801896B0[])(void); + +void func_80170D68(void *a0) { + D_801896B0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_801896B8[])(void); + +void func_80170E34(void *a0) { + D_801896B8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_801896C0[])(void); + +void func_80170EFC(void *a0) { + D_801896C0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_801896C8[])(void); + +void func_80170FB0(void *a0) { + D_801896C8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_801896D0[])(void); + +void func_80171064(void *a0) { + D_801896D0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_801896D8[])(void); + +void func_80171120(void *a0) { + D_801896D8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_801896E0[])(void); + +void func_801711C0(void *a0) { + D_801896E0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_801896E8[])(void); + +void func_80171260(void *a0) { + D_801896E8[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_801896F0[])(void); + +void func_801714E4(void *a0) { + D_801896F0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8016AB6C", func_80172C50); + + +extern void (*D_80189734[])(void); + +void func_80172CA0(void *a0) { + D_80189734[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_801896F8; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_801896F8); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_103/ov_SC03_103_jr_8015AE2C.c b/src/ov_SC03_103/ov_SC03_103_jr_8015AE2C.c index 7aad1dc0b..a2ce07a10 100644 --- a/src/ov_SC03_103/ov_SC03_103_jr_8015AE2C.c +++ b/src/ov_SC03_103/ov_SC03_103_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_8018729C[])(void); void func_8016AB30(void *a0) { D_8018729C[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80187318[])(void); - -void func_8016B4BC(void *a0) { - D_80187318[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801C3DE0; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801C3DE0); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_8018730C[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_8018730C; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80187350[]; -extern unsigned short D_80187358[]; -extern unsigned short D_80187360[]; -extern unsigned char D_801C3DE8[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801C3DE8 + param_2 * 0x40); - puVar3 = D_80187350[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80187358[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80187360[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801C3DE0; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801C3DE0, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80187368[])(void); - -void func_8016BBA4(void *a0) { - D_80187368[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801C3F1C; - extern u8 D_801C3F1D; - extern u8 D_801C3F1E; - extern M2C_UNK D_801C3F20; - extern u8 D_801C3F21; - extern u8 D_801C3F22; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801C3F1C) = 0x20; - D_801C3F1D = 0x20; - D_801C3F1E = 0; - (*(u8 *)&D_801C3F20) = 0xc0; - D_801C3F21 = 0xc0; - D_801C3F22 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801C3F1C; -extern M2C_UNK D_801C3F20; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801C3F1C, &D_801C3F20, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801C3F1D; - extern u8 D_801C3F1E; - extern u8 D_801C3F21; - extern u8 D_801C3F22; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801C3F1C); - if (*p1 != 0) *p1 -= 4; - if (D_801C3F1D != 0) D_801C3F1D -= 4; - if (D_801C3F1E != 0) D_801C3F1E -= 4; - p2 = &(*(u8 *)&D_801C3F20); - if (*p2 != 0) *p2 -= 4; - if (D_801C3F21 != 0) D_801C3F21 -= 4; - if (D_801C3F22 != 0) D_801C3F22 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801C3F1C), &(*(int *)&D_801C3F20), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801C3EA8; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801C3EA8); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80187378; - extern s32 D_80187380; - extern s32 D_80187388; - extern s32 D_80187390; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80187378, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80187380, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80187388, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80187390, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80187398[])(void); - -void func_8016C14C(void *a0) { - D_80187398[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801C3F24[]; -extern u8 D_801C3F2C[]; -extern u8 D_801C3EDC[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801C3F24, D_801C3F2C, D_801C3EDC); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801C3F38[]; - extern u8 D_801C3FF8; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801C3F38[1] = 0xff; - D_801C3F38[2] = 0x10; - D_801C3F38[0] = 0x10; - D_801C3F38[6] = 0; - D_801C3F38[5] = 0; - D_801C3F38[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801C3F38, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801C3FF8, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801C3F38); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8015AE2C", func_8016C998); - - -extern void (*D_801873A0[])(void); - -void func_8016CB84(void *a0) { - D_801873A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801C3FF8[]; - - - Blk_8016CF04_8016CF04 *p = &D_801C3FF8[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_801873BC[])(void); - -void func_8016D19C(void *a0) { - D_801873BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_801873C4[])(void); - -void func_8016D428(void *a0) { - D_801873C4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_8018742C[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_8018742C[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_801873D0; -extern u8 D_801873DC; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801873D0, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801873DC); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80187460[])(void); - -void func_8016DEA4(void *a0) { - D_80187460[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80187468[])(void); - -void func_8016DF20(void *a0) { - D_80187468[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_801874BC[])(void); - -void func_8016E5B8(void *a0) { - D_801874BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_8018747C[4]; - extern s32 D_8018749C; - extern s32 D_801874A4; - extern s32 D_801874AC; - extern s32 D_801874B4; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_8018747C[0], pp, &tmp); - RotTransSV(&D_8018747C[1], &prim.v[1], &tmp); - RotTransSV(&D_8018747C[2], &prim.v[2], &tmp); - RotTransSV(&D_8018747C[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_8018749C; - prim.f1 = D_801874A4; - prim.f2 = D_801874AC; - prim.f3 = D_801874B4; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_801874FC[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_801874FC[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_801874F0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_801874F0[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_801874E0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_801874E0[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801874F0[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_801874F0[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_801874F0[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_8018750C; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_8018750C; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80187584[])(void); - -void func_8016F6E0(void *a0) { - D_80187584[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_8018758C[])(void); - -void func_8016F798(void *a0) { - D_8018758C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80187594[])(void); - -void func_8016F834(void *a0) { - D_80187594[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_8018759C[])(void); - -void func_8016F8E4(void *a0) { - D_8018759C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_801875A4[])(void); - -void func_8016F9C4(void *a0) { - D_801875A4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_801875AC[])(void); - -void func_8016FA84(void *a0) { - D_801875AC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_801875B8[])(void); - -void func_8016FB7C(void *a0) { - D_801875B8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_801875C4[])(void); - -void func_8016FC90(void *a0) { - D_801875C4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_801875D0[])(void); - -void func_8016FDB4(void *a0) { - D_801875D0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_801875E0[])(void); - -void func_8016FF30(void *a0) { - D_801875E0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_801875F0[])(void); - -void func_8016FFDC(void *a0) { - D_801875F0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_801875F8[])(void); - -void func_80170150(void *a0) { - D_801875F8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80187600[])(void); - -void func_80170240(void *a0) { - D_80187600[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80187608[])(void); - -void func_801702FC(void *a0) { - D_80187608[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80187610[])(void); - -void func_801703E0(void *a0) { - D_80187610[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80187618[])(void); - -void func_801704B0(void *a0) { - D_80187618[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80187620[])(void); - -void func_80170548(void *a0) { - D_80187620[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80187628[])(void); - -void func_801705F8(void *a0) { - D_80187628[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80187630[])(void); - -void func_801706AC(void *a0) { - D_80187630[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80187638[])(void); - -void func_80170748(void *a0) { - D_80187638[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80187640[])(void); - -void func_80170810(void *a0) { - D_80187640[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80187648[])(void); - -void func_80170AD8(void *a0) { - D_80187648[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80187650[])(void); - -void func_80170BD8(void *a0) { - D_80187650[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80187658[])(void); - -void func_80170C74(void *a0) { - D_80187658[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80187660[])(void); - -void func_80170D68(void *a0) { - D_80187660[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80187668[])(void); - -void func_80170E34(void *a0) { - D_80187668[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80187670[])(void); - -void func_80170EFC(void *a0) { - D_80187670[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80187678[])(void); - -void func_80170FB0(void *a0) { - D_80187678[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80187680[])(void); - -void func_80171064(void *a0) { - D_80187680[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80187688[])(void); - -void func_80171120(void *a0) { - D_80187688[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80187690[])(void); - -void func_801711C0(void *a0) { - D_80187690[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80187698[])(void); - -void func_80171260(void *a0) { - D_80187698[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_801876A0[])(void); - -void func_801714E4(void *a0) { - D_801876A0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8015AE2C", func_80172C50); - - -extern void (*D_801876E4[])(void); - -void func_80172CA0(void *a0) { - D_801876E4[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_801876A8; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_801876A8); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_103/ov_SC03_103_jr_8016AB6C.c b/src/ov_SC03_103/ov_SC03_103_jr_8016AB6C.c new file mode 100644 index 000000000..d460d2c61 --- /dev/null +++ b/src/ov_SC03_103/ov_SC03_103_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80186668; +extern u8 D_801865D8; +extern u8 D_801865B4; +extern u8 D_80186590; +extern u8 D_80186644; +extern u8 D_80186620; +extern u8 D_801865FC; +extern u8 D_8018656C; +extern void func_80145934(void); +extern u8 D_801866F8; +extern u8 D_801866D4; +extern u8 D_801866B0; +extern u8 D_8018668C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80185AF0[]; +extern unsigned char D_80185B20[]; +extern unsigned char D_80185B70[]; +extern unsigned char D_80185BA0[]; +extern unsigned char D_80185BD0[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80185C20[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80185CE8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80185D70[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80185D78; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801C3970; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801C3974; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80185DA8; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80185E50[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80185E74[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80185E64; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80185E88[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80185E94[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80185EA4[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80185EBC[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80185EAC; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80185ED0[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80185EEC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80185EDC; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80185F00[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80185F14[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80185F28; +extern void (*D_80185F50[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80185F30; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80185F9C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80185FA0[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80186404[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80186414[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801C39A8; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018643C[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018641C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018642C; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018647C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80186484[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80186450; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80186490[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80186460; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801C39B0; +extern s32 D_801C39BC; +extern s32 D_801C39C0; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801864CC[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801864A0[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801C39B8; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018671C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018653C[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_801867C0[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80186914[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80186730; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018691C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80186740; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80186760; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80186924[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_8018694C[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80186958[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_801867CC[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_801869FC; +extern void func_8015D380(s32 a0); +extern unsigned char D_80185AE0[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80186A10[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80186A4C[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80186A94; +extern u16 D_80186A96; +extern u16 D_80186A98; +extern s32 D_80186A9C; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80186AA4; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_801867B0; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80186B28[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80186BD8[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80186C08[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80186C6C; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801C39C8[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80186C90[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801C3A20[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80186CD8[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80186CC8; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801C3250[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80186CE0[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80186D34[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80186CFC; +extern s16 D_80186D30; +extern s16 D_80186D2E; +extern s16 D_80186D2C; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80186D40[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801C3A80; +extern u8 D_801C3A81; +extern u8 D_801C3A82; +extern u8 D_801C3A83; +extern u8 D_801C3A84; +extern u8 D_801C3A85; +extern u8 D_801C3A86; +extern u8 D_801C3A87; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80186D50[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801C3AC0; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80186D94[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80186E10[]; +extern s32 D_80186E30[]; +extern u8 D_80186EAC[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80186ECC[]; +extern u8 D_80186EEC[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80186F88[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80187004[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801C3260; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80187010[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80187018[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_801870E0[])(void); +extern void func_80166618(void *a0); +extern void (*D_801870F0[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80187100[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_8018710C[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_8018706C[]; +extern u8 D_80187080[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80187124[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_8018712C[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80187134[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_8018713C[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80187144[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_8018714C[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80187154[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80187208[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80187210[])(void); +extern void func_80169F00(void *a0); +extern char D_801871C0[]; +extern char D_80187180[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80187248[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80187254[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_8018729C[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_8018725C[]; + extern u8 D_8018726C[]; + extern u8 D_801C3D90[]; + extern u8 D_801C3DB8[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_8018725C, D_801C3D90) + 3; + func_8001CE28(obj, D_801C3D90); + } else { + var_s3 = func_80024054(D_8018726C, D_801C3DB8) + 9; + func_8001CE28(obj, D_801C3DB8); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80187318[])(void); + +void func_8016B4BC(void *a0) { + D_80187318[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801C3DE0; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801C3DE0); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_8018730C[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_8018730C; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80187350[]; +extern unsigned short D_80187358[]; +extern unsigned short D_80187360[]; +extern unsigned char D_801C3DE8[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801C3DE8 + param_2 * 0x40); + puVar3 = D_80187350[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80187358[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80187360[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801C3DE0; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801C3DE0, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80187368[])(void); + +void func_8016BBA4(void *a0) { + D_80187368[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801C3F1C; + extern u8 D_801C3F1D; + extern u8 D_801C3F1E; + extern M2C_UNK D_801C3F20; + extern u8 D_801C3F21; + extern u8 D_801C3F22; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801C3F1C) = 0x20; + D_801C3F1D = 0x20; + D_801C3F1E = 0; + (*(u8 *)&D_801C3F20) = 0xc0; + D_801C3F21 = 0xc0; + D_801C3F22 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801C3F1C; +extern M2C_UNK D_801C3F20; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801C3F1C, &D_801C3F20, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801C3F1D; + extern u8 D_801C3F1E; + extern u8 D_801C3F21; + extern u8 D_801C3F22; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801C3F1C); + if (*p1 != 0) *p1 -= 4; + if (D_801C3F1D != 0) D_801C3F1D -= 4; + if (D_801C3F1E != 0) D_801C3F1E -= 4; + p2 = &(*(u8 *)&D_801C3F20); + if (*p2 != 0) *p2 -= 4; + if (D_801C3F21 != 0) D_801C3F21 -= 4; + if (D_801C3F22 != 0) D_801C3F22 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801C3F1C), &(*(int *)&D_801C3F20), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801C3EA8; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801C3EA8); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80187378; + extern s32 D_80187380; + extern s32 D_80187388; + extern s32 D_80187390; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80187378, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80187380, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80187388, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80187390, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80187398[])(void); + +void func_8016C14C(void *a0) { + D_80187398[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801C3F24[]; +extern u8 D_801C3F2C[]; +extern u8 D_801C3EDC[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801C3F24, D_801C3F2C, D_801C3EDC); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801C3F38[]; + extern u8 D_801C3FF8; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801C3F38[1] = 0xff; + D_801C3F38[2] = 0x10; + D_801C3F38[0] = 0x10; + D_801C3F38[6] = 0; + D_801C3F38[5] = 0; + D_801C3F38[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801C3F38, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801C3FF8, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801C3F38); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8016AB6C", func_8016C998); + + +extern void (*D_801873A0[])(void); + +void func_8016CB84(void *a0) { + D_801873A0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801C3FF8[]; + + + Blk_8016CF04_8016CF04 *p = &D_801C3FF8[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_801873BC[])(void); + +void func_8016D19C(void *a0) { + D_801873BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_801873C4[])(void); + +void func_8016D428(void *a0) { + D_801873C4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018742C[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_8018742C[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_801873D0; +extern u8 D_801873DC; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801873D0, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801873DC); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80187460[])(void); + +void func_8016DEA4(void *a0) { + D_80187460[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80187468[])(void); + +void func_8016DF20(void *a0) { + D_80187468[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_801874BC[])(void); + +void func_8016E5B8(void *a0) { + D_801874BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_8018747C[4]; + extern s32 D_8018749C; + extern s32 D_801874A4; + extern s32 D_801874AC; + extern s32 D_801874B4; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_8018747C[0], pp, &tmp); + RotTransSV(&D_8018747C[1], &prim.v[1], &tmp); + RotTransSV(&D_8018747C[2], &prim.v[2], &tmp); + RotTransSV(&D_8018747C[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_8018749C; + prim.f1 = D_801874A4; + prim.f2 = D_801874AC; + prim.f3 = D_801874B4; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_801874FC[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_801874FC[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_801874F0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_801874F0[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_801874E0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_801874E0[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801874F0[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_801874F0[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_801874F0[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_8018750C; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_8018750C; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80187584[])(void); + +void func_8016F6E0(void *a0) { + D_80187584[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_8018758C[])(void); + +void func_8016F798(void *a0) { + D_8018758C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80187594[])(void); + +void func_8016F834(void *a0) { + D_80187594[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_8018759C[])(void); + +void func_8016F8E4(void *a0) { + D_8018759C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_801875A4[])(void); + +void func_8016F9C4(void *a0) { + D_801875A4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_801875AC[])(void); + +void func_8016FA84(void *a0) { + D_801875AC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_801875B8[])(void); + +void func_8016FB7C(void *a0) { + D_801875B8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_801875C4[])(void); + +void func_8016FC90(void *a0) { + D_801875C4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_801875D0[])(void); + +void func_8016FDB4(void *a0) { + D_801875D0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_801875E0[])(void); + +void func_8016FF30(void *a0) { + D_801875E0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_801875F0[])(void); + +void func_8016FFDC(void *a0) { + D_801875F0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_801875F8[])(void); + +void func_80170150(void *a0) { + D_801875F8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80187600[])(void); + +void func_80170240(void *a0) { + D_80187600[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80187608[])(void); + +void func_801702FC(void *a0) { + D_80187608[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80187610[])(void); + +void func_801703E0(void *a0) { + D_80187610[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80187618[])(void); + +void func_801704B0(void *a0) { + D_80187618[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80187620[])(void); + +void func_80170548(void *a0) { + D_80187620[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80187628[])(void); + +void func_801705F8(void *a0) { + D_80187628[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80187630[])(void); + +void func_801706AC(void *a0) { + D_80187630[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80187638[])(void); + +void func_80170748(void *a0) { + D_80187638[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80187640[])(void); + +void func_80170810(void *a0) { + D_80187640[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80187648[])(void); + +void func_80170AD8(void *a0) { + D_80187648[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80187650[])(void); + +void func_80170BD8(void *a0) { + D_80187650[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80187658[])(void); + +void func_80170C74(void *a0) { + D_80187658[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80187660[])(void); + +void func_80170D68(void *a0) { + D_80187660[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80187668[])(void); + +void func_80170E34(void *a0) { + D_80187668[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80187670[])(void); + +void func_80170EFC(void *a0) { + D_80187670[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80187678[])(void); + +void func_80170FB0(void *a0) { + D_80187678[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80187680[])(void); + +void func_80171064(void *a0) { + D_80187680[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80187688[])(void); + +void func_80171120(void *a0) { + D_80187688[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80187690[])(void); + +void func_801711C0(void *a0) { + D_80187690[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80187698[])(void); + +void func_80171260(void *a0) { + D_80187698[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_801876A0[])(void); + +void func_801714E4(void *a0) { + D_801876A0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8016AB6C", func_80172C50); + + +extern void (*D_801876E4[])(void); + +void func_80172CA0(void *a0) { + D_801876E4[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_801876A8; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_801876A8); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_104/ov_SC03_104_jr_8015AE2C.c b/src/ov_SC03_104/ov_SC03_104_jr_8015AE2C.c index 417ae8c33..528dced3f 100644 --- a/src/ov_SC03_104/ov_SC03_104_jr_8015AE2C.c +++ b/src/ov_SC03_104/ov_SC03_104_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_8018DE2C[])(void); void func_8016AB30(void *a0) { D_8018DE2C[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_8018DEA8[])(void); - -void func_8016B4BC(void *a0) { - D_8018DEA8[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801BF378; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801BF378); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_8018DE9C[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_8018DE9C; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_8018DEE0[]; -extern unsigned short D_8018DEE8[]; -extern unsigned short D_8018DEF0[]; -extern unsigned char D_801BF380[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801BF380 + param_2 * 0x40); - puVar3 = D_8018DEE0[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_8018DEE8[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_8018DEF0[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801BF378; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801BF378, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_8018DEF8[])(void); - -void func_8016BBA4(void *a0) { - D_8018DEF8[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801BF4B4; - extern u8 D_801BF4B5; - extern u8 D_801BF4B6; - extern M2C_UNK D_801BF4B8; - extern u8 D_801BF4B9; - extern u8 D_801BF4BA; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801BF4B4) = 0x20; - D_801BF4B5 = 0x20; - D_801BF4B6 = 0; - (*(u8 *)&D_801BF4B8) = 0xc0; - D_801BF4B9 = 0xc0; - D_801BF4BA = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801BF4B4; -extern M2C_UNK D_801BF4B8; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801BF4B4, &D_801BF4B8, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801BF4B5; - extern u8 D_801BF4B6; - extern u8 D_801BF4B9; - extern u8 D_801BF4BA; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801BF4B4); - if (*p1 != 0) *p1 -= 4; - if (D_801BF4B5 != 0) D_801BF4B5 -= 4; - if (D_801BF4B6 != 0) D_801BF4B6 -= 4; - p2 = &(*(u8 *)&D_801BF4B8); - if (*p2 != 0) *p2 -= 4; - if (D_801BF4B9 != 0) D_801BF4B9 -= 4; - if (D_801BF4BA != 0) D_801BF4BA -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801BF4B4), &(*(int *)&D_801BF4B8), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801BF440; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801BF440); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_8018DF08; - extern s32 D_8018DF10; - extern s32 D_8018DF18; - extern s32 D_8018DF20; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_8018DF08, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_8018DF10, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_8018DF18, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_8018DF20, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_8018DF28[])(void); - -void func_8016C14C(void *a0) { - D_8018DF28[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801BF4BC[]; -extern u8 D_801BF4C4[]; -extern u8 D_801BF474[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801BF4BC, D_801BF4C4, D_801BF474); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801BF4D0[]; - extern u8 D_801BF590; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801BF4D0[1] = 0xff; - D_801BF4D0[2] = 0x10; - D_801BF4D0[0] = 0x10; - D_801BF4D0[6] = 0; - D_801BF4D0[5] = 0; - D_801BF4D0[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801BF4D0, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801BF590, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801BF4D0); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8015AE2C", func_8016C998); - - -extern void (*D_8018DF30[])(void); - -void func_8016CB84(void *a0) { - D_8018DF30[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801BF590[]; - - - Blk_8016CF04_8016CF04 *p = &D_801BF590[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_8018DF4C[])(void); - -void func_8016D19C(void *a0) { - D_8018DF4C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_8018DF54[])(void); - -void func_8016D428(void *a0) { - D_8018DF54[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_8018DFBC[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_8018DFBC[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_8018DF60; -extern u8 D_8018DF6C; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018DF60, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018DF6C); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8015AE2C", func_8016DC20); - - -extern void (*D_8018DFF0[])(void); - -void func_8016DEA4(void *a0) { - D_8018DFF0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_8018DFF8[])(void); - -void func_8016DF20(void *a0) { - D_8018DFF8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_8018E04C[])(void); - -void func_8016E5B8(void *a0) { - D_8018E04C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_8018E00C[4]; - extern s32 D_8018E02C; - extern s32 D_8018E034; - extern s32 D_8018E03C; - extern s32 D_8018E044; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_8018E00C[0], pp, &tmp); - RotTransSV(&D_8018E00C[1], &prim.v[1], &tmp); - RotTransSV(&D_8018E00C[2], &prim.v[2], &tmp); - RotTransSV(&D_8018E00C[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_8018E02C; - prim.f1 = D_8018E034; - prim.f2 = D_8018E03C; - prim.f3 = D_8018E044; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_8018E08C[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_8018E08C[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_8018E080[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_8018E080[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_8018E070[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_8018E070[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018E080[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_8018E080[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_8018E080[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_8018E09C; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_8018E09C; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_8018E114[])(void); - -void func_8016F6E0(void *a0) { - D_8018E114[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_8018E11C[])(void); - -void func_8016F798(void *a0) { - D_8018E11C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_8018E124[])(void); - -void func_8016F834(void *a0) { - D_8018E124[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_8018E12C[])(void); - -void func_8016F8E4(void *a0) { - D_8018E12C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_8018E134[])(void); - -void func_8016F9C4(void *a0) { - D_8018E134[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_8018E13C[])(void); - -void func_8016FA84(void *a0) { - D_8018E13C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_8018E148[])(void); - -void func_8016FB7C(void *a0) { - D_8018E148[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_8018E154[])(void); - -void func_8016FC90(void *a0) { - D_8018E154[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_8018E160[])(void); - -void func_8016FDB4(void *a0) { - D_8018E160[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_8018E170[])(void); - -void func_8016FF30(void *a0) { - D_8018E170[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_8018E180[])(void); - -void func_8016FFDC(void *a0) { - D_8018E180[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_8018E188[])(void); - -void func_80170150(void *a0) { - D_8018E188[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_8018E190[])(void); - -void func_80170240(void *a0) { - D_8018E190[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_8018E198[])(void); - -void func_801702FC(void *a0) { - D_8018E198[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_8018E1A0[])(void); - -void func_801703E0(void *a0) { - D_8018E1A0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_8018E1A8[])(void); - -void func_801704B0(void *a0) { - D_8018E1A8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_8018E1B0[])(void); - -void func_80170548(void *a0) { - D_8018E1B0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_8018E1B8[])(void); - -void func_801705F8(void *a0) { - D_8018E1B8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_8018E1C0[])(void); - -void func_801706AC(void *a0) { - D_8018E1C0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_8018E1C8[])(void); - -void func_80170748(void *a0) { - D_8018E1C8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_8018E1D0[])(void); - -void func_80170810(void *a0) { - D_8018E1D0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_8018E1D8[])(void); - -void func_80170AD8(void *a0) { - D_8018E1D8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_8018E1E0[])(void); - -void func_80170BD8(void *a0) { - D_8018E1E0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_8018E1E8[])(void); - -void func_80170C74(void *a0) { - D_8018E1E8[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8015AE2C", func_80170CF0); - - -extern void (*D_8018E1F0[])(void); - -void func_80170D68(void *a0) { - D_8018E1F0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_8018E1F8[])(void); - -void func_80170E34(void *a0) { - D_8018E1F8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_8018E200[])(void); - -void func_80170EFC(void *a0) { - D_8018E200[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_8018E208[])(void); - -void func_80170FB0(void *a0) { - D_8018E208[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_8018E210[])(void); - -void func_80171064(void *a0) { - D_8018E210[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_8018E218[])(void); - -void func_80171120(void *a0) { - D_8018E218[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_8018E220[])(void); - -void func_801711C0(void *a0) { - D_8018E220[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_8018E228[])(void); - -void func_80171260(void *a0) { - D_8018E228[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_8018E230[])(void); - -void func_801714E4(void *a0) { - D_8018E230[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8015AE2C", func_80172C50); - - -extern void (*D_8018E274[])(void); - -void func_80172CA0(void *a0) { - D_8018E274[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_8018E238; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_8018E238); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_104/ov_SC03_104_jr_8016AB6C.c b/src/ov_SC03_104/ov_SC03_104_jr_8016AB6C.c new file mode 100644 index 000000000..8f1373106 --- /dev/null +++ b/src/ov_SC03_104/ov_SC03_104_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018D1F8; +extern u8 D_8018D168; +extern u8 D_8018D144; +extern u8 D_8018D120; +extern u8 D_8018D1D4; +extern u8 D_8018D1B0; +extern u8 D_8018D18C; +extern u8 D_8018D0FC; +extern void func_80145934(void); +extern u8 D_8018D288; +extern u8 D_8018D264; +extern u8 D_8018D240; +extern u8 D_8018D21C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018C680[]; +extern unsigned char D_8018C6B0[]; +extern unsigned char D_8018C700[]; +extern unsigned char D_8018C730[]; +extern unsigned char D_8018C760[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018C7B0[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018C878[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018C900[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018C908; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801BEF08; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801BEF0C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018C938; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018C9E0[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018CA04[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018C9F4; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018CA18[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018CA24[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018CA34[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018CA4C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018CA3C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018CA60[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018CA7C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018CA6C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018CA90[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018CAA4[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018CAB8; +extern void (*D_8018CAE0[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018CAC0; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018CB2C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018CB30[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018CF94[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018CFA4[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801BEF40; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018CFCC[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018CFAC; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018CFBC; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018D00C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018D014[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018CFE0; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018D020[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018CFF0; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801BEF48; +extern s32 D_801BEF54; +extern s32 D_801BEF58; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018D05C[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018D030[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801BEF50; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018D2AC[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018D0CC[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018D350[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018D4A4[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018D2C0; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018D4AC[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018D2D0; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018D2F0; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_8018D4B4[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_8018D4DC[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_8018D4E8[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_8018D35C[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_8018D58C; +extern void func_8015D380(s32 a0); +extern unsigned char D_8018C670[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_8018D5A0[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_8018D5DC[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_8018D624; +extern u16 D_8018D626; +extern u16 D_8018D628; +extern s32 D_8018D62C; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_8018D634; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_8018D340; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_8018D6B8[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_8018D768[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_8018D798[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_8018D7FC; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801BEF60[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_8018D820[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801BEFB8[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_8018D868[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_8018D858; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801BE7B0[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_8018D870[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_8018D8C4[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_8018D88C; +extern s16 D_8018D8C0; +extern s16 D_8018D8BE; +extern s16 D_8018D8BC; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_8018D8D0[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801BF018; +extern u8 D_801BF019; +extern u8 D_801BF01A; +extern u8 D_801BF01B; +extern u8 D_801BF01C; +extern u8 D_801BF01D; +extern u8 D_801BF01E; +extern u8 D_801BF01F; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_8018D8E0[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801BF058; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_8018D924[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_8018D9A0[]; +extern s32 D_8018D9C0[]; +extern u8 D_8018DA3C[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_8018DA5C[]; +extern u8 D_8018DA7C[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_8018DB18[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_8018DB94[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801BE7C0; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_8018DBA0[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_8018DBA8[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_8018DC70[])(void); +extern void func_80166618(void *a0); +extern void (*D_8018DC80[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_8018DC90[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_8018DC9C[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_8018DBFC[]; +extern u8 D_8018DC10[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_8018DCB4[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_8018DCBC[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_8018DCC4[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_8018DCCC[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_8018DCD4[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_8018DCDC[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_8018DCE4[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_8018DD98[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_8018DDA0[])(void); +extern void func_80169F00(void *a0); +extern char D_8018DD50[]; +extern char D_8018DD10[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_8018DDD8[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_8018DDE4[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_8018DE2C[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_8018DDEC[]; + extern u8 D_8018DDFC[]; + extern u8 D_801BF328[]; + extern u8 D_801BF350[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_8018DDEC, D_801BF328) + 3; + func_8001CE28(obj, D_801BF328); + } else { + var_s3 = func_80024054(D_8018DDFC, D_801BF350) + 9; + func_8001CE28(obj, D_801BF350); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_8018DEA8[])(void); + +void func_8016B4BC(void *a0) { + D_8018DEA8[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801BF378; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801BF378); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_8018DE9C[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_8018DE9C; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_8018DEE0[]; +extern unsigned short D_8018DEE8[]; +extern unsigned short D_8018DEF0[]; +extern unsigned char D_801BF380[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801BF380 + param_2 * 0x40); + puVar3 = D_8018DEE0[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_8018DEE8[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_8018DEF0[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801BF378; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801BF378, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_8018DEF8[])(void); + +void func_8016BBA4(void *a0) { + D_8018DEF8[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801BF4B4; + extern u8 D_801BF4B5; + extern u8 D_801BF4B6; + extern M2C_UNK D_801BF4B8; + extern u8 D_801BF4B9; + extern u8 D_801BF4BA; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801BF4B4) = 0x20; + D_801BF4B5 = 0x20; + D_801BF4B6 = 0; + (*(u8 *)&D_801BF4B8) = 0xc0; + D_801BF4B9 = 0xc0; + D_801BF4BA = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801BF4B4; +extern M2C_UNK D_801BF4B8; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801BF4B4, &D_801BF4B8, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801BF4B5; + extern u8 D_801BF4B6; + extern u8 D_801BF4B9; + extern u8 D_801BF4BA; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801BF4B4); + if (*p1 != 0) *p1 -= 4; + if (D_801BF4B5 != 0) D_801BF4B5 -= 4; + if (D_801BF4B6 != 0) D_801BF4B6 -= 4; + p2 = &(*(u8 *)&D_801BF4B8); + if (*p2 != 0) *p2 -= 4; + if (D_801BF4B9 != 0) D_801BF4B9 -= 4; + if (D_801BF4BA != 0) D_801BF4BA -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801BF4B4), &(*(int *)&D_801BF4B8), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801BF440; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801BF440); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_8018DF08; + extern s32 D_8018DF10; + extern s32 D_8018DF18; + extern s32 D_8018DF20; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_8018DF08, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_8018DF10, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_8018DF18, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_8018DF20, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_8018DF28[])(void); + +void func_8016C14C(void *a0) { + D_8018DF28[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801BF4BC[]; +extern u8 D_801BF4C4[]; +extern u8 D_801BF474[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801BF4BC, D_801BF4C4, D_801BF474); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801BF4D0[]; + extern u8 D_801BF590; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801BF4D0[1] = 0xff; + D_801BF4D0[2] = 0x10; + D_801BF4D0[0] = 0x10; + D_801BF4D0[6] = 0; + D_801BF4D0[5] = 0; + D_801BF4D0[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801BF4D0, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801BF590, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801BF4D0); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8016AB6C", func_8016C998); + + +extern void (*D_8018DF30[])(void); + +void func_8016CB84(void *a0) { + D_8018DF30[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801BF590[]; + + + Blk_8016CF04_8016CF04 *p = &D_801BF590[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_8018DF4C[])(void); + +void func_8016D19C(void *a0) { + D_8018DF4C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_8018DF54[])(void); + +void func_8016D428(void *a0) { + D_8018DF54[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018DFBC[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_8018DFBC[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_8018DF60; +extern u8 D_8018DF6C; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018DF60, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018DF6C); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8016AB6C", func_8016DC20); + + +extern void (*D_8018DFF0[])(void); + +void func_8016DEA4(void *a0) { + D_8018DFF0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_8018DFF8[])(void); + +void func_8016DF20(void *a0) { + D_8018DFF8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_8018E04C[])(void); + +void func_8016E5B8(void *a0) { + D_8018E04C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_8018E00C[4]; + extern s32 D_8018E02C; + extern s32 D_8018E034; + extern s32 D_8018E03C; + extern s32 D_8018E044; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_8018E00C[0], pp, &tmp); + RotTransSV(&D_8018E00C[1], &prim.v[1], &tmp); + RotTransSV(&D_8018E00C[2], &prim.v[2], &tmp); + RotTransSV(&D_8018E00C[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_8018E02C; + prim.f1 = D_8018E034; + prim.f2 = D_8018E03C; + prim.f3 = D_8018E044; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_8018E08C[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_8018E08C[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_8018E080[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_8018E080[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_8018E070[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_8018E070[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018E080[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_8018E080[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_8018E080[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_8018E09C; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_8018E09C; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_8018E114[])(void); + +void func_8016F6E0(void *a0) { + D_8018E114[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_8018E11C[])(void); + +void func_8016F798(void *a0) { + D_8018E11C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_8018E124[])(void); + +void func_8016F834(void *a0) { + D_8018E124[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_8018E12C[])(void); + +void func_8016F8E4(void *a0) { + D_8018E12C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_8018E134[])(void); + +void func_8016F9C4(void *a0) { + D_8018E134[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_8018E13C[])(void); + +void func_8016FA84(void *a0) { + D_8018E13C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_8018E148[])(void); + +void func_8016FB7C(void *a0) { + D_8018E148[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_8018E154[])(void); + +void func_8016FC90(void *a0) { + D_8018E154[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_8018E160[])(void); + +void func_8016FDB4(void *a0) { + D_8018E160[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_8018E170[])(void); + +void func_8016FF30(void *a0) { + D_8018E170[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_8018E180[])(void); + +void func_8016FFDC(void *a0) { + D_8018E180[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_8018E188[])(void); + +void func_80170150(void *a0) { + D_8018E188[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_8018E190[])(void); + +void func_80170240(void *a0) { + D_8018E190[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_8018E198[])(void); + +void func_801702FC(void *a0) { + D_8018E198[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_8018E1A0[])(void); + +void func_801703E0(void *a0) { + D_8018E1A0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_8018E1A8[])(void); + +void func_801704B0(void *a0) { + D_8018E1A8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_8018E1B0[])(void); + +void func_80170548(void *a0) { + D_8018E1B0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_8018E1B8[])(void); + +void func_801705F8(void *a0) { + D_8018E1B8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_8018E1C0[])(void); + +void func_801706AC(void *a0) { + D_8018E1C0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_8018E1C8[])(void); + +void func_80170748(void *a0) { + D_8018E1C8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_8018E1D0[])(void); + +void func_80170810(void *a0) { + D_8018E1D0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_8018E1D8[])(void); + +void func_80170AD8(void *a0) { + D_8018E1D8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_8018E1E0[])(void); + +void func_80170BD8(void *a0) { + D_8018E1E0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_8018E1E8[])(void); + +void func_80170C74(void *a0) { + D_8018E1E8[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8016AB6C", func_80170CF0); + + +extern void (*D_8018E1F0[])(void); + +void func_80170D68(void *a0) { + D_8018E1F0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_8018E1F8[])(void); + +void func_80170E34(void *a0) { + D_8018E1F8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_8018E200[])(void); + +void func_80170EFC(void *a0) { + D_8018E200[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_8018E208[])(void); + +void func_80170FB0(void *a0) { + D_8018E208[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_8018E210[])(void); + +void func_80171064(void *a0) { + D_8018E210[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_8018E218[])(void); + +void func_80171120(void *a0) { + D_8018E218[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_8018E220[])(void); + +void func_801711C0(void *a0) { + D_8018E220[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_8018E228[])(void); + +void func_80171260(void *a0) { + D_8018E228[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_8018E230[])(void); + +void func_801714E4(void *a0) { + D_8018E230[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8016AB6C", func_80172C50); + + +extern void (*D_8018E274[])(void); + +void func_80172CA0(void *a0) { + D_8018E274[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_8018E238; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_8018E238); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_105/ov_SC03_105_jr_8015AE2C.c b/src/ov_SC03_105/ov_SC03_105_jr_8015AE2C.c index 6754b1324..61adf8eea 100644 --- a/src/ov_SC03_105/ov_SC03_105_jr_8015AE2C.c +++ b/src/ov_SC03_105/ov_SC03_105_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_8018D4B4[])(void); void func_8016AB30(void *a0) { D_8018D4B4[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_8018D530[])(void); - -void func_8016B4BC(void *a0) { - D_8018D530[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801B8908; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801B8908); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_8018D524[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_8018D524; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_8018D568[]; -extern unsigned short D_8018D570[]; -extern unsigned short D_8018D578[]; -extern unsigned char D_801B8910[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801B8910 + param_2 * 0x40); - puVar3 = D_8018D568[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_8018D570[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_8018D578[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801B8908; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801B8908, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_8018D580[])(void); - -void func_8016BBA4(void *a0) { - D_8018D580[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801B8A44; - extern u8 D_801B8A45; - extern u8 D_801B8A46; - extern M2C_UNK D_801B8A48; - extern u8 D_801B8A49; - extern u8 D_801B8A4A; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801B8A44) = 0x20; - D_801B8A45 = 0x20; - D_801B8A46 = 0; - (*(u8 *)&D_801B8A48) = 0xc0; - D_801B8A49 = 0xc0; - D_801B8A4A = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801B8A44; -extern M2C_UNK D_801B8A48; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801B8A44, &D_801B8A48, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801B8A45; - extern u8 D_801B8A46; - extern u8 D_801B8A49; - extern u8 D_801B8A4A; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801B8A44); - if (*p1 != 0) *p1 -= 4; - if (D_801B8A45 != 0) D_801B8A45 -= 4; - if (D_801B8A46 != 0) D_801B8A46 -= 4; - p2 = &(*(u8 *)&D_801B8A48); - if (*p2 != 0) *p2 -= 4; - if (D_801B8A49 != 0) D_801B8A49 -= 4; - if (D_801B8A4A != 0) D_801B8A4A -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801B8A44), &(*(int *)&D_801B8A48), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801B89D0; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801B89D0); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_8018D590; - extern s32 D_8018D598; - extern s32 D_8018D5A0; - extern s32 D_8018D5A8; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_8018D590, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_8018D598, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_8018D5A0, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_8018D5A8, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_8018D5B0[])(void); - -void func_8016C14C(void *a0) { - D_8018D5B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801B8A4C[]; -extern u8 D_801B8A54[]; -extern u8 D_801B8A04[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801B8A4C, D_801B8A54, D_801B8A04); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801B8A60[]; - extern u8 D_801B8B20; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801B8A60[1] = 0xff; - D_801B8A60[2] = 0x10; - D_801B8A60[0] = 0x10; - D_801B8A60[6] = 0; - D_801B8A60[5] = 0; - D_801B8A60[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801B8A60, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801B8B20, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801B8A60); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8015AE2C", func_8016C998); - - -extern void (*D_8018D5B8[])(void); - -void func_8016CB84(void *a0) { - D_8018D5B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801B8B20[]; - - - Blk_8016CF04_8016CF04 *p = &D_801B8B20[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_8018D5D4[])(void); - -void func_8016D19C(void *a0) { - D_8018D5D4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_8018D5DC[])(void); - -void func_8016D428(void *a0) { - D_8018D5DC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_8018D644[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_8018D644[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_8018D5E8; -extern u8 D_8018D5F4; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018D5E8, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018D5F4); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8015AE2C", func_8016DC20); - - -extern void (*D_8018D678[])(void); - -void func_8016DEA4(void *a0) { - D_8018D678[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_8018D680[])(void); - -void func_8016DF20(void *a0) { - D_8018D680[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_8018D6D4[])(void); - -void func_8016E5B8(void *a0) { - D_8018D6D4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_8018D694[4]; - extern s32 D_8018D6B4; - extern s32 D_8018D6BC; - extern s32 D_8018D6C4; - extern s32 D_8018D6CC; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_8018D694[0], pp, &tmp); - RotTransSV(&D_8018D694[1], &prim.v[1], &tmp); - RotTransSV(&D_8018D694[2], &prim.v[2], &tmp); - RotTransSV(&D_8018D694[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_8018D6B4; - prim.f1 = D_8018D6BC; - prim.f2 = D_8018D6C4; - prim.f3 = D_8018D6CC; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_8018D714[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_8018D714[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_8018D708[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_8018D708[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_8018D6F8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_8018D6F8[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018D708[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_8018D708[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_8018D708[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_8018D724; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_8018D724; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_8018D79C[])(void); - -void func_8016F6E0(void *a0) { - D_8018D79C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_8018D7A4[])(void); - -void func_8016F798(void *a0) { - D_8018D7A4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_8018D7AC[])(void); - -void func_8016F834(void *a0) { - D_8018D7AC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_8018D7B4[])(void); - -void func_8016F8E4(void *a0) { - D_8018D7B4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_8018D7BC[])(void); - -void func_8016F9C4(void *a0) { - D_8018D7BC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_8018D7C4[])(void); - -void func_8016FA84(void *a0) { - D_8018D7C4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_8018D7D0[])(void); - -void func_8016FB7C(void *a0) { - D_8018D7D0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_8018D7DC[])(void); - -void func_8016FC90(void *a0) { - D_8018D7DC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_8018D7E8[])(void); - -void func_8016FDB4(void *a0) { - D_8018D7E8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_8018D7F8[])(void); - -void func_8016FF30(void *a0) { - D_8018D7F8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_8018D808[])(void); - -void func_8016FFDC(void *a0) { - D_8018D808[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_8018D810[])(void); - -void func_80170150(void *a0) { - D_8018D810[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_8018D818[])(void); - -void func_80170240(void *a0) { - D_8018D818[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_8018D820[])(void); - -void func_801702FC(void *a0) { - D_8018D820[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_8018D828[])(void); - -void func_801703E0(void *a0) { - D_8018D828[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_8018D830[])(void); - -void func_801704B0(void *a0) { - D_8018D830[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_8018D838[])(void); - -void func_80170548(void *a0) { - D_8018D838[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_8018D840[])(void); - -void func_801705F8(void *a0) { - D_8018D840[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_8018D848[])(void); - -void func_801706AC(void *a0) { - D_8018D848[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_8018D850[])(void); - -void func_80170748(void *a0) { - D_8018D850[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_8018D858[])(void); - -void func_80170810(void *a0) { - D_8018D858[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_8018D860[])(void); - -void func_80170AD8(void *a0) { - D_8018D860[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_8018D868[])(void); - -void func_80170BD8(void *a0) { - D_8018D868[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_8018D870[])(void); - -void func_80170C74(void *a0) { - D_8018D870[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8015AE2C", func_80170CF0); - - -extern void (*D_8018D878[])(void); - -void func_80170D68(void *a0) { - D_8018D878[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_8018D880[])(void); - -void func_80170E34(void *a0) { - D_8018D880[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_8018D888[])(void); - -void func_80170EFC(void *a0) { - D_8018D888[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_8018D890[])(void); - -void func_80170FB0(void *a0) { - D_8018D890[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_8018D898[])(void); - -void func_80171064(void *a0) { - D_8018D898[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_8018D8A0[])(void); - -void func_80171120(void *a0) { - D_8018D8A0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_8018D8A8[])(void); - -void func_801711C0(void *a0) { - D_8018D8A8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_8018D8B0[])(void); - -void func_80171260(void *a0) { - D_8018D8B0[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_8018D8B8[])(void); - -void func_801714E4(void *a0) { - D_8018D8B8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8015AE2C", func_80172C50); - - -extern void (*D_8018D8FC[])(void); - -void func_80172CA0(void *a0) { - D_8018D8FC[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_8018D8C0; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_8018D8C0); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_105/ov_SC03_105_jr_8016AB6C.c b/src/ov_SC03_105/ov_SC03_105_jr_8016AB6C.c new file mode 100644 index 000000000..cf395160e --- /dev/null +++ b/src/ov_SC03_105/ov_SC03_105_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018C880; +extern u8 D_8018C7F0; +extern u8 D_8018C7CC; +extern u8 D_8018C7A8; +extern u8 D_8018C85C; +extern u8 D_8018C838; +extern u8 D_8018C814; +extern u8 D_8018C784; +extern void func_80145934(void); +extern u8 D_8018C910; +extern u8 D_8018C8EC; +extern u8 D_8018C8C8; +extern u8 D_8018C8A4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018BD08[]; +extern unsigned char D_8018BD38[]; +extern unsigned char D_8018BD88[]; +extern unsigned char D_8018BDB8[]; +extern unsigned char D_8018BDE8[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018BE38[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018BF00[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018BF88[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018BF90; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801B8498; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801B849C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018BFC0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018C068[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018C08C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018C07C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018C0A0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018C0AC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018C0BC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018C0D4[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018C0C4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018C0E8[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018C104[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018C0F4; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018C118[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018C12C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018C140; +extern void (*D_8018C168[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018C148; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018C1B4[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018C1B8[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018C61C[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018C62C[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801B84D0; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018C654[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018C634; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018C644; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018C694[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018C69C[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018C668; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018C6A8[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018C678; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801B84D8; +extern s32 D_801B84E4; +extern s32 D_801B84E8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018C6E4[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018C6B8[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801B84E0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018C934[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018C754[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018C9D8[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018CB2C[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018C948; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018CB34[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018C958; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018C978; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_8018CB3C[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_8018CB64[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_8018CB70[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_8018C9E4[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_8018CC14; +extern void func_8015D380(s32 a0); +extern unsigned char D_8018BCF8[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_8018CC28[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_8018CC64[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_8018CCAC; +extern u16 D_8018CCAE; +extern u16 D_8018CCB0; +extern s32 D_8018CCB4; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_8018CCBC; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_8018C9C8; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_8018CD40[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_8018CDF0[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_8018CE20[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_8018CE84; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801B84F0[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_8018CEA8[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801B8548[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_8018CEF0[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_8018CEE0; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801B7AA8[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_8018CEF8[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_8018CF4C[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_8018CF14; +extern s16 D_8018CF48; +extern s16 D_8018CF46; +extern s16 D_8018CF44; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_8018CF58[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801B85A8; +extern u8 D_801B85A9; +extern u8 D_801B85AA; +extern u8 D_801B85AB; +extern u8 D_801B85AC; +extern u8 D_801B85AD; +extern u8 D_801B85AE; +extern u8 D_801B85AF; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_8018CF68[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801B85E8; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_8018CFAC[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_8018D028[]; +extern s32 D_8018D048[]; +extern u8 D_8018D0C4[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_8018D0E4[]; +extern u8 D_8018D104[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_8018D1A0[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_8018D21C[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801B7AB8; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_8018D228[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_8018D230[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_8018D2F8[])(void); +extern void func_80166618(void *a0); +extern void (*D_8018D308[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_8018D318[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_8018D324[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_8018D284[]; +extern u8 D_8018D298[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_8018D33C[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_8018D344[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_8018D34C[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_8018D354[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_8018D35C[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_8018D364[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_8018D36C[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_8018D420[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_8018D428[])(void); +extern void func_80169F00(void *a0); +extern char D_8018D3D8[]; +extern char D_8018D398[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_8018D460[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_8018D46C[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_8018D4B4[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_8018D474[]; + extern u8 D_8018D484[]; + extern u8 D_801B88B8[]; + extern u8 D_801B88E0[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_8018D474, D_801B88B8) + 3; + func_8001CE28(obj, D_801B88B8); + } else { + var_s3 = func_80024054(D_8018D484, D_801B88E0) + 9; + func_8001CE28(obj, D_801B88E0); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_8018D530[])(void); + +void func_8016B4BC(void *a0) { + D_8018D530[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801B8908; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801B8908); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_8018D524[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_8018D524; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_8018D568[]; +extern unsigned short D_8018D570[]; +extern unsigned short D_8018D578[]; +extern unsigned char D_801B8910[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801B8910 + param_2 * 0x40); + puVar3 = D_8018D568[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_8018D570[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_8018D578[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801B8908; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801B8908, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_8018D580[])(void); + +void func_8016BBA4(void *a0) { + D_8018D580[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801B8A44; + extern u8 D_801B8A45; + extern u8 D_801B8A46; + extern M2C_UNK D_801B8A48; + extern u8 D_801B8A49; + extern u8 D_801B8A4A; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801B8A44) = 0x20; + D_801B8A45 = 0x20; + D_801B8A46 = 0; + (*(u8 *)&D_801B8A48) = 0xc0; + D_801B8A49 = 0xc0; + D_801B8A4A = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801B8A44; +extern M2C_UNK D_801B8A48; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801B8A44, &D_801B8A48, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801B8A45; + extern u8 D_801B8A46; + extern u8 D_801B8A49; + extern u8 D_801B8A4A; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801B8A44); + if (*p1 != 0) *p1 -= 4; + if (D_801B8A45 != 0) D_801B8A45 -= 4; + if (D_801B8A46 != 0) D_801B8A46 -= 4; + p2 = &(*(u8 *)&D_801B8A48); + if (*p2 != 0) *p2 -= 4; + if (D_801B8A49 != 0) D_801B8A49 -= 4; + if (D_801B8A4A != 0) D_801B8A4A -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801B8A44), &(*(int *)&D_801B8A48), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801B89D0; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801B89D0); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_8018D590; + extern s32 D_8018D598; + extern s32 D_8018D5A0; + extern s32 D_8018D5A8; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_8018D590, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_8018D598, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_8018D5A0, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_8018D5A8, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_8018D5B0[])(void); + +void func_8016C14C(void *a0) { + D_8018D5B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801B8A4C[]; +extern u8 D_801B8A54[]; +extern u8 D_801B8A04[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801B8A4C, D_801B8A54, D_801B8A04); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801B8A60[]; + extern u8 D_801B8B20; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801B8A60[1] = 0xff; + D_801B8A60[2] = 0x10; + D_801B8A60[0] = 0x10; + D_801B8A60[6] = 0; + D_801B8A60[5] = 0; + D_801B8A60[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801B8A60, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801B8B20, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801B8A60); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8016AB6C", func_8016C998); + + +extern void (*D_8018D5B8[])(void); + +void func_8016CB84(void *a0) { + D_8018D5B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801B8B20[]; + + + Blk_8016CF04_8016CF04 *p = &D_801B8B20[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_8018D5D4[])(void); + +void func_8016D19C(void *a0) { + D_8018D5D4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_8018D5DC[])(void); + +void func_8016D428(void *a0) { + D_8018D5DC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018D644[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_8018D644[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_8018D5E8; +extern u8 D_8018D5F4; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018D5E8, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018D5F4); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8016AB6C", func_8016DC20); + + +extern void (*D_8018D678[])(void); + +void func_8016DEA4(void *a0) { + D_8018D678[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_8018D680[])(void); + +void func_8016DF20(void *a0) { + D_8018D680[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_8018D6D4[])(void); + +void func_8016E5B8(void *a0) { + D_8018D6D4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_8018D694[4]; + extern s32 D_8018D6B4; + extern s32 D_8018D6BC; + extern s32 D_8018D6C4; + extern s32 D_8018D6CC; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_8018D694[0], pp, &tmp); + RotTransSV(&D_8018D694[1], &prim.v[1], &tmp); + RotTransSV(&D_8018D694[2], &prim.v[2], &tmp); + RotTransSV(&D_8018D694[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_8018D6B4; + prim.f1 = D_8018D6BC; + prim.f2 = D_8018D6C4; + prim.f3 = D_8018D6CC; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_8018D714[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_8018D714[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_8018D708[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_8018D708[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_8018D6F8[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_8018D6F8[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018D708[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_8018D708[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_8018D708[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_8018D724; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_8018D724; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_8018D79C[])(void); + +void func_8016F6E0(void *a0) { + D_8018D79C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_8018D7A4[])(void); + +void func_8016F798(void *a0) { + D_8018D7A4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_8018D7AC[])(void); + +void func_8016F834(void *a0) { + D_8018D7AC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_8018D7B4[])(void); + +void func_8016F8E4(void *a0) { + D_8018D7B4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_8018D7BC[])(void); + +void func_8016F9C4(void *a0) { + D_8018D7BC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_8018D7C4[])(void); + +void func_8016FA84(void *a0) { + D_8018D7C4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_8018D7D0[])(void); + +void func_8016FB7C(void *a0) { + D_8018D7D0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_8018D7DC[])(void); + +void func_8016FC90(void *a0) { + D_8018D7DC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_8018D7E8[])(void); + +void func_8016FDB4(void *a0) { + D_8018D7E8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_8018D7F8[])(void); + +void func_8016FF30(void *a0) { + D_8018D7F8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_8018D808[])(void); + +void func_8016FFDC(void *a0) { + D_8018D808[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_8018D810[])(void); + +void func_80170150(void *a0) { + D_8018D810[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_8018D818[])(void); + +void func_80170240(void *a0) { + D_8018D818[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_8018D820[])(void); + +void func_801702FC(void *a0) { + D_8018D820[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_8018D828[])(void); + +void func_801703E0(void *a0) { + D_8018D828[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_8018D830[])(void); + +void func_801704B0(void *a0) { + D_8018D830[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_8018D838[])(void); + +void func_80170548(void *a0) { + D_8018D838[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_8018D840[])(void); + +void func_801705F8(void *a0) { + D_8018D840[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_8018D848[])(void); + +void func_801706AC(void *a0) { + D_8018D848[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_8018D850[])(void); + +void func_80170748(void *a0) { + D_8018D850[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_8018D858[])(void); + +void func_80170810(void *a0) { + D_8018D858[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_8018D860[])(void); + +void func_80170AD8(void *a0) { + D_8018D860[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_8018D868[])(void); + +void func_80170BD8(void *a0) { + D_8018D868[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_8018D870[])(void); + +void func_80170C74(void *a0) { + D_8018D870[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8016AB6C", func_80170CF0); + + +extern void (*D_8018D878[])(void); + +void func_80170D68(void *a0) { + D_8018D878[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_8018D880[])(void); + +void func_80170E34(void *a0) { + D_8018D880[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_8018D888[])(void); + +void func_80170EFC(void *a0) { + D_8018D888[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_8018D890[])(void); + +void func_80170FB0(void *a0) { + D_8018D890[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_8018D898[])(void); + +void func_80171064(void *a0) { + D_8018D898[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_8018D8A0[])(void); + +void func_80171120(void *a0) { + D_8018D8A0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_8018D8A8[])(void); + +void func_801711C0(void *a0) { + D_8018D8A8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_8018D8B0[])(void); + +void func_80171260(void *a0) { + D_8018D8B0[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_8018D8B8[])(void); + +void func_801714E4(void *a0) { + D_8018D8B8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8016AB6C", func_80172C50); + + +extern void (*D_8018D8FC[])(void); + +void func_80172CA0(void *a0) { + D_8018D8FC[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_8018D8C0; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_8018D8C0); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_108/ov_SC03_108_jr_8015AE2C.c b/src/ov_SC03_108/ov_SC03_108_jr_8015AE2C.c index 898a960ad..870cbb784 100644 --- a/src/ov_SC03_108/ov_SC03_108_jr_8015AE2C.c +++ b/src/ov_SC03_108/ov_SC03_108_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_80183E0C[])(void); void func_8016AB30(void *a0) { D_80183E0C[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80183E88[])(void); - -void func_8016B4BC(void *a0) { - D_80183E88[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801A0BF8; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801A0BF8); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80183E7C[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80183E7C; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80183EC0[]; -extern unsigned short D_80183EC8[]; -extern unsigned short D_80183ED0[]; -extern unsigned char D_801A0C00[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801A0C00 + param_2 * 0x40); - puVar3 = D_80183EC0[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80183EC8[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80183ED0[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801A0BF8; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801A0BF8, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80183ED8[])(void); - -void func_8016BBA4(void *a0) { - D_80183ED8[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801A0D34; - extern u8 D_801A0D35; - extern u8 D_801A0D36; - extern M2C_UNK D_801A0D38; - extern u8 D_801A0D39; - extern u8 D_801A0D3A; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801A0D34) = 0x20; - D_801A0D35 = 0x20; - D_801A0D36 = 0; - (*(u8 *)&D_801A0D38) = 0xc0; - D_801A0D39 = 0xc0; - D_801A0D3A = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801A0D34; -extern M2C_UNK D_801A0D38; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801A0D34, &D_801A0D38, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801A0D35; - extern u8 D_801A0D36; - extern u8 D_801A0D39; - extern u8 D_801A0D3A; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801A0D34); - if (*p1 != 0) *p1 -= 4; - if (D_801A0D35 != 0) D_801A0D35 -= 4; - if (D_801A0D36 != 0) D_801A0D36 -= 4; - p2 = &(*(u8 *)&D_801A0D38); - if (*p2 != 0) *p2 -= 4; - if (D_801A0D39 != 0) D_801A0D39 -= 4; - if (D_801A0D3A != 0) D_801A0D3A -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801A0D34), &(*(int *)&D_801A0D38), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801A0CC0; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801A0CC0); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80183EE8; - extern s32 D_80183EF0; - extern s32 D_80183EF8; - extern s32 D_80183F00; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80183EE8, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80183EF0, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80183EF8, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80183F00, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80183F08[])(void); - -void func_8016C14C(void *a0) { - D_80183F08[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801A0D3C[]; -extern u8 D_801A0D44[]; -extern u8 D_801A0CF4[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801A0D3C, D_801A0D44, D_801A0CF4); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801A0D50[]; - extern u8 D_801A0E10; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801A0D50[1] = 0xff; - D_801A0D50[2] = 0x10; - D_801A0D50[0] = 0x10; - D_801A0D50[6] = 0; - D_801A0D50[5] = 0; - D_801A0D50[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801A0D50, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801A0E10, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801A0D50); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8015AE2C", func_8016C998); - - -extern void (*D_80183F10[])(void); - -void func_8016CB84(void *a0) { - D_80183F10[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801A0E10[]; - - - Blk_8016CF04_8016CF04 *p = &D_801A0E10[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80183F2C[])(void); - -void func_8016D19C(void *a0) { - D_80183F2C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80183F34[])(void); - -void func_8016D428(void *a0) { - D_80183F34[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80183F9C[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80183F9C[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80183F40; -extern u8 D_80183F4C; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80183F40, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80183F4C); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80183FD0[])(void); - -void func_8016DEA4(void *a0) { - D_80183FD0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80183FD8[])(void); - -void func_8016DF20(void *a0) { - D_80183FD8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_8018402C[])(void); - -void func_8016E5B8(void *a0) { - D_8018402C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80183FEC[4]; - extern s32 D_8018400C; - extern s32 D_80184014; - extern s32 D_8018401C; - extern s32 D_80184024; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80183FEC[0], pp, &tmp); - RotTransSV(&D_80183FEC[1], &prim.v[1], &tmp); - RotTransSV(&D_80183FEC[2], &prim.v[2], &tmp); - RotTransSV(&D_80183FEC[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_8018400C; - prim.f1 = D_80184014; - prim.f2 = D_8018401C; - prim.f3 = D_80184024; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_8018406C[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_8018406C[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80184060[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80184060[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80184050[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80184050[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80184060[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80184060[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80184060[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_8018407C; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_8018407C; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_801840F4[])(void); - -void func_8016F6E0(void *a0) { - D_801840F4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_801840FC[])(void); - -void func_8016F798(void *a0) { - D_801840FC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80184104[])(void); - -void func_8016F834(void *a0) { - D_80184104[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_8018410C[])(void); - -void func_8016F8E4(void *a0) { - D_8018410C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80184114[])(void); - -void func_8016F9C4(void *a0) { - D_80184114[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_8018411C[])(void); - -void func_8016FA84(void *a0) { - D_8018411C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80184128[])(void); - -void func_8016FB7C(void *a0) { - D_80184128[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80184134[])(void); - -void func_8016FC90(void *a0) { - D_80184134[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80184140[])(void); - -void func_8016FDB4(void *a0) { - D_80184140[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80184150[])(void); - -void func_8016FF30(void *a0) { - D_80184150[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80184160[])(void); - -void func_8016FFDC(void *a0) { - D_80184160[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80184168[])(void); - -void func_80170150(void *a0) { - D_80184168[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80184170[])(void); - -void func_80170240(void *a0) { - D_80184170[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80184178[])(void); - -void func_801702FC(void *a0) { - D_80184178[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80184180[])(void); - -void func_801703E0(void *a0) { - D_80184180[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80184188[])(void); - -void func_801704B0(void *a0) { - D_80184188[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80184190[])(void); - -void func_80170548(void *a0) { - D_80184190[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80184198[])(void); - -void func_801705F8(void *a0) { - D_80184198[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_801841A0[])(void); - -void func_801706AC(void *a0) { - D_801841A0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_801841A8[])(void); - -void func_80170748(void *a0) { - D_801841A8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_801841B0[])(void); - -void func_80170810(void *a0) { - D_801841B0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_801841B8[])(void); - -void func_80170AD8(void *a0) { - D_801841B8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_801841C0[])(void); - -void func_80170BD8(void *a0) { - D_801841C0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_801841C8[])(void); - -void func_80170C74(void *a0) { - D_801841C8[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8015AE2C", func_80170CF0); - - -extern void (*D_801841D0[])(void); - -void func_80170D68(void *a0) { - D_801841D0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_801841D8[])(void); - -void func_80170E34(void *a0) { - D_801841D8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_801841E0[])(void); - -void func_80170EFC(void *a0) { - D_801841E0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_801841E8[])(void); - -void func_80170FB0(void *a0) { - D_801841E8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_801841F0[])(void); - -void func_80171064(void *a0) { - D_801841F0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_801841F8[])(void); - -void func_80171120(void *a0) { - D_801841F8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80184200[])(void); - -void func_801711C0(void *a0) { - D_80184200[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80184208[])(void); - -void func_80171260(void *a0) { - D_80184208[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80184210[])(void); - -void func_801714E4(void *a0) { - D_80184210[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8015AE2C", func_80172C50); - - -extern void (*D_80184254[])(void); - -void func_80172CA0(void *a0) { - D_80184254[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80184218; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80184218); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_108/ov_SC03_108_jr_8016AB6C.c b/src/ov_SC03_108/ov_SC03_108_jr_8016AB6C.c new file mode 100644 index 000000000..7d89b82df --- /dev/null +++ b/src/ov_SC03_108/ov_SC03_108_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801831D8; +extern u8 D_80183148; +extern u8 D_80183124; +extern u8 D_80183100; +extern u8 D_801831B4; +extern u8 D_80183190; +extern u8 D_8018316C; +extern u8 D_801830DC; +extern void func_80145934(void); +extern u8 D_80183268; +extern u8 D_80183244; +extern u8 D_80183220; +extern u8 D_801831FC; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80182660[]; +extern unsigned char D_80182690[]; +extern unsigned char D_801826E0[]; +extern unsigned char D_80182710[]; +extern unsigned char D_80182740[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80182790[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80182858[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801828E0[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801828E8; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801A0788; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801A078C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80182918; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801829C0[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801829E4[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801829D4; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801829F8[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80182A04[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80182A14[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80182A2C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80182A1C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80182A40[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80182A5C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80182A4C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80182A70[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80182A84[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80182A98; +extern void (*D_80182AC0[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80182AA0; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80182B0C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80182B10[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80182F74[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80182F84[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801A07C0; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80182FAC[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80182F8C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80182F9C; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80182FEC[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80182FF4[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80182FC0; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80183000[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80182FD0; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801A07C8; +extern s32 D_801A07D4; +extern s32 D_801A07D8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018303C[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80183010[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801A07D0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018328C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_801830AC[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80183330[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80183484[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_801832A0; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018348C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_801832B0; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801832D0; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80183494[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_801834BC[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_801834C8[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_8018333C[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_8018356C; +extern void func_8015D380(s32 a0); +extern unsigned char D_80182650[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80183580[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_801835BC[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80183604; +extern u16 D_80183606; +extern u16 D_80183608; +extern s32 D_8018360C; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80183614; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80183320; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80183698[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80183748[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80183778[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_801837DC; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801A07E0[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80183800[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801A0838[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80183848[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80183838; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_8019FFB0[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80183850[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_801838A4[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_8018386C; +extern s16 D_801838A0; +extern s16 D_8018389E; +extern s16 D_8018389C; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_801838B0[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801A0898; +extern u8 D_801A0899; +extern u8 D_801A089A; +extern u8 D_801A089B; +extern u8 D_801A089C; +extern u8 D_801A089D; +extern u8 D_801A089E; +extern u8 D_801A089F; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_801838C0[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801A08D8; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80183904[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80183980[]; +extern s32 D_801839A0[]; +extern u8 D_80183A1C[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80183A3C[]; +extern u8 D_80183A5C[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80183AF8[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80183B74[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_8019FFC0; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80183B80[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80183B88[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80183C50[])(void); +extern void func_80166618(void *a0); +extern void (*D_80183C60[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80183C70[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80183C7C[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80183BDC[]; +extern u8 D_80183BF0[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80183C94[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80183C9C[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80183CA4[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80183CAC[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80183CB4[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80183CBC[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80183CC4[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80183D78[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80183D80[])(void); +extern void func_80169F00(void *a0); +extern char D_80183D30[]; +extern char D_80183CF0[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80183DB8[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80183DC4[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80183E0C[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80183DCC[]; + extern u8 D_80183DDC[]; + extern u8 D_801A0BA8[]; + extern u8 D_801A0BD0[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80183DCC, D_801A0BA8) + 3; + func_8001CE28(obj, D_801A0BA8); + } else { + var_s3 = func_80024054(D_80183DDC, D_801A0BD0) + 9; + func_8001CE28(obj, D_801A0BD0); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80183E88[])(void); + +void func_8016B4BC(void *a0) { + D_80183E88[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801A0BF8; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801A0BF8); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80183E7C[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80183E7C; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80183EC0[]; +extern unsigned short D_80183EC8[]; +extern unsigned short D_80183ED0[]; +extern unsigned char D_801A0C00[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801A0C00 + param_2 * 0x40); + puVar3 = D_80183EC0[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80183EC8[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80183ED0[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801A0BF8; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801A0BF8, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80183ED8[])(void); + +void func_8016BBA4(void *a0) { + D_80183ED8[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801A0D34; + extern u8 D_801A0D35; + extern u8 D_801A0D36; + extern M2C_UNK D_801A0D38; + extern u8 D_801A0D39; + extern u8 D_801A0D3A; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801A0D34) = 0x20; + D_801A0D35 = 0x20; + D_801A0D36 = 0; + (*(u8 *)&D_801A0D38) = 0xc0; + D_801A0D39 = 0xc0; + D_801A0D3A = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801A0D34; +extern M2C_UNK D_801A0D38; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801A0D34, &D_801A0D38, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801A0D35; + extern u8 D_801A0D36; + extern u8 D_801A0D39; + extern u8 D_801A0D3A; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801A0D34); + if (*p1 != 0) *p1 -= 4; + if (D_801A0D35 != 0) D_801A0D35 -= 4; + if (D_801A0D36 != 0) D_801A0D36 -= 4; + p2 = &(*(u8 *)&D_801A0D38); + if (*p2 != 0) *p2 -= 4; + if (D_801A0D39 != 0) D_801A0D39 -= 4; + if (D_801A0D3A != 0) D_801A0D3A -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801A0D34), &(*(int *)&D_801A0D38), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801A0CC0; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801A0CC0); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80183EE8; + extern s32 D_80183EF0; + extern s32 D_80183EF8; + extern s32 D_80183F00; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80183EE8, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80183EF0, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80183EF8, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80183F00, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80183F08[])(void); + +void func_8016C14C(void *a0) { + D_80183F08[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801A0D3C[]; +extern u8 D_801A0D44[]; +extern u8 D_801A0CF4[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801A0D3C, D_801A0D44, D_801A0CF4); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801A0D50[]; + extern u8 D_801A0E10; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801A0D50[1] = 0xff; + D_801A0D50[2] = 0x10; + D_801A0D50[0] = 0x10; + D_801A0D50[6] = 0; + D_801A0D50[5] = 0; + D_801A0D50[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801A0D50, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801A0E10, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801A0D50); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8016AB6C", func_8016C998); + + +extern void (*D_80183F10[])(void); + +void func_8016CB84(void *a0) { + D_80183F10[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801A0E10[]; + + + Blk_8016CF04_8016CF04 *p = &D_801A0E10[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80183F2C[])(void); + +void func_8016D19C(void *a0) { + D_80183F2C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80183F34[])(void); + +void func_8016D428(void *a0) { + D_80183F34[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80183F9C[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80183F9C[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80183F40; +extern u8 D_80183F4C; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80183F40, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80183F4C); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80183FD0[])(void); + +void func_8016DEA4(void *a0) { + D_80183FD0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80183FD8[])(void); + +void func_8016DF20(void *a0) { + D_80183FD8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_8018402C[])(void); + +void func_8016E5B8(void *a0) { + D_8018402C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80183FEC[4]; + extern s32 D_8018400C; + extern s32 D_80184014; + extern s32 D_8018401C; + extern s32 D_80184024; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80183FEC[0], pp, &tmp); + RotTransSV(&D_80183FEC[1], &prim.v[1], &tmp); + RotTransSV(&D_80183FEC[2], &prim.v[2], &tmp); + RotTransSV(&D_80183FEC[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_8018400C; + prim.f1 = D_80184014; + prim.f2 = D_8018401C; + prim.f3 = D_80184024; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_8018406C[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_8018406C[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80184060[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80184060[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80184050[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80184050[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80184060[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80184060[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80184060[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_8018407C; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_8018407C; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_801840F4[])(void); + +void func_8016F6E0(void *a0) { + D_801840F4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_801840FC[])(void); + +void func_8016F798(void *a0) { + D_801840FC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80184104[])(void); + +void func_8016F834(void *a0) { + D_80184104[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_8018410C[])(void); + +void func_8016F8E4(void *a0) { + D_8018410C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80184114[])(void); + +void func_8016F9C4(void *a0) { + D_80184114[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_8018411C[])(void); + +void func_8016FA84(void *a0) { + D_8018411C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80184128[])(void); + +void func_8016FB7C(void *a0) { + D_80184128[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80184134[])(void); + +void func_8016FC90(void *a0) { + D_80184134[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80184140[])(void); + +void func_8016FDB4(void *a0) { + D_80184140[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80184150[])(void); + +void func_8016FF30(void *a0) { + D_80184150[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80184160[])(void); + +void func_8016FFDC(void *a0) { + D_80184160[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80184168[])(void); + +void func_80170150(void *a0) { + D_80184168[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80184170[])(void); + +void func_80170240(void *a0) { + D_80184170[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80184178[])(void); + +void func_801702FC(void *a0) { + D_80184178[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80184180[])(void); + +void func_801703E0(void *a0) { + D_80184180[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80184188[])(void); + +void func_801704B0(void *a0) { + D_80184188[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80184190[])(void); + +void func_80170548(void *a0) { + D_80184190[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80184198[])(void); + +void func_801705F8(void *a0) { + D_80184198[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_801841A0[])(void); + +void func_801706AC(void *a0) { + D_801841A0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_801841A8[])(void); + +void func_80170748(void *a0) { + D_801841A8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_801841B0[])(void); + +void func_80170810(void *a0) { + D_801841B0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_801841B8[])(void); + +void func_80170AD8(void *a0) { + D_801841B8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_801841C0[])(void); + +void func_80170BD8(void *a0) { + D_801841C0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_801841C8[])(void); + +void func_80170C74(void *a0) { + D_801841C8[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8016AB6C", func_80170CF0); + + +extern void (*D_801841D0[])(void); + +void func_80170D68(void *a0) { + D_801841D0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_801841D8[])(void); + +void func_80170E34(void *a0) { + D_801841D8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_801841E0[])(void); + +void func_80170EFC(void *a0) { + D_801841E0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_801841E8[])(void); + +void func_80170FB0(void *a0) { + D_801841E8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_801841F0[])(void); + +void func_80171064(void *a0) { + D_801841F0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_801841F8[])(void); + +void func_80171120(void *a0) { + D_801841F8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80184200[])(void); + +void func_801711C0(void *a0) { + D_80184200[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80184208[])(void); + +void func_80171260(void *a0) { + D_80184208[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80184210[])(void); + +void func_801714E4(void *a0) { + D_80184210[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8016AB6C", func_80172C50); + + +extern void (*D_80184254[])(void); + +void func_80172CA0(void *a0) { + D_80184254[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80184218; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80184218); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_109/ov_SC03_109_jr_8015AE2C.c b/src/ov_SC03_109/ov_SC03_109_jr_8015AE2C.c index d64dbd763..d87589976 100644 --- a/src/ov_SC03_109/ov_SC03_109_jr_8015AE2C.c +++ b/src/ov_SC03_109/ov_SC03_109_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_801814B8[])(void); void func_8016AB30(void *a0) { D_801814B8[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80181534[])(void); - -void func_8016B4BC(void *a0) { - D_80181534[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_80199608; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_80199608); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80181528[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80181528; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_8018156C[]; -extern unsigned short D_80181574[]; -extern unsigned short D_8018157C[]; -extern unsigned char D_80199610[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_80199610 + param_2 * 0x40); - puVar3 = D_8018156C[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80181574[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_8018157C[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_80199608; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_80199608, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80181584[])(void); - -void func_8016BBA4(void *a0) { - D_80181584[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_80199744; - extern u8 D_80199745; - extern u8 D_80199746; - extern M2C_UNK D_80199748; - extern u8 D_80199749; - extern u8 D_8019974A; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_80199744) = 0x20; - D_80199745 = 0x20; - D_80199746 = 0; - (*(u8 *)&D_80199748) = 0xc0; - D_80199749 = 0xc0; - D_8019974A = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_80199744; -extern M2C_UNK D_80199748; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_80199744, &D_80199748, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_80199745; - extern u8 D_80199746; - extern u8 D_80199749; - extern u8 D_8019974A; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_80199744); - if (*p1 != 0) *p1 -= 4; - if (D_80199745 != 0) D_80199745 -= 4; - if (D_80199746 != 0) D_80199746 -= 4; - p2 = &(*(u8 *)&D_80199748); - if (*p2 != 0) *p2 -= 4; - if (D_80199749 != 0) D_80199749 -= 4; - if (D_8019974A != 0) D_8019974A -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_80199744), &(*(int *)&D_80199748), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801996D0; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801996D0); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80181594; - extern s32 D_8018159C; - extern s32 D_801815A4; - extern s32 D_801815AC; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80181594, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_8018159C, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_801815A4, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_801815AC, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_801815B4[])(void); - -void func_8016C14C(void *a0) { - D_801815B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_8019974C[]; -extern u8 D_80199754[]; -extern u8 D_80199704[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_8019974C, D_80199754, D_80199704); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_80199760[]; - extern u8 D_80199820; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_80199760[1] = 0xff; - D_80199760[2] = 0x10; - D_80199760[0] = 0x10; - D_80199760[6] = 0; - D_80199760[5] = 0; - D_80199760[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_80199760, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_80199820, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_80199760); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8015AE2C", func_8016C998); - - -extern void (*D_801815BC[])(void); - -void func_8016CB84(void *a0) { - D_801815BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_80199820[]; - - - Blk_8016CF04_8016CF04 *p = &D_80199820[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_801815D8[])(void); - -void func_8016D19C(void *a0) { - D_801815D8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_801815E0[])(void); - -void func_8016D428(void *a0) { - D_801815E0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80181648[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80181648[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_801815EC; -extern u8 D_801815F8; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801815EC, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801815F8); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8015AE2C", func_8016DC20); - - -extern void (*D_8018167C[])(void); - -void func_8016DEA4(void *a0) { - D_8018167C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80181684[])(void); - -void func_8016DF20(void *a0) { - D_80181684[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_801816D8[])(void); - -void func_8016E5B8(void *a0) { - D_801816D8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80181698[4]; - extern s32 D_801816B8; - extern s32 D_801816C0; - extern s32 D_801816C8; - extern s32 D_801816D0; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80181698[0], pp, &tmp); - RotTransSV(&D_80181698[1], &prim.v[1], &tmp); - RotTransSV(&D_80181698[2], &prim.v[2], &tmp); - RotTransSV(&D_80181698[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_801816B8; - prim.f1 = D_801816C0; - prim.f2 = D_801816C8; - prim.f3 = D_801816D0; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80181718[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80181718[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_8018170C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_8018170C[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_801816FC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_801816FC[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018170C[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_8018170C[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_8018170C[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80181728; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80181728; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_801817A0[])(void); - -void func_8016F6E0(void *a0) { - D_801817A0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_801817A8[])(void); - -void func_8016F798(void *a0) { - D_801817A8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_801817B0[])(void); - -void func_8016F834(void *a0) { - D_801817B0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_801817B8[])(void); - -void func_8016F8E4(void *a0) { - D_801817B8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_801817C0[])(void); - -void func_8016F9C4(void *a0) { - D_801817C0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_801817C8[])(void); - -void func_8016FA84(void *a0) { - D_801817C8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_801817D4[])(void); - -void func_8016FB7C(void *a0) { - D_801817D4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_801817E0[])(void); - -void func_8016FC90(void *a0) { - D_801817E0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_801817EC[])(void); - -void func_8016FDB4(void *a0) { - D_801817EC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_801817FC[])(void); - -void func_8016FF30(void *a0) { - D_801817FC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_8018180C[])(void); - -void func_8016FFDC(void *a0) { - D_8018180C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80181814[])(void); - -void func_80170150(void *a0) { - D_80181814[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_8018181C[])(void); - -void func_80170240(void *a0) { - D_8018181C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80181824[])(void); - -void func_801702FC(void *a0) { - D_80181824[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_8018182C[])(void); - -void func_801703E0(void *a0) { - D_8018182C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80181834[])(void); - -void func_801704B0(void *a0) { - D_80181834[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_8018183C[])(void); - -void func_80170548(void *a0) { - D_8018183C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80181844[])(void); - -void func_801705F8(void *a0) { - D_80181844[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_8018184C[])(void); - -void func_801706AC(void *a0) { - D_8018184C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80181854[])(void); - -void func_80170748(void *a0) { - D_80181854[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_8018185C[])(void); - -void func_80170810(void *a0) { - D_8018185C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80181864[])(void); - -void func_80170AD8(void *a0) { - D_80181864[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_8018186C[])(void); - -void func_80170BD8(void *a0) { - D_8018186C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80181874[])(void); - -void func_80170C74(void *a0) { - D_80181874[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8015AE2C", func_80170CF0); - - -extern void (*D_8018187C[])(void); - -void func_80170D68(void *a0) { - D_8018187C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80181884[])(void); - -void func_80170E34(void *a0) { - D_80181884[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_8018188C[])(void); - -void func_80170EFC(void *a0) { - D_8018188C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80181894[])(void); - -void func_80170FB0(void *a0) { - D_80181894[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_8018189C[])(void); - -void func_80171064(void *a0) { - D_8018189C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_801818A4[])(void); - -void func_80171120(void *a0) { - D_801818A4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_801818AC[])(void); - -void func_801711C0(void *a0) { - D_801818AC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_801818B4[])(void); - -void func_80171260(void *a0) { - D_801818B4[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_801818BC[])(void); - -void func_801714E4(void *a0) { - D_801818BC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8015AE2C", func_80172C50); - - -extern void (*D_80181900[])(void); - -void func_80172CA0(void *a0) { - D_80181900[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_801818C4; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_801818C4); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_109/ov_SC03_109_jr_8016AB6C.c b/src/ov_SC03_109/ov_SC03_109_jr_8016AB6C.c new file mode 100644 index 000000000..2871042fb --- /dev/null +++ b/src/ov_SC03_109/ov_SC03_109_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80180884; +extern u8 D_801807F4; +extern u8 D_801807D0; +extern u8 D_801807AC; +extern u8 D_80180860; +extern u8 D_8018083C; +extern u8 D_80180818; +extern u8 D_80180788; +extern void func_80145934(void); +extern u8 D_80180914; +extern u8 D_801808F0; +extern u8 D_801808CC; +extern u8 D_801808A8; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8017FD0C[]; +extern unsigned char D_8017FD3C[]; +extern unsigned char D_8017FD8C[]; +extern unsigned char D_8017FDBC[]; +extern unsigned char D_8017FDEC[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8017FE3C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8017FF04[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8017FF8C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8017FF94; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_80199198; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019919C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8017FFC4; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018006C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80180090[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80180080; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801800A4[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801800B0[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801800C0[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801800D8[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801800C8; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801800EC[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80180108[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801800F8; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018011C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80180130[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80180144; +extern void (*D_8018016C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018014C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801801B8[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801801BC[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80180620[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80180630[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801991D0; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80180658[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80180638; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80180648; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80180698[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801806A0[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018066C; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801806AC[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018067C; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801991D8; +extern s32 D_801991E4; +extern s32 D_801991E8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801806E8[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801806BC[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801991E0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80180938[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80180758[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_801809DC[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80180B30[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018094C; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80180B38[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018095C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018097C; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80180B40[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80180B68[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80180B74[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_801809E8[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80180C18; +extern void func_8015D380(s32 a0); +extern unsigned char D_8017FCFC[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80180C2C[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80180C68[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80180CB0; +extern u16 D_80180CB2; +extern u16 D_80180CB4; +extern s32 D_80180CB8; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80180CC0; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_801809CC; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80180D44[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80180DF4[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80180E24[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80180E88; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801991F0[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80180EAC[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_80199248[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80180EF4[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80180EE4; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_80198AC0[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80180EFC[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80180F50[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80180F18; +extern s16 D_80180F4C; +extern s16 D_80180F4A; +extern s16 D_80180F48; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80180F5C[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801992A8; +extern u8 D_801992A9; +extern u8 D_801992AA; +extern u8 D_801992AB; +extern u8 D_801992AC; +extern u8 D_801992AD; +extern u8 D_801992AE; +extern u8 D_801992AF; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80180F6C[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801992E8; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80180FB0[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_8018102C[]; +extern s32 D_8018104C[]; +extern u8 D_801810C8[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_801810E8[]; +extern u8 D_80181108[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_801811A4[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80181220[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_80198AD0; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_8018122C[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80181234[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_801812FC[])(void); +extern void func_80166618(void *a0); +extern void (*D_8018130C[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_8018131C[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80181328[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80181288[]; +extern u8 D_8018129C[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80181340[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80181348[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80181350[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80181358[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80181360[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80181368[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80181370[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80181424[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_8018142C[])(void); +extern void func_80169F00(void *a0); +extern char D_801813DC[]; +extern char D_8018139C[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80181464[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80181470[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_801814B8[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80181478[]; + extern u8 D_80181488[]; + extern u8 D_801995B8[]; + extern u8 D_801995E0[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80181478, D_801995B8) + 3; + func_8001CE28(obj, D_801995B8); + } else { + var_s3 = func_80024054(D_80181488, D_801995E0) + 9; + func_8001CE28(obj, D_801995E0); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80181534[])(void); + +void func_8016B4BC(void *a0) { + D_80181534[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_80199608; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_80199608); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80181528[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80181528; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_8018156C[]; +extern unsigned short D_80181574[]; +extern unsigned short D_8018157C[]; +extern unsigned char D_80199610[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_80199610 + param_2 * 0x40); + puVar3 = D_8018156C[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80181574[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_8018157C[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_80199608; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_80199608, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80181584[])(void); + +void func_8016BBA4(void *a0) { + D_80181584[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_80199744; + extern u8 D_80199745; + extern u8 D_80199746; + extern M2C_UNK D_80199748; + extern u8 D_80199749; + extern u8 D_8019974A; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_80199744) = 0x20; + D_80199745 = 0x20; + D_80199746 = 0; + (*(u8 *)&D_80199748) = 0xc0; + D_80199749 = 0xc0; + D_8019974A = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_80199744; +extern M2C_UNK D_80199748; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_80199744, &D_80199748, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_80199745; + extern u8 D_80199746; + extern u8 D_80199749; + extern u8 D_8019974A; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_80199744); + if (*p1 != 0) *p1 -= 4; + if (D_80199745 != 0) D_80199745 -= 4; + if (D_80199746 != 0) D_80199746 -= 4; + p2 = &(*(u8 *)&D_80199748); + if (*p2 != 0) *p2 -= 4; + if (D_80199749 != 0) D_80199749 -= 4; + if (D_8019974A != 0) D_8019974A -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_80199744), &(*(int *)&D_80199748), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801996D0; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801996D0); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80181594; + extern s32 D_8018159C; + extern s32 D_801815A4; + extern s32 D_801815AC; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80181594, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_8018159C, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_801815A4, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_801815AC, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_801815B4[])(void); + +void func_8016C14C(void *a0) { + D_801815B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_8019974C[]; +extern u8 D_80199754[]; +extern u8 D_80199704[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_8019974C, D_80199754, D_80199704); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_80199760[]; + extern u8 D_80199820; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_80199760[1] = 0xff; + D_80199760[2] = 0x10; + D_80199760[0] = 0x10; + D_80199760[6] = 0; + D_80199760[5] = 0; + D_80199760[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_80199760, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_80199820, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_80199760); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8016AB6C", func_8016C998); + + +extern void (*D_801815BC[])(void); + +void func_8016CB84(void *a0) { + D_801815BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_80199820[]; + + + Blk_8016CF04_8016CF04 *p = &D_80199820[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_801815D8[])(void); + +void func_8016D19C(void *a0) { + D_801815D8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_801815E0[])(void); + +void func_8016D428(void *a0) { + D_801815E0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80181648[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80181648[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_801815EC; +extern u8 D_801815F8; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801815EC, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801815F8); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8016AB6C", func_8016DC20); + + +extern void (*D_8018167C[])(void); + +void func_8016DEA4(void *a0) { + D_8018167C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80181684[])(void); + +void func_8016DF20(void *a0) { + D_80181684[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_801816D8[])(void); + +void func_8016E5B8(void *a0) { + D_801816D8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80181698[4]; + extern s32 D_801816B8; + extern s32 D_801816C0; + extern s32 D_801816C8; + extern s32 D_801816D0; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80181698[0], pp, &tmp); + RotTransSV(&D_80181698[1], &prim.v[1], &tmp); + RotTransSV(&D_80181698[2], &prim.v[2], &tmp); + RotTransSV(&D_80181698[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_801816B8; + prim.f1 = D_801816C0; + prim.f2 = D_801816C8; + prim.f3 = D_801816D0; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80181718[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80181718[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_8018170C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_8018170C[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_801816FC[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_801816FC[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018170C[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_8018170C[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_8018170C[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80181728; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80181728; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_801817A0[])(void); + +void func_8016F6E0(void *a0) { + D_801817A0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_801817A8[])(void); + +void func_8016F798(void *a0) { + D_801817A8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_801817B0[])(void); + +void func_8016F834(void *a0) { + D_801817B0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_801817B8[])(void); + +void func_8016F8E4(void *a0) { + D_801817B8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_801817C0[])(void); + +void func_8016F9C4(void *a0) { + D_801817C0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_801817C8[])(void); + +void func_8016FA84(void *a0) { + D_801817C8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_801817D4[])(void); + +void func_8016FB7C(void *a0) { + D_801817D4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_801817E0[])(void); + +void func_8016FC90(void *a0) { + D_801817E0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_801817EC[])(void); + +void func_8016FDB4(void *a0) { + D_801817EC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_801817FC[])(void); + +void func_8016FF30(void *a0) { + D_801817FC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_8018180C[])(void); + +void func_8016FFDC(void *a0) { + D_8018180C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80181814[])(void); + +void func_80170150(void *a0) { + D_80181814[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_8018181C[])(void); + +void func_80170240(void *a0) { + D_8018181C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80181824[])(void); + +void func_801702FC(void *a0) { + D_80181824[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_8018182C[])(void); + +void func_801703E0(void *a0) { + D_8018182C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80181834[])(void); + +void func_801704B0(void *a0) { + D_80181834[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_8018183C[])(void); + +void func_80170548(void *a0) { + D_8018183C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80181844[])(void); + +void func_801705F8(void *a0) { + D_80181844[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_8018184C[])(void); + +void func_801706AC(void *a0) { + D_8018184C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80181854[])(void); + +void func_80170748(void *a0) { + D_80181854[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_8018185C[])(void); + +void func_80170810(void *a0) { + D_8018185C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80181864[])(void); + +void func_80170AD8(void *a0) { + D_80181864[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_8018186C[])(void); + +void func_80170BD8(void *a0) { + D_8018186C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80181874[])(void); + +void func_80170C74(void *a0) { + D_80181874[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8016AB6C", func_80170CF0); + + +extern void (*D_8018187C[])(void); + +void func_80170D68(void *a0) { + D_8018187C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80181884[])(void); + +void func_80170E34(void *a0) { + D_80181884[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_8018188C[])(void); + +void func_80170EFC(void *a0) { + D_8018188C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80181894[])(void); + +void func_80170FB0(void *a0) { + D_80181894[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_8018189C[])(void); + +void func_80171064(void *a0) { + D_8018189C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_801818A4[])(void); + +void func_80171120(void *a0) { + D_801818A4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_801818AC[])(void); + +void func_801711C0(void *a0) { + D_801818AC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_801818B4[])(void); + +void func_80171260(void *a0) { + D_801818B4[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_801818BC[])(void); + +void func_801714E4(void *a0) { + D_801818BC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8016AB6C", func_80172C50); + + +extern void (*D_80181900[])(void); + +void func_80172CA0(void *a0) { + D_80181900[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_801818C4; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_801818C4); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_110/ov_SC03_110_jr_8015AE2C.c b/src/ov_SC03_110/ov_SC03_110_jr_8015AE2C.c index 2d3cebc54..5b03d40b4 100644 --- a/src/ov_SC03_110/ov_SC03_110_jr_8015AE2C.c +++ b/src/ov_SC03_110/ov_SC03_110_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_80184ED8[])(void); void func_8016AB30(void *a0) { D_80184ED8[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80184F54[])(void); - -void func_8016B4BC(void *a0) { - D_80184F54[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801A13B0; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801A13B0); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80184F48[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80184F48; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80184F8C[]; -extern unsigned short D_80184F94[]; -extern unsigned short D_80184F9C[]; -extern unsigned char D_801A13B8[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801A13B8 + param_2 * 0x40); - puVar3 = D_80184F8C[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80184F94[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80184F9C[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801A13B0; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801A13B0, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80184FA4[])(void); - -void func_8016BBA4(void *a0) { - D_80184FA4[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801A14EC; - extern u8 D_801A14ED; - extern u8 D_801A14EE; - extern M2C_UNK D_801A14F0; - extern u8 D_801A14F1; - extern u8 D_801A14F2; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801A14EC) = 0x20; - D_801A14ED = 0x20; - D_801A14EE = 0; - (*(u8 *)&D_801A14F0) = 0xc0; - D_801A14F1 = 0xc0; - D_801A14F2 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801A14EC; -extern M2C_UNK D_801A14F0; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801A14EC, &D_801A14F0, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801A14ED; - extern u8 D_801A14EE; - extern u8 D_801A14F1; - extern u8 D_801A14F2; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801A14EC); - if (*p1 != 0) *p1 -= 4; - if (D_801A14ED != 0) D_801A14ED -= 4; - if (D_801A14EE != 0) D_801A14EE -= 4; - p2 = &(*(u8 *)&D_801A14F0); - if (*p2 != 0) *p2 -= 4; - if (D_801A14F1 != 0) D_801A14F1 -= 4; - if (D_801A14F2 != 0) D_801A14F2 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801A14EC), &(*(int *)&D_801A14F0), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801A1478; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801A1478); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80184FB4; - extern s32 D_80184FBC; - extern s32 D_80184FC4; - extern s32 D_80184FCC; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80184FB4, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80184FBC, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80184FC4, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80184FCC, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80184FD4[])(void); - -void func_8016C14C(void *a0) { - D_80184FD4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801A14F4[]; -extern u8 D_801A14FC[]; -extern u8 D_801A14AC[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801A14F4, D_801A14FC, D_801A14AC); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801A1508[]; - extern u8 D_801A15C8; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801A1508[1] = 0xff; - D_801A1508[2] = 0x10; - D_801A1508[0] = 0x10; - D_801A1508[6] = 0; - D_801A1508[5] = 0; - D_801A1508[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801A1508, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801A15C8, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801A1508); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8015AE2C", func_8016C998); - - -extern void (*D_80184FDC[])(void); - -void func_8016CB84(void *a0) { - D_80184FDC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801A15C8[]; - - - Blk_8016CF04_8016CF04 *p = &D_801A15C8[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80184FF8[])(void); - -void func_8016D19C(void *a0) { - D_80184FF8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80185000[])(void); - -void func_8016D428(void *a0) { - D_80185000[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80185068[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80185068[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_8018500C; -extern u8 D_80185018; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018500C, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80185018); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8015AE2C", func_8016DC20); - - -extern void (*D_8018509C[])(void); - -void func_8016DEA4(void *a0) { - D_8018509C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_801850A4[])(void); - -void func_8016DF20(void *a0) { - D_801850A4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_801850F8[])(void); - -void func_8016E5B8(void *a0) { - D_801850F8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_801850B8[4]; - extern s32 D_801850D8; - extern s32 D_801850E0; - extern s32 D_801850E8; - extern s32 D_801850F0; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_801850B8[0], pp, &tmp); - RotTransSV(&D_801850B8[1], &prim.v[1], &tmp); - RotTransSV(&D_801850B8[2], &prim.v[2], &tmp); - RotTransSV(&D_801850B8[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_801850D8; - prim.f1 = D_801850E0; - prim.f2 = D_801850E8; - prim.f3 = D_801850F0; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80185138[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80185138[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_8018512C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_8018512C[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_8018511C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_8018511C[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018512C[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_8018512C[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_8018512C[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80185148; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80185148; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_801851C0[])(void); - -void func_8016F6E0(void *a0) { - D_801851C0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_801851C8[])(void); - -void func_8016F798(void *a0) { - D_801851C8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_801851D0[])(void); - -void func_8016F834(void *a0) { - D_801851D0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_801851D8[])(void); - -void func_8016F8E4(void *a0) { - D_801851D8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_801851E0[])(void); - -void func_8016F9C4(void *a0) { - D_801851E0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_801851E8[])(void); - -void func_8016FA84(void *a0) { - D_801851E8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_801851F4[])(void); - -void func_8016FB7C(void *a0) { - D_801851F4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80185200[])(void); - -void func_8016FC90(void *a0) { - D_80185200[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_8018520C[])(void); - -void func_8016FDB4(void *a0) { - D_8018520C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_8018521C[])(void); - -void func_8016FF30(void *a0) { - D_8018521C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_8018522C[])(void); - -void func_8016FFDC(void *a0) { - D_8018522C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80185234[])(void); - -void func_80170150(void *a0) { - D_80185234[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_8018523C[])(void); - -void func_80170240(void *a0) { - D_8018523C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80185244[])(void); - -void func_801702FC(void *a0) { - D_80185244[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_8018524C[])(void); - -void func_801703E0(void *a0) { - D_8018524C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80185254[])(void); - -void func_801704B0(void *a0) { - D_80185254[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_8018525C[])(void); - -void func_80170548(void *a0) { - D_8018525C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80185264[])(void); - -void func_801705F8(void *a0) { - D_80185264[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_8018526C[])(void); - -void func_801706AC(void *a0) { - D_8018526C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80185274[])(void); - -void func_80170748(void *a0) { - D_80185274[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_8018527C[])(void); - -void func_80170810(void *a0) { - D_8018527C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80185284[])(void); - -void func_80170AD8(void *a0) { - D_80185284[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_8018528C[])(void); - -void func_80170BD8(void *a0) { - D_8018528C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80185294[])(void); - -void func_80170C74(void *a0) { - D_80185294[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8015AE2C", func_80170CF0); - - -extern void (*D_8018529C[])(void); - -void func_80170D68(void *a0) { - D_8018529C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_801852A4[])(void); - -void func_80170E34(void *a0) { - D_801852A4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_801852AC[])(void); - -void func_80170EFC(void *a0) { - D_801852AC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_801852B4[])(void); - -void func_80170FB0(void *a0) { - D_801852B4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_801852BC[])(void); - -void func_80171064(void *a0) { - D_801852BC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_801852C4[])(void); - -void func_80171120(void *a0) { - D_801852C4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_801852CC[])(void); - -void func_801711C0(void *a0) { - D_801852CC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_801852D4[])(void); - -void func_80171260(void *a0) { - D_801852D4[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_801852DC[])(void); - -void func_801714E4(void *a0) { - D_801852DC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8015AE2C", func_80172C50); - - -extern void (*D_80185320[])(void); - -void func_80172CA0(void *a0) { - D_80185320[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_801852E4; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_801852E4); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_110/ov_SC03_110_jr_8016AB6C.c b/src/ov_SC03_110/ov_SC03_110_jr_8016AB6C.c new file mode 100644 index 000000000..bc0dafe9f --- /dev/null +++ b/src/ov_SC03_110/ov_SC03_110_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801842A4; +extern u8 D_80184214; +extern u8 D_801841F0; +extern u8 D_801841CC; +extern u8 D_80184280; +extern u8 D_8018425C; +extern u8 D_80184238; +extern u8 D_801841A8; +extern void func_80145934(void); +extern u8 D_80184334; +extern u8 D_80184310; +extern u8 D_801842EC; +extern u8 D_801842C8; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018372C[]; +extern unsigned char D_8018375C[]; +extern unsigned char D_801837AC[]; +extern unsigned char D_801837DC[]; +extern unsigned char D_8018380C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018385C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80183924[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801839AC[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801839B4; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801A0F40; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801A0F44; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801839E4; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80183A8C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80183AB0[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80183AA0; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80183AC4[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80183AD0[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80183AE0[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80183AF8[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80183AE8; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80183B0C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80183B28[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80183B18; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80183B3C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80183B50[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80183B64; +extern void (*D_80183B8C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80183B6C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80183BD8[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80183BDC[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80184040[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80184050[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801A0F78; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80184078[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80184058; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80184068; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801840B8[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801840C0[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018408C; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801840CC[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018409C; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801A0F80; +extern s32 D_801A0F8C; +extern s32 D_801A0F90; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80184108[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801840DC[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801A0F88; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80184358[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80184178[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_801843FC[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80184550[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018436C; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80184558[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018437C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018439C; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80184560[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80184588[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80184594[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80184408[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80184638; +extern void func_8015D380(s32 a0); +extern unsigned char D_8018371C[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_8018464C[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80184688[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_801846D0; +extern u16 D_801846D2; +extern u16 D_801846D4; +extern s32 D_801846D8; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_801846E0; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_801843EC; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80184764[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80184814[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80184844[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_801848A8; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801A0F98[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_801848CC[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801A0FF0[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80184914[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80184904; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801A075C[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_8018491C[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80184970[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80184938; +extern s16 D_8018496C; +extern s16 D_8018496A; +extern s16 D_80184968; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_8018497C[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801A1050; +extern u8 D_801A1051; +extern u8 D_801A1052; +extern u8 D_801A1053; +extern u8 D_801A1054; +extern u8 D_801A1055; +extern u8 D_801A1056; +extern u8 D_801A1057; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_8018498C[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801A1090; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_801849D0[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80184A4C[]; +extern s32 D_80184A6C[]; +extern u8 D_80184AE8[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80184B08[]; +extern u8 D_80184B28[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80184BC4[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80184C40[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801A076C; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80184C4C[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80184C54[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80184D1C[])(void); +extern void func_80166618(void *a0); +extern void (*D_80184D2C[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80184D3C[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80184D48[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80184CA8[]; +extern u8 D_80184CBC[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80184D60[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80184D68[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80184D70[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80184D78[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80184D80[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80184D88[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80184D90[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80184E44[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80184E4C[])(void); +extern void func_80169F00(void *a0); +extern char D_80184DFC[]; +extern char D_80184DBC[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80184E84[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80184E90[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80184ED8[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80184E98[]; + extern u8 D_80184EA8[]; + extern u8 D_801A1360[]; + extern u8 D_801A1388[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80184E98, D_801A1360) + 3; + func_8001CE28(obj, D_801A1360); + } else { + var_s3 = func_80024054(D_80184EA8, D_801A1388) + 9; + func_8001CE28(obj, D_801A1388); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80184F54[])(void); + +void func_8016B4BC(void *a0) { + D_80184F54[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801A13B0; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801A13B0); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80184F48[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80184F48; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80184F8C[]; +extern unsigned short D_80184F94[]; +extern unsigned short D_80184F9C[]; +extern unsigned char D_801A13B8[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801A13B8 + param_2 * 0x40); + puVar3 = D_80184F8C[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80184F94[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80184F9C[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801A13B0; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801A13B0, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80184FA4[])(void); + +void func_8016BBA4(void *a0) { + D_80184FA4[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801A14EC; + extern u8 D_801A14ED; + extern u8 D_801A14EE; + extern M2C_UNK D_801A14F0; + extern u8 D_801A14F1; + extern u8 D_801A14F2; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801A14EC) = 0x20; + D_801A14ED = 0x20; + D_801A14EE = 0; + (*(u8 *)&D_801A14F0) = 0xc0; + D_801A14F1 = 0xc0; + D_801A14F2 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801A14EC; +extern M2C_UNK D_801A14F0; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801A14EC, &D_801A14F0, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801A14ED; + extern u8 D_801A14EE; + extern u8 D_801A14F1; + extern u8 D_801A14F2; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801A14EC); + if (*p1 != 0) *p1 -= 4; + if (D_801A14ED != 0) D_801A14ED -= 4; + if (D_801A14EE != 0) D_801A14EE -= 4; + p2 = &(*(u8 *)&D_801A14F0); + if (*p2 != 0) *p2 -= 4; + if (D_801A14F1 != 0) D_801A14F1 -= 4; + if (D_801A14F2 != 0) D_801A14F2 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801A14EC), &(*(int *)&D_801A14F0), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801A1478; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801A1478); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80184FB4; + extern s32 D_80184FBC; + extern s32 D_80184FC4; + extern s32 D_80184FCC; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80184FB4, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80184FBC, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80184FC4, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80184FCC, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80184FD4[])(void); + +void func_8016C14C(void *a0) { + D_80184FD4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801A14F4[]; +extern u8 D_801A14FC[]; +extern u8 D_801A14AC[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801A14F4, D_801A14FC, D_801A14AC); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801A1508[]; + extern u8 D_801A15C8; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801A1508[1] = 0xff; + D_801A1508[2] = 0x10; + D_801A1508[0] = 0x10; + D_801A1508[6] = 0; + D_801A1508[5] = 0; + D_801A1508[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801A1508, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801A15C8, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801A1508); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8016AB6C", func_8016C998); + + +extern void (*D_80184FDC[])(void); + +void func_8016CB84(void *a0) { + D_80184FDC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801A15C8[]; + + + Blk_8016CF04_8016CF04 *p = &D_801A15C8[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80184FF8[])(void); + +void func_8016D19C(void *a0) { + D_80184FF8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80185000[])(void); + +void func_8016D428(void *a0) { + D_80185000[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80185068[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80185068[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_8018500C; +extern u8 D_80185018; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018500C, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80185018); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8016AB6C", func_8016DC20); + + +extern void (*D_8018509C[])(void); + +void func_8016DEA4(void *a0) { + D_8018509C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_801850A4[])(void); + +void func_8016DF20(void *a0) { + D_801850A4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_801850F8[])(void); + +void func_8016E5B8(void *a0) { + D_801850F8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_801850B8[4]; + extern s32 D_801850D8; + extern s32 D_801850E0; + extern s32 D_801850E8; + extern s32 D_801850F0; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_801850B8[0], pp, &tmp); + RotTransSV(&D_801850B8[1], &prim.v[1], &tmp); + RotTransSV(&D_801850B8[2], &prim.v[2], &tmp); + RotTransSV(&D_801850B8[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_801850D8; + prim.f1 = D_801850E0; + prim.f2 = D_801850E8; + prim.f3 = D_801850F0; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80185138[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80185138[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_8018512C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_8018512C[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_8018511C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_8018511C[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018512C[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_8018512C[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_8018512C[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80185148; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80185148; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_801851C0[])(void); + +void func_8016F6E0(void *a0) { + D_801851C0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_801851C8[])(void); + +void func_8016F798(void *a0) { + D_801851C8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_801851D0[])(void); + +void func_8016F834(void *a0) { + D_801851D0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_801851D8[])(void); + +void func_8016F8E4(void *a0) { + D_801851D8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_801851E0[])(void); + +void func_8016F9C4(void *a0) { + D_801851E0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_801851E8[])(void); + +void func_8016FA84(void *a0) { + D_801851E8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_801851F4[])(void); + +void func_8016FB7C(void *a0) { + D_801851F4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80185200[])(void); + +void func_8016FC90(void *a0) { + D_80185200[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_8018520C[])(void); + +void func_8016FDB4(void *a0) { + D_8018520C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_8018521C[])(void); + +void func_8016FF30(void *a0) { + D_8018521C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_8018522C[])(void); + +void func_8016FFDC(void *a0) { + D_8018522C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80185234[])(void); + +void func_80170150(void *a0) { + D_80185234[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_8018523C[])(void); + +void func_80170240(void *a0) { + D_8018523C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80185244[])(void); + +void func_801702FC(void *a0) { + D_80185244[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_8018524C[])(void); + +void func_801703E0(void *a0) { + D_8018524C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80185254[])(void); + +void func_801704B0(void *a0) { + D_80185254[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_8018525C[])(void); + +void func_80170548(void *a0) { + D_8018525C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80185264[])(void); + +void func_801705F8(void *a0) { + D_80185264[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_8018526C[])(void); + +void func_801706AC(void *a0) { + D_8018526C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80185274[])(void); + +void func_80170748(void *a0) { + D_80185274[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_8018527C[])(void); + +void func_80170810(void *a0) { + D_8018527C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80185284[])(void); + +void func_80170AD8(void *a0) { + D_80185284[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_8018528C[])(void); + +void func_80170BD8(void *a0) { + D_8018528C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80185294[])(void); + +void func_80170C74(void *a0) { + D_80185294[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8016AB6C", func_80170CF0); + + +extern void (*D_8018529C[])(void); + +void func_80170D68(void *a0) { + D_8018529C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_801852A4[])(void); + +void func_80170E34(void *a0) { + D_801852A4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_801852AC[])(void); + +void func_80170EFC(void *a0) { + D_801852AC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_801852B4[])(void); + +void func_80170FB0(void *a0) { + D_801852B4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_801852BC[])(void); + +void func_80171064(void *a0) { + D_801852BC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_801852C4[])(void); + +void func_80171120(void *a0) { + D_801852C4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_801852CC[])(void); + +void func_801711C0(void *a0) { + D_801852CC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_801852D4[])(void); + +void func_80171260(void *a0) { + D_801852D4[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_801852DC[])(void); + +void func_801714E4(void *a0) { + D_801852DC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8016AB6C", func_80172C50); + + +extern void (*D_80185320[])(void); + +void func_80172CA0(void *a0) { + D_80185320[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_801852E4; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_801852E4); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_111/ov_SC03_111_jr_8015AE2C.c b/src/ov_SC03_111/ov_SC03_111_jr_8015AE2C.c index b068dc114..a924bdb5a 100644 --- a/src/ov_SC03_111/ov_SC03_111_jr_8015AE2C.c +++ b/src/ov_SC03_111/ov_SC03_111_jr_8015AE2C.c @@ -5190,1784 +5190,3 @@ extern void (*D_80187A8C[])(void); void func_8016AB30(void *a0) { D_80187A8C[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80187B08[])(void); - -void func_8016B4BC(void *a0) { - D_80187B08[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801B88B8; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801B88B8); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80187AFC[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80187AFC; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80187B40[]; -extern unsigned short D_80187B48[]; -extern unsigned short D_80187B50[]; -extern unsigned char D_801B88C0[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801B88C0 + param_2 * 0x40); - puVar3 = D_80187B40[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80187B48[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80187B50[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801B88B8; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801B88B8, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80187B58[])(void); - -void func_8016BBA4(void *a0) { - D_80187B58[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801B89F4; - extern u8 D_801B89F5; - extern u8 D_801B89F6; - extern M2C_UNK D_801B89F8; - extern u8 D_801B89F9; - extern u8 D_801B89FA; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801B89F4) = 0x20; - D_801B89F5 = 0x20; - D_801B89F6 = 0; - (*(u8 *)&D_801B89F8) = 0xc0; - D_801B89F9 = 0xc0; - D_801B89FA = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801B89F4; -extern M2C_UNK D_801B89F8; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801B89F4, &D_801B89F8, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801B89F5; - extern u8 D_801B89F6; - extern u8 D_801B89F9; - extern u8 D_801B89FA; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801B89F4); - if (*p1 != 0) *p1 -= 4; - if (D_801B89F5 != 0) D_801B89F5 -= 4; - if (D_801B89F6 != 0) D_801B89F6 -= 4; - p2 = &(*(u8 *)&D_801B89F8); - if (*p2 != 0) *p2 -= 4; - if (D_801B89F9 != 0) D_801B89F9 -= 4; - if (D_801B89FA != 0) D_801B89FA -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801B89F4), &(*(int *)&D_801B89F8), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801B8980; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801B8980); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80187B68; - extern s32 D_80187B70; - extern s32 D_80187B78; - extern s32 D_80187B80; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80187B68, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80187B70, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80187B78, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80187B80, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80187B88[])(void); - -void func_8016C14C(void *a0) { - D_80187B88[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801B89FC[]; -extern u8 D_801B8A04[]; -extern u8 D_801B89B4[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801B89FC, D_801B8A04, D_801B89B4); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801B8A10[]; - extern u8 D_801B8AD0; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801B8A10[1] = 0xff; - D_801B8A10[2] = 0x10; - D_801B8A10[0] = 0x10; - D_801B8A10[6] = 0; - D_801B8A10[5] = 0; - D_801B8A10[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801B8A10, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801B8AD0, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801B8A10); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8015AE2C", func_8016C998); - - -extern void (*D_80187B90[])(void); - -void func_8016CB84(void *a0) { - D_80187B90[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801B8AD0[]; - - - Blk_8016CF04_8016CF04 *p = &D_801B8AD0[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80187BAC[])(void); - -void func_8016D19C(void *a0) { - D_80187BAC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80187BB4[])(void); - -void func_8016D428(void *a0) { - D_80187BB4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80187C1C[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80187C1C[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80187BC0; -extern u8 D_80187BCC; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80187BC0, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80187BCC); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80187C50[])(void); - -void func_8016DEA4(void *a0) { - D_80187C50[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80187C58[])(void); - -void func_8016DF20(void *a0) { - D_80187C58[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80187CAC[])(void); - -void func_8016E5B8(void *a0) { - D_80187CAC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80187C6C[4]; - extern s32 D_80187C8C; - extern s32 D_80187C94; - extern s32 D_80187C9C; - extern s32 D_80187CA4; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80187C6C[0], pp, &tmp); - RotTransSV(&D_80187C6C[1], &prim.v[1], &tmp); - RotTransSV(&D_80187C6C[2], &prim.v[2], &tmp); - RotTransSV(&D_80187C6C[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80187C8C; - prim.f1 = D_80187C94; - prim.f2 = D_80187C9C; - prim.f3 = D_80187CA4; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80187CEC[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80187CEC[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80187CE0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80187CE0[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80187CD0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80187CD0[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80187CE0[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80187CE0[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80187CE0[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80187CFC; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80187CFC; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80187D74[])(void); - -void func_8016F6E0(void *a0) { - D_80187D74[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80187D7C[])(void); - -void func_8016F798(void *a0) { - D_80187D7C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80187D84[])(void); - -void func_8016F834(void *a0) { - D_80187D84[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80187D8C[])(void); - -void func_8016F8E4(void *a0) { - D_80187D8C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80187D94[])(void); - -void func_8016F9C4(void *a0) { - D_80187D94[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80187D9C[])(void); - -void func_8016FA84(void *a0) { - D_80187D9C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80187DA8[])(void); - -void func_8016FB7C(void *a0) { - D_80187DA8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80187DB4[])(void); - -void func_8016FC90(void *a0) { - D_80187DB4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80187DC0[])(void); - -void func_8016FDB4(void *a0) { - D_80187DC0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80187DD0[])(void); - -void func_8016FF30(void *a0) { - D_80187DD0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80187DE0[])(void); - -void func_8016FFDC(void *a0) { - D_80187DE0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80187DE8[])(void); - -void func_80170150(void *a0) { - D_80187DE8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80187DF0[])(void); - -void func_80170240(void *a0) { - D_80187DF0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80187DF8[])(void); - -void func_801702FC(void *a0) { - D_80187DF8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80187E00[])(void); - -void func_801703E0(void *a0) { - D_80187E00[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80187E08[])(void); - -void func_801704B0(void *a0) { - D_80187E08[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80187E10[])(void); - -void func_80170548(void *a0) { - D_80187E10[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80187E18[])(void); - -void func_801705F8(void *a0) { - D_80187E18[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80187E20[])(void); - -void func_801706AC(void *a0) { - D_80187E20[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80187E28[])(void); - -void func_80170748(void *a0) { - D_80187E28[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80187E30[])(void); - -void func_80170810(void *a0) { - D_80187E30[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80187E38[])(void); - -void func_80170AD8(void *a0) { - D_80187E38[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80187E40[])(void); - -void func_80170BD8(void *a0) { - D_80187E40[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80187E48[])(void); - -void func_80170C74(void *a0) { - D_80187E48[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80187E50[])(void); - -void func_80170D68(void *a0) { - D_80187E50[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80187E58[])(void); - -void func_80170E34(void *a0) { - D_80187E58[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80187E60[])(void); - -void func_80170EFC(void *a0) { - D_80187E60[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80187E68[])(void); - -void func_80170FB0(void *a0) { - D_80187E68[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80187E70[])(void); - -void func_80171064(void *a0) { - D_80187E70[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80187E78[])(void); - -void func_80171120(void *a0) { - D_80187E78[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80187E80[])(void); - -void func_801711C0(void *a0) { - D_80187E80[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80187E88[])(void); - -void func_80171260(void *a0) { - D_80187E88[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80187E90[])(void); - -void func_801714E4(void *a0) { - D_80187E90[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8015AE2C", func_80172C50); - - -extern void (*D_80187ED4[])(void); - -void func_80172CA0(void *a0) { - D_80187ED4[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80187E98; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80187E98); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_111/ov_SC03_111_jr_8016AB6C.c b/src/ov_SC03_111/ov_SC03_111_jr_8016AB6C.c new file mode 100644 index 000000000..9bef70f7d --- /dev/null +++ b/src/ov_SC03_111/ov_SC03_111_jr_8016AB6C.c @@ -0,0 +1,3948 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80186E58; +extern u8 D_80186DC8; +extern u8 D_80186DA4; +extern u8 D_80186D80; +extern u8 D_80186E34; +extern u8 D_80186E10; +extern u8 D_80186DEC; +extern u8 D_80186D5C; +extern void func_80145934(void); +extern u8 D_80186EE8; +extern u8 D_80186EC4; +extern u8 D_80186EA0; +extern u8 D_80186E7C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801862E0[]; +extern unsigned char D_80186310[]; +extern unsigned char D_80186360[]; +extern unsigned char D_80186390[]; +extern unsigned char D_801863C0[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80186410[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801864D8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80186560[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80186568; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801B8448; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801B844C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80186598; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80186640[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80186664[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80186654; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80186678[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80186684[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80186694[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801866AC[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018669C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801866C0[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801866DC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801866CC; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801866F0[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80186704[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80186718; +extern void (*D_80186740[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80186720; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018678C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80186790[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80186BF4[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80186C04[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801B8480; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80186C2C[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80186C0C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80186C1C; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80186C6C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80186C74[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80186C40; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80186C80[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80186C50; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801B8488; +extern s32 D_801B8494; +extern s32 D_801B8498; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80186CBC[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80186C90[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801B8490; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80186F0C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80186D2C[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80186FB0[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80187104[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80186F20; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018710C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80186F30; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80186F50; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80187114[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_8018713C[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80187148[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80186FBC[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_801871EC; +extern void func_8015D380(s32 a0); +extern unsigned char D_801862D0[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80187200[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_8018723C[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80187284; +extern u16 D_80187286; +extern u16 D_80187288; +extern s32 D_8018728C; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80187294; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80186FA0; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80187318[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_801873C8[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_801873F8[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_8018745C; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801B84A0[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80187480[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801B84F8[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_801874C8[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_801874B8; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801B7CDC[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_801874D0[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80187524[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_801874EC; +extern s16 D_80187520; +extern s16 D_8018751E; +extern s16 D_8018751C; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80187530[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801B8558; +extern u8 D_801B8559; +extern u8 D_801B855A; +extern u8 D_801B855B; +extern u8 D_801B855C; +extern u8 D_801B855D; +extern u8 D_801B855E; +extern u8 D_801B855F; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80187540[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801B8598; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80187584[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80187600[]; +extern s32 D_80187620[]; +extern u8 D_8018769C[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_801876BC[]; +extern u8 D_801876DC[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80187778[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_801877F4[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801B7CEC; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80187800[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80187808[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_801878D0[])(void); +extern void func_80166618(void *a0); +extern void (*D_801878E0[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_801878F0[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_801878FC[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_8018785C[]; +extern u8 D_80187870[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80187914[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_8018791C[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80187924[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_8018792C[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80187934[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_8018793C[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80187944[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_801879F8[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80187A00[])(void); +extern void func_80169F00(void *a0); +extern char D_801879B0[]; +extern char D_80187970[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80187A38[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80187A44[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80187A8C[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80187A4C[]; + extern u8 D_80187A5C[]; + extern u8 D_801B8868[]; + extern u8 D_801B8890[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80187A4C, D_801B8868) + 3; + func_8001CE28(obj, D_801B8868); + } else { + var_s3 = func_80024054(D_80187A5C, D_801B8890) + 9; + func_8001CE28(obj, D_801B8890); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80187B08[])(void); + +void func_8016B4BC(void *a0) { + D_80187B08[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801B88B8; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801B88B8); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80187AFC[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80187AFC; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80187B40[]; +extern unsigned short D_80187B48[]; +extern unsigned short D_80187B50[]; +extern unsigned char D_801B88C0[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801B88C0 + param_2 * 0x40); + puVar3 = D_80187B40[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80187B48[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80187B50[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801B88B8; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801B88B8, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80187B58[])(void); + +void func_8016BBA4(void *a0) { + D_80187B58[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801B89F4; + extern u8 D_801B89F5; + extern u8 D_801B89F6; + extern M2C_UNK D_801B89F8; + extern u8 D_801B89F9; + extern u8 D_801B89FA; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801B89F4) = 0x20; + D_801B89F5 = 0x20; + D_801B89F6 = 0; + (*(u8 *)&D_801B89F8) = 0xc0; + D_801B89F9 = 0xc0; + D_801B89FA = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801B89F4; +extern M2C_UNK D_801B89F8; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801B89F4, &D_801B89F8, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801B89F5; + extern u8 D_801B89F6; + extern u8 D_801B89F9; + extern u8 D_801B89FA; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801B89F4); + if (*p1 != 0) *p1 -= 4; + if (D_801B89F5 != 0) D_801B89F5 -= 4; + if (D_801B89F6 != 0) D_801B89F6 -= 4; + p2 = &(*(u8 *)&D_801B89F8); + if (*p2 != 0) *p2 -= 4; + if (D_801B89F9 != 0) D_801B89F9 -= 4; + if (D_801B89FA != 0) D_801B89FA -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801B89F4), &(*(int *)&D_801B89F8), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801B8980; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801B8980); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80187B68; + extern s32 D_80187B70; + extern s32 D_80187B78; + extern s32 D_80187B80; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80187B68, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80187B70, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80187B78, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80187B80, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80187B88[])(void); + +void func_8016C14C(void *a0) { + D_80187B88[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801B89FC[]; +extern u8 D_801B8A04[]; +extern u8 D_801B89B4[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801B89FC, D_801B8A04, D_801B89B4); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801B8A10[]; + extern u8 D_801B8AD0; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801B8A10[1] = 0xff; + D_801B8A10[2] = 0x10; + D_801B8A10[0] = 0x10; + D_801B8A10[6] = 0; + D_801B8A10[5] = 0; + D_801B8A10[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801B8A10, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801B8AD0, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801B8A10); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8016AB6C", func_8016C998); + + +extern void (*D_80187B90[])(void); + +void func_8016CB84(void *a0) { + D_80187B90[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801B8AD0[]; + + + Blk_8016CF04_8016CF04 *p = &D_801B8AD0[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80187BAC[])(void); + +void func_8016D19C(void *a0) { + D_80187BAC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80187BB4[])(void); + +void func_8016D428(void *a0) { + D_80187BB4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80187C1C[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80187C1C[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80187BC0; +extern u8 D_80187BCC; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80187BC0, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80187BCC); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80187C50[])(void); + +void func_8016DEA4(void *a0) { + D_80187C50[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80187C58[])(void); + +void func_8016DF20(void *a0) { + D_80187C58[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80187CAC[])(void); + +void func_8016E5B8(void *a0) { + D_80187CAC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80187C6C[4]; + extern s32 D_80187C8C; + extern s32 D_80187C94; + extern s32 D_80187C9C; + extern s32 D_80187CA4; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80187C6C[0], pp, &tmp); + RotTransSV(&D_80187C6C[1], &prim.v[1], &tmp); + RotTransSV(&D_80187C6C[2], &prim.v[2], &tmp); + RotTransSV(&D_80187C6C[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80187C8C; + prim.f1 = D_80187C94; + prim.f2 = D_80187C9C; + prim.f3 = D_80187CA4; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80187CEC[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80187CEC[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80187CE0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80187CE0[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80187CD0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80187CD0[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80187CE0[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80187CE0[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80187CE0[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80187CFC; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80187CFC; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80187D74[])(void); + +void func_8016F6E0(void *a0) { + D_80187D74[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80187D7C[])(void); + +void func_8016F798(void *a0) { + D_80187D7C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80187D84[])(void); + +void func_8016F834(void *a0) { + D_80187D84[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80187D8C[])(void); + +void func_8016F8E4(void *a0) { + D_80187D8C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80187D94[])(void); + +void func_8016F9C4(void *a0) { + D_80187D94[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80187D9C[])(void); + +void func_8016FA84(void *a0) { + D_80187D9C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80187DA8[])(void); + +void func_8016FB7C(void *a0) { + D_80187DA8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80187DB4[])(void); + +void func_8016FC90(void *a0) { + D_80187DB4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80187DC0[])(void); + +void func_8016FDB4(void *a0) { + D_80187DC0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80187DD0[])(void); + +void func_8016FF30(void *a0) { + D_80187DD0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80187DE0[])(void); + +void func_8016FFDC(void *a0) { + D_80187DE0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80187DE8[])(void); + +void func_80170150(void *a0) { + D_80187DE8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80187DF0[])(void); + +void func_80170240(void *a0) { + D_80187DF0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80187DF8[])(void); + +void func_801702FC(void *a0) { + D_80187DF8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80187E00[])(void); + +void func_801703E0(void *a0) { + D_80187E00[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80187E08[])(void); + +void func_801704B0(void *a0) { + D_80187E08[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80187E10[])(void); + +void func_80170548(void *a0) { + D_80187E10[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80187E18[])(void); + +void func_801705F8(void *a0) { + D_80187E18[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80187E20[])(void); + +void func_801706AC(void *a0) { + D_80187E20[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80187E28[])(void); + +void func_80170748(void *a0) { + D_80187E28[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80187E30[])(void); + +void func_80170810(void *a0) { + D_80187E30[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80187E38[])(void); + +void func_80170AD8(void *a0) { + D_80187E38[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80187E40[])(void); + +void func_80170BD8(void *a0) { + D_80187E40[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80187E48[])(void); + +void func_80170C74(void *a0) { + D_80187E48[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80187E50[])(void); + +void func_80170D68(void *a0) { + D_80187E50[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80187E58[])(void); + +void func_80170E34(void *a0) { + D_80187E58[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80187E60[])(void); + +void func_80170EFC(void *a0) { + D_80187E60[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80187E68[])(void); + +void func_80170FB0(void *a0) { + D_80187E68[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80187E70[])(void); + +void func_80171064(void *a0) { + D_80187E70[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80187E78[])(void); + +void func_80171120(void *a0) { + D_80187E78[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80187E80[])(void); + +void func_801711C0(void *a0) { + D_80187E80[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80187E88[])(void); + +void func_80171260(void *a0) { + D_80187E88[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80187E90[])(void); + +void func_801714E4(void *a0) { + D_80187E90[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8016AB6C", func_80172C50); + + +extern void (*D_80187ED4[])(void); + +void func_80172CA0(void *a0) { + D_80187ED4[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80187E98; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80187E98); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_112/ov_SC03_112_jr_8015AE2C.c b/src/ov_SC03_112/ov_SC03_112_jr_8015AE2C.c index a9eb4ac3b..80d7882f4 100644 --- a/src/ov_SC03_112/ov_SC03_112_jr_8015AE2C.c +++ b/src/ov_SC03_112/ov_SC03_112_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_80188894[])(void); void func_8016AB30(void *a0) { D_80188894[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80188910[])(void); - -void func_8016B4BC(void *a0) { - D_80188910[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801AC118; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801AC118); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80188904[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80188904; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80188948[]; -extern unsigned short D_80188950[]; -extern unsigned short D_80188958[]; -extern unsigned char D_801AC120[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801AC120 + param_2 * 0x40); - puVar3 = D_80188948[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80188950[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80188958[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801AC118; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801AC118, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80188960[])(void); - -void func_8016BBA4(void *a0) { - D_80188960[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801AC254; - extern u8 D_801AC255; - extern u8 D_801AC256; - extern M2C_UNK D_801AC258; - extern u8 D_801AC259; - extern u8 D_801AC25A; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801AC254) = 0x20; - D_801AC255 = 0x20; - D_801AC256 = 0; - (*(u8 *)&D_801AC258) = 0xc0; - D_801AC259 = 0xc0; - D_801AC25A = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801AC254; -extern M2C_UNK D_801AC258; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801AC254, &D_801AC258, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801AC255; - extern u8 D_801AC256; - extern u8 D_801AC259; - extern u8 D_801AC25A; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801AC254); - if (*p1 != 0) *p1 -= 4; - if (D_801AC255 != 0) D_801AC255 -= 4; - if (D_801AC256 != 0) D_801AC256 -= 4; - p2 = &(*(u8 *)&D_801AC258); - if (*p2 != 0) *p2 -= 4; - if (D_801AC259 != 0) D_801AC259 -= 4; - if (D_801AC25A != 0) D_801AC25A -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801AC254), &(*(int *)&D_801AC258), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801AC1E0; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801AC1E0); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80188970; - extern s32 D_80188978; - extern s32 D_80188980; - extern s32 D_80188988; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80188970, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80188978, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80188980, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80188988, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80188990[])(void); - -void func_8016C14C(void *a0) { - D_80188990[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801AC25C[]; -extern u8 D_801AC264[]; -extern u8 D_801AC214[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801AC25C, D_801AC264, D_801AC214); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801AC270[]; - extern u8 D_801AC330; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801AC270[1] = 0xff; - D_801AC270[2] = 0x10; - D_801AC270[0] = 0x10; - D_801AC270[6] = 0; - D_801AC270[5] = 0; - D_801AC270[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801AC270, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801AC330, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801AC270); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8015AE2C", func_8016C998); - - -extern void (*D_80188998[])(void); - -void func_8016CB84(void *a0) { - D_80188998[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801AC330[]; - - - Blk_8016CF04_8016CF04 *p = &D_801AC330[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_801889B4[])(void); - -void func_8016D19C(void *a0) { - D_801889B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_801889BC[])(void); - -void func_8016D428(void *a0) { - D_801889BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80188A24[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80188A24[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_801889C8; -extern u8 D_801889D4; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801889C8, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801889D4); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80188A58[])(void); - -void func_8016DEA4(void *a0) { - D_80188A58[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80188A60[])(void); - -void func_8016DF20(void *a0) { - D_80188A60[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80188AB4[])(void); - -void func_8016E5B8(void *a0) { - D_80188AB4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80188A74[4]; - extern s32 D_80188A94; - extern s32 D_80188A9C; - extern s32 D_80188AA4; - extern s32 D_80188AAC; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80188A74[0], pp, &tmp); - RotTransSV(&D_80188A74[1], &prim.v[1], &tmp); - RotTransSV(&D_80188A74[2], &prim.v[2], &tmp); - RotTransSV(&D_80188A74[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80188A94; - prim.f1 = D_80188A9C; - prim.f2 = D_80188AA4; - prim.f3 = D_80188AAC; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80188AF4[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80188AF4[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80188AE8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80188AE8[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80188AD8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80188AD8[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80188AE8[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80188AE8[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80188AE8[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80188B04; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80188B04; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80188B7C[])(void); - -void func_8016F6E0(void *a0) { - D_80188B7C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80188B84[])(void); - -void func_8016F798(void *a0) { - D_80188B84[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80188B8C[])(void); - -void func_8016F834(void *a0) { - D_80188B8C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80188B94[])(void); - -void func_8016F8E4(void *a0) { - D_80188B94[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80188B9C[])(void); - -void func_8016F9C4(void *a0) { - D_80188B9C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80188BA4[])(void); - -void func_8016FA84(void *a0) { - D_80188BA4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80188BB0[])(void); - -void func_8016FB7C(void *a0) { - D_80188BB0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80188BBC[])(void); - -void func_8016FC90(void *a0) { - D_80188BBC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80188BC8[])(void); - -void func_8016FDB4(void *a0) { - D_80188BC8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80188BD8[])(void); - -void func_8016FF30(void *a0) { - D_80188BD8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80188BE8[])(void); - -void func_8016FFDC(void *a0) { - D_80188BE8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80188BF0[])(void); - -void func_80170150(void *a0) { - D_80188BF0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80188BF8[])(void); - -void func_80170240(void *a0) { - D_80188BF8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80188C00[])(void); - -void func_801702FC(void *a0) { - D_80188C00[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80188C08[])(void); - -void func_801703E0(void *a0) { - D_80188C08[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80188C10[])(void); - -void func_801704B0(void *a0) { - D_80188C10[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80188C18[])(void); - -void func_80170548(void *a0) { - D_80188C18[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80188C20[])(void); - -void func_801705F8(void *a0) { - D_80188C20[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80188C28[])(void); - -void func_801706AC(void *a0) { - D_80188C28[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80188C30[])(void); - -void func_80170748(void *a0) { - D_80188C30[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80188C38[])(void); - -void func_80170810(void *a0) { - D_80188C38[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80188C40[])(void); - -void func_80170AD8(void *a0) { - D_80188C40[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80188C48[])(void); - -void func_80170BD8(void *a0) { - D_80188C48[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80188C50[])(void); - -void func_80170C74(void *a0) { - D_80188C50[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80188C58[])(void); - -void func_80170D68(void *a0) { - D_80188C58[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80188C60[])(void); - -void func_80170E34(void *a0) { - D_80188C60[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80188C68[])(void); - -void func_80170EFC(void *a0) { - D_80188C68[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80188C70[])(void); - -void func_80170FB0(void *a0) { - D_80188C70[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80188C78[])(void); - -void func_80171064(void *a0) { - D_80188C78[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80188C80[])(void); - -void func_80171120(void *a0) { - D_80188C80[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80188C88[])(void); - -void func_801711C0(void *a0) { - D_80188C88[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80188C90[])(void); - -void func_80171260(void *a0) { - D_80188C90[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80188C98[])(void); - -void func_801714E4(void *a0) { - D_80188C98[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8015AE2C", func_80172C50); - - -extern void (*D_80188CDC[])(void); - -void func_80172CA0(void *a0) { - D_80188CDC[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80188CA0; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80188CA0); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_112/ov_SC03_112_jr_8016AB6C.c b/src/ov_SC03_112/ov_SC03_112_jr_8016AB6C.c new file mode 100644 index 000000000..2bbeb57cf --- /dev/null +++ b/src/ov_SC03_112/ov_SC03_112_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80187C60; +extern u8 D_80187BD0; +extern u8 D_80187BAC; +extern u8 D_80187B88; +extern u8 D_80187C3C; +extern u8 D_80187C18; +extern u8 D_80187BF4; +extern u8 D_80187B64; +extern void func_80145934(void); +extern u8 D_80187CF0; +extern u8 D_80187CCC; +extern u8 D_80187CA8; +extern u8 D_80187C84; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801870E8[]; +extern unsigned char D_80187118[]; +extern unsigned char D_80187168[]; +extern unsigned char D_80187198[]; +extern unsigned char D_801871C8[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80187218[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801872E0[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80187368[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80187370; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801ABCA8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801ABCAC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801873A0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80187448[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018746C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018745C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80187480[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018748C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018749C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801874B4[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801874A4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801874C8[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801874E4[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801874D4; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801874F8[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018750C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80187520; +extern void (*D_80187548[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80187528; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80187594[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80187598[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_801879FC[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80187A0C[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801ABCE0; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80187A34[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80187A14; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80187A24; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80187A74[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80187A7C[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80187A48; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80187A88[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80187A58; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801ABCE8; +extern s32 D_801ABCF4; +extern s32 D_801ABCF8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80187AC4[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80187A98[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801ABCF0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80187D14[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80187B34[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80187DB8[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80187F0C[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80187D28; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80187F14[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80187D38; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80187D58; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80187F1C[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80187F44[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80187F50[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80187DC4[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80187FF4; +extern void func_8015D380(s32 a0); +extern unsigned char D_801870D8[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80188008[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80188044[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_8018808C; +extern u16 D_8018808E; +extern u16 D_80188090; +extern s32 D_80188094; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_8018809C; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80187DA8; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80188120[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_801881D0[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80188200[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80188264; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801ABD00[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80188288[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801ABD58[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_801882D0[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_801882C0; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801AB444[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_801882D8[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_8018832C[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_801882F4; +extern s16 D_80188328; +extern s16 D_80188326; +extern s16 D_80188324; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80188338[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801ABDB8; +extern u8 D_801ABDB9; +extern u8 D_801ABDBA; +extern u8 D_801ABDBB; +extern u8 D_801ABDBC; +extern u8 D_801ABDBD; +extern u8 D_801ABDBE; +extern u8 D_801ABDBF; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80188348[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801ABDF8; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_8018838C[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80188408[]; +extern s32 D_80188428[]; +extern u8 D_801884A4[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_801884C4[]; +extern u8 D_801884E4[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80188580[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_801885FC[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801AB454; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80188608[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80188610[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_801886D8[])(void); +extern void func_80166618(void *a0); +extern void (*D_801886E8[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_801886F8[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80188704[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80188664[]; +extern u8 D_80188678[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_8018871C[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80188724[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_8018872C[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80188734[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_8018873C[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80188744[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_8018874C[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80188800[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80188808[])(void); +extern void func_80169F00(void *a0); +extern char D_801887B8[]; +extern char D_80188778[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80188840[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_8018884C[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80188894[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80188854[]; + extern u8 D_80188864[]; + extern u8 D_801AC0C8[]; + extern u8 D_801AC0F0[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80188854, D_801AC0C8) + 3; + func_8001CE28(obj, D_801AC0C8); + } else { + var_s3 = func_80024054(D_80188864, D_801AC0F0) + 9; + func_8001CE28(obj, D_801AC0F0); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80188910[])(void); + +void func_8016B4BC(void *a0) { + D_80188910[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801AC118; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801AC118); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80188904[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80188904; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80188948[]; +extern unsigned short D_80188950[]; +extern unsigned short D_80188958[]; +extern unsigned char D_801AC120[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801AC120 + param_2 * 0x40); + puVar3 = D_80188948[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80188950[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80188958[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801AC118; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801AC118, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80188960[])(void); + +void func_8016BBA4(void *a0) { + D_80188960[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801AC254; + extern u8 D_801AC255; + extern u8 D_801AC256; + extern M2C_UNK D_801AC258; + extern u8 D_801AC259; + extern u8 D_801AC25A; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801AC254) = 0x20; + D_801AC255 = 0x20; + D_801AC256 = 0; + (*(u8 *)&D_801AC258) = 0xc0; + D_801AC259 = 0xc0; + D_801AC25A = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801AC254; +extern M2C_UNK D_801AC258; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801AC254, &D_801AC258, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801AC255; + extern u8 D_801AC256; + extern u8 D_801AC259; + extern u8 D_801AC25A; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801AC254); + if (*p1 != 0) *p1 -= 4; + if (D_801AC255 != 0) D_801AC255 -= 4; + if (D_801AC256 != 0) D_801AC256 -= 4; + p2 = &(*(u8 *)&D_801AC258); + if (*p2 != 0) *p2 -= 4; + if (D_801AC259 != 0) D_801AC259 -= 4; + if (D_801AC25A != 0) D_801AC25A -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801AC254), &(*(int *)&D_801AC258), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801AC1E0; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801AC1E0); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80188970; + extern s32 D_80188978; + extern s32 D_80188980; + extern s32 D_80188988; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80188970, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80188978, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80188980, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80188988, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80188990[])(void); + +void func_8016C14C(void *a0) { + D_80188990[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801AC25C[]; +extern u8 D_801AC264[]; +extern u8 D_801AC214[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801AC25C, D_801AC264, D_801AC214); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801AC270[]; + extern u8 D_801AC330; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801AC270[1] = 0xff; + D_801AC270[2] = 0x10; + D_801AC270[0] = 0x10; + D_801AC270[6] = 0; + D_801AC270[5] = 0; + D_801AC270[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801AC270, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801AC330, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801AC270); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8016AB6C", func_8016C998); + + +extern void (*D_80188998[])(void); + +void func_8016CB84(void *a0) { + D_80188998[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801AC330[]; + + + Blk_8016CF04_8016CF04 *p = &D_801AC330[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_801889B4[])(void); + +void func_8016D19C(void *a0) { + D_801889B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_801889BC[])(void); + +void func_8016D428(void *a0) { + D_801889BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80188A24[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80188A24[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_801889C8; +extern u8 D_801889D4; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801889C8, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801889D4); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80188A58[])(void); + +void func_8016DEA4(void *a0) { + D_80188A58[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80188A60[])(void); + +void func_8016DF20(void *a0) { + D_80188A60[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80188AB4[])(void); + +void func_8016E5B8(void *a0) { + D_80188AB4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80188A74[4]; + extern s32 D_80188A94; + extern s32 D_80188A9C; + extern s32 D_80188AA4; + extern s32 D_80188AAC; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80188A74[0], pp, &tmp); + RotTransSV(&D_80188A74[1], &prim.v[1], &tmp); + RotTransSV(&D_80188A74[2], &prim.v[2], &tmp); + RotTransSV(&D_80188A74[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80188A94; + prim.f1 = D_80188A9C; + prim.f2 = D_80188AA4; + prim.f3 = D_80188AAC; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80188AF4[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80188AF4[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80188AE8[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80188AE8[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80188AD8[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80188AD8[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80188AE8[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80188AE8[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80188AE8[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80188B04; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80188B04; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80188B7C[])(void); + +void func_8016F6E0(void *a0) { + D_80188B7C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80188B84[])(void); + +void func_8016F798(void *a0) { + D_80188B84[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80188B8C[])(void); + +void func_8016F834(void *a0) { + D_80188B8C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80188B94[])(void); + +void func_8016F8E4(void *a0) { + D_80188B94[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80188B9C[])(void); + +void func_8016F9C4(void *a0) { + D_80188B9C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80188BA4[])(void); + +void func_8016FA84(void *a0) { + D_80188BA4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80188BB0[])(void); + +void func_8016FB7C(void *a0) { + D_80188BB0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80188BBC[])(void); + +void func_8016FC90(void *a0) { + D_80188BBC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80188BC8[])(void); + +void func_8016FDB4(void *a0) { + D_80188BC8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80188BD8[])(void); + +void func_8016FF30(void *a0) { + D_80188BD8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80188BE8[])(void); + +void func_8016FFDC(void *a0) { + D_80188BE8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80188BF0[])(void); + +void func_80170150(void *a0) { + D_80188BF0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80188BF8[])(void); + +void func_80170240(void *a0) { + D_80188BF8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80188C00[])(void); + +void func_801702FC(void *a0) { + D_80188C00[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80188C08[])(void); + +void func_801703E0(void *a0) { + D_80188C08[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80188C10[])(void); + +void func_801704B0(void *a0) { + D_80188C10[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80188C18[])(void); + +void func_80170548(void *a0) { + D_80188C18[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80188C20[])(void); + +void func_801705F8(void *a0) { + D_80188C20[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80188C28[])(void); + +void func_801706AC(void *a0) { + D_80188C28[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80188C30[])(void); + +void func_80170748(void *a0) { + D_80188C30[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80188C38[])(void); + +void func_80170810(void *a0) { + D_80188C38[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80188C40[])(void); + +void func_80170AD8(void *a0) { + D_80188C40[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80188C48[])(void); + +void func_80170BD8(void *a0) { + D_80188C48[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80188C50[])(void); + +void func_80170C74(void *a0) { + D_80188C50[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80188C58[])(void); + +void func_80170D68(void *a0) { + D_80188C58[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80188C60[])(void); + +void func_80170E34(void *a0) { + D_80188C60[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80188C68[])(void); + +void func_80170EFC(void *a0) { + D_80188C68[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80188C70[])(void); + +void func_80170FB0(void *a0) { + D_80188C70[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80188C78[])(void); + +void func_80171064(void *a0) { + D_80188C78[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80188C80[])(void); + +void func_80171120(void *a0) { + D_80188C80[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80188C88[])(void); + +void func_801711C0(void *a0) { + D_80188C88[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80188C90[])(void); + +void func_80171260(void *a0) { + D_80188C90[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80188C98[])(void); + +void func_801714E4(void *a0) { + D_80188C98[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8016AB6C", func_80172C50); + + +extern void (*D_80188CDC[])(void); + +void func_80172CA0(void *a0) { + D_80188CDC[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80188CA0; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80188CA0); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_113/ov_SC03_113_jr_8015AE2C.c b/src/ov_SC03_113/ov_SC03_113_jr_8015AE2C.c index 8393c237f..3570c6f1d 100644 --- a/src/ov_SC03_113/ov_SC03_113_jr_8015AE2C.c +++ b/src/ov_SC03_113/ov_SC03_113_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_80185F44[])(void); void func_8016AB30(void *a0) { D_80185F44[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80185FC0[])(void); - -void func_8016B4BC(void *a0) { - D_80185FC0[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801A4CA8; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801A4CA8); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80185FB4[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80185FB4; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80185FF8[]; -extern unsigned short D_80186000[]; -extern unsigned short D_80186008[]; -extern unsigned char D_801A4CB0[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801A4CB0 + param_2 * 0x40); - puVar3 = D_80185FF8[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80186000[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80186008[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801A4CA8; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801A4CA8, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80186010[])(void); - -void func_8016BBA4(void *a0) { - D_80186010[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801A4DE4; - extern u8 D_801A4DE5; - extern u8 D_801A4DE6; - extern M2C_UNK D_801A4DE8; - extern u8 D_801A4DE9; - extern u8 D_801A4DEA; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801A4DE4) = 0x20; - D_801A4DE5 = 0x20; - D_801A4DE6 = 0; - (*(u8 *)&D_801A4DE8) = 0xc0; - D_801A4DE9 = 0xc0; - D_801A4DEA = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801A4DE4; -extern M2C_UNK D_801A4DE8; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801A4DE4, &D_801A4DE8, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801A4DE5; - extern u8 D_801A4DE6; - extern u8 D_801A4DE9; - extern u8 D_801A4DEA; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801A4DE4); - if (*p1 != 0) *p1 -= 4; - if (D_801A4DE5 != 0) D_801A4DE5 -= 4; - if (D_801A4DE6 != 0) D_801A4DE6 -= 4; - p2 = &(*(u8 *)&D_801A4DE8); - if (*p2 != 0) *p2 -= 4; - if (D_801A4DE9 != 0) D_801A4DE9 -= 4; - if (D_801A4DEA != 0) D_801A4DEA -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801A4DE4), &(*(int *)&D_801A4DE8), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801A4D70; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801A4D70); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80186020; - extern s32 D_80186028; - extern s32 D_80186030; - extern s32 D_80186038; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80186020, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80186028, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80186030, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80186038, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80186040[])(void); - -void func_8016C14C(void *a0) { - D_80186040[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801A4DEC[]; -extern u8 D_801A4DF4[]; -extern u8 D_801A4DA4[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801A4DEC, D_801A4DF4, D_801A4DA4); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801A4E00[]; - extern u8 D_801A4EC0; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801A4E00[1] = 0xff; - D_801A4E00[2] = 0x10; - D_801A4E00[0] = 0x10; - D_801A4E00[6] = 0; - D_801A4E00[5] = 0; - D_801A4E00[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801A4E00, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801A4EC0, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801A4E00); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8015AE2C", func_8016C998); - - -extern void (*D_80186048[])(void); - -void func_8016CB84(void *a0) { - D_80186048[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801A4EC0[]; - - - Blk_8016CF04_8016CF04 *p = &D_801A4EC0[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80186064[])(void); - -void func_8016D19C(void *a0) { - D_80186064[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_8018606C[])(void); - -void func_8016D428(void *a0) { - D_8018606C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_801860D4[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_801860D4[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80186078; -extern u8 D_80186084; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80186078, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80186084); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80186108[])(void); - -void func_8016DEA4(void *a0) { - D_80186108[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80186110[])(void); - -void func_8016DF20(void *a0) { - D_80186110[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80186164[])(void); - -void func_8016E5B8(void *a0) { - D_80186164[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80186124[4]; - extern s32 D_80186144; - extern s32 D_8018614C; - extern s32 D_80186154; - extern s32 D_8018615C; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80186124[0], pp, &tmp); - RotTransSV(&D_80186124[1], &prim.v[1], &tmp); - RotTransSV(&D_80186124[2], &prim.v[2], &tmp); - RotTransSV(&D_80186124[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80186144; - prim.f1 = D_8018614C; - prim.f2 = D_80186154; - prim.f3 = D_8018615C; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_801861A4[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_801861A4[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80186198[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80186198[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80186188[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80186188[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80186198[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80186198[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80186198[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_801861B4; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_801861B4; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_8018622C[])(void); - -void func_8016F6E0(void *a0) { - D_8018622C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80186234[])(void); - -void func_8016F798(void *a0) { - D_80186234[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_8018623C[])(void); - -void func_8016F834(void *a0) { - D_8018623C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80186244[])(void); - -void func_8016F8E4(void *a0) { - D_80186244[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_8018624C[])(void); - -void func_8016F9C4(void *a0) { - D_8018624C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80186254[])(void); - -void func_8016FA84(void *a0) { - D_80186254[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80186260[])(void); - -void func_8016FB7C(void *a0) { - D_80186260[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_8018626C[])(void); - -void func_8016FC90(void *a0) { - D_8018626C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80186278[])(void); - -void func_8016FDB4(void *a0) { - D_80186278[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80186288[])(void); - -void func_8016FF30(void *a0) { - D_80186288[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80186298[])(void); - -void func_8016FFDC(void *a0) { - D_80186298[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_801862A0[])(void); - -void func_80170150(void *a0) { - D_801862A0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_801862A8[])(void); - -void func_80170240(void *a0) { - D_801862A8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_801862B0[])(void); - -void func_801702FC(void *a0) { - D_801862B0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_801862B8[])(void); - -void func_801703E0(void *a0) { - D_801862B8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_801862C0[])(void); - -void func_801704B0(void *a0) { - D_801862C0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_801862C8[])(void); - -void func_80170548(void *a0) { - D_801862C8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_801862D0[])(void); - -void func_801705F8(void *a0) { - D_801862D0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_801862D8[])(void); - -void func_801706AC(void *a0) { - D_801862D8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_801862E0[])(void); - -void func_80170748(void *a0) { - D_801862E0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_801862E8[])(void); - -void func_80170810(void *a0) { - D_801862E8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_801862F0[])(void); - -void func_80170AD8(void *a0) { - D_801862F0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_801862F8[])(void); - -void func_80170BD8(void *a0) { - D_801862F8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80186300[])(void); - -void func_80170C74(void *a0) { - D_80186300[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80186308[])(void); - -void func_80170D68(void *a0) { - D_80186308[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80186310[])(void); - -void func_80170E34(void *a0) { - D_80186310[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80186318[])(void); - -void func_80170EFC(void *a0) { - D_80186318[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80186320[])(void); - -void func_80170FB0(void *a0) { - D_80186320[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80186328[])(void); - -void func_80171064(void *a0) { - D_80186328[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80186330[])(void); - -void func_80171120(void *a0) { - D_80186330[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80186338[])(void); - -void func_801711C0(void *a0) { - D_80186338[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80186340[])(void); - -void func_80171260(void *a0) { - D_80186340[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80186348[])(void); - -void func_801714E4(void *a0) { - D_80186348[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8015AE2C", func_80172C50); - - -extern void (*D_8018638C[])(void); - -void func_80172CA0(void *a0) { - D_8018638C[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80186350; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80186350); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_113/ov_SC03_113_jr_8016AB6C.c b/src/ov_SC03_113/ov_SC03_113_jr_8016AB6C.c new file mode 100644 index 000000000..3487a6117 --- /dev/null +++ b/src/ov_SC03_113/ov_SC03_113_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80185310; +extern u8 D_80185280; +extern u8 D_8018525C; +extern u8 D_80185238; +extern u8 D_801852EC; +extern u8 D_801852C8; +extern u8 D_801852A4; +extern u8 D_80185214; +extern void func_80145934(void); +extern u8 D_801853A0; +extern u8 D_8018537C; +extern u8 D_80185358; +extern u8 D_80185334; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80184798[]; +extern unsigned char D_801847C8[]; +extern unsigned char D_80184818[]; +extern unsigned char D_80184848[]; +extern unsigned char D_80184878[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801848C8[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80184990[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80184A18[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80184A20; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801A4838; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801A483C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80184A50; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80184AF8[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80184B1C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80184B0C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80184B30[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80184B3C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80184B4C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80184B64[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80184B54; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80184B78[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80184B94[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80184B84; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80184BA8[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80184BBC[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80184BD0; +extern void (*D_80184BF8[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80184BD8; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80184C44[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80184C48[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_801850AC[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_801850BC[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801A4870; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_801850E4[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801850C4; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_801850D4; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80185124[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018512C[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_801850F8; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80185138[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80185108; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801A4878; +extern s32 D_801A4884; +extern s32 D_801A4888; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80185174[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80185148[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801A4880; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_801853C4[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_801851E4[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80185468[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_801855BC[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_801853D8; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_801855C4[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_801853E8; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80185408; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_801855CC[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_801855F4[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80185600[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80185474[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_801856A4; +extern void func_8015D380(s32 a0); +extern unsigned char D_80184788[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_801856B8[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_801856F4[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_8018573C; +extern u16 D_8018573E; +extern u16 D_80185740; +extern s32 D_80185744; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_8018574C; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80185458; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_801857D0[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80185880[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_801858B0[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80185914; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801A4890[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80185938[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801A48E8[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80185980[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80185970; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801A40CC[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80185988[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_801859DC[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_801859A4; +extern s16 D_801859D8; +extern s16 D_801859D6; +extern s16 D_801859D4; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_801859E8[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801A4948; +extern u8 D_801A4949; +extern u8 D_801A494A; +extern u8 D_801A494B; +extern u8 D_801A494C; +extern u8 D_801A494D; +extern u8 D_801A494E; +extern u8 D_801A494F; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_801859F8[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801A4988; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80185A3C[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80185AB8[]; +extern s32 D_80185AD8[]; +extern u8 D_80185B54[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80185B74[]; +extern u8 D_80185B94[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80185C30[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80185CAC[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801A40DC; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80185CB8[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80185CC0[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80185D88[])(void); +extern void func_80166618(void *a0); +extern void (*D_80185D98[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80185DA8[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80185DB4[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80185D14[]; +extern u8 D_80185D28[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80185DCC[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80185DD4[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80185DDC[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80185DE4[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80185DEC[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80185DF4[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80185DFC[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80185EB0[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80185EB8[])(void); +extern void func_80169F00(void *a0); +extern char D_80185E68[]; +extern char D_80185E28[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80185EF0[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80185EFC[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80185F44[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80185F04[]; + extern u8 D_80185F14[]; + extern u8 D_801A4C58[]; + extern u8 D_801A4C80[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80185F04, D_801A4C58) + 3; + func_8001CE28(obj, D_801A4C58); + } else { + var_s3 = func_80024054(D_80185F14, D_801A4C80) + 9; + func_8001CE28(obj, D_801A4C80); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80185FC0[])(void); + +void func_8016B4BC(void *a0) { + D_80185FC0[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801A4CA8; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801A4CA8); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80185FB4[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80185FB4; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80185FF8[]; +extern unsigned short D_80186000[]; +extern unsigned short D_80186008[]; +extern unsigned char D_801A4CB0[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801A4CB0 + param_2 * 0x40); + puVar3 = D_80185FF8[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80186000[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80186008[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801A4CA8; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801A4CA8, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80186010[])(void); + +void func_8016BBA4(void *a0) { + D_80186010[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801A4DE4; + extern u8 D_801A4DE5; + extern u8 D_801A4DE6; + extern M2C_UNK D_801A4DE8; + extern u8 D_801A4DE9; + extern u8 D_801A4DEA; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801A4DE4) = 0x20; + D_801A4DE5 = 0x20; + D_801A4DE6 = 0; + (*(u8 *)&D_801A4DE8) = 0xc0; + D_801A4DE9 = 0xc0; + D_801A4DEA = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801A4DE4; +extern M2C_UNK D_801A4DE8; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801A4DE4, &D_801A4DE8, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801A4DE5; + extern u8 D_801A4DE6; + extern u8 D_801A4DE9; + extern u8 D_801A4DEA; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801A4DE4); + if (*p1 != 0) *p1 -= 4; + if (D_801A4DE5 != 0) D_801A4DE5 -= 4; + if (D_801A4DE6 != 0) D_801A4DE6 -= 4; + p2 = &(*(u8 *)&D_801A4DE8); + if (*p2 != 0) *p2 -= 4; + if (D_801A4DE9 != 0) D_801A4DE9 -= 4; + if (D_801A4DEA != 0) D_801A4DEA -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801A4DE4), &(*(int *)&D_801A4DE8), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801A4D70; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801A4D70); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80186020; + extern s32 D_80186028; + extern s32 D_80186030; + extern s32 D_80186038; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80186020, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80186028, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80186030, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80186038, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80186040[])(void); + +void func_8016C14C(void *a0) { + D_80186040[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801A4DEC[]; +extern u8 D_801A4DF4[]; +extern u8 D_801A4DA4[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801A4DEC, D_801A4DF4, D_801A4DA4); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801A4E00[]; + extern u8 D_801A4EC0; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801A4E00[1] = 0xff; + D_801A4E00[2] = 0x10; + D_801A4E00[0] = 0x10; + D_801A4E00[6] = 0; + D_801A4E00[5] = 0; + D_801A4E00[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801A4E00, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801A4EC0, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801A4E00); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8016AB6C", func_8016C998); + + +extern void (*D_80186048[])(void); + +void func_8016CB84(void *a0) { + D_80186048[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801A4EC0[]; + + + Blk_8016CF04_8016CF04 *p = &D_801A4EC0[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80186064[])(void); + +void func_8016D19C(void *a0) { + D_80186064[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_8018606C[])(void); + +void func_8016D428(void *a0) { + D_8018606C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_801860D4[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_801860D4[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80186078; +extern u8 D_80186084; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80186078, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80186084); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80186108[])(void); + +void func_8016DEA4(void *a0) { + D_80186108[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80186110[])(void); + +void func_8016DF20(void *a0) { + D_80186110[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80186164[])(void); + +void func_8016E5B8(void *a0) { + D_80186164[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80186124[4]; + extern s32 D_80186144; + extern s32 D_8018614C; + extern s32 D_80186154; + extern s32 D_8018615C; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80186124[0], pp, &tmp); + RotTransSV(&D_80186124[1], &prim.v[1], &tmp); + RotTransSV(&D_80186124[2], &prim.v[2], &tmp); + RotTransSV(&D_80186124[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80186144; + prim.f1 = D_8018614C; + prim.f2 = D_80186154; + prim.f3 = D_8018615C; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_801861A4[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_801861A4[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80186198[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80186198[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80186188[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80186188[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80186198[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80186198[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80186198[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_801861B4; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_801861B4; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_8018622C[])(void); + +void func_8016F6E0(void *a0) { + D_8018622C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80186234[])(void); + +void func_8016F798(void *a0) { + D_80186234[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_8018623C[])(void); + +void func_8016F834(void *a0) { + D_8018623C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80186244[])(void); + +void func_8016F8E4(void *a0) { + D_80186244[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_8018624C[])(void); + +void func_8016F9C4(void *a0) { + D_8018624C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80186254[])(void); + +void func_8016FA84(void *a0) { + D_80186254[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80186260[])(void); + +void func_8016FB7C(void *a0) { + D_80186260[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_8018626C[])(void); + +void func_8016FC90(void *a0) { + D_8018626C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80186278[])(void); + +void func_8016FDB4(void *a0) { + D_80186278[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80186288[])(void); + +void func_8016FF30(void *a0) { + D_80186288[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80186298[])(void); + +void func_8016FFDC(void *a0) { + D_80186298[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_801862A0[])(void); + +void func_80170150(void *a0) { + D_801862A0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_801862A8[])(void); + +void func_80170240(void *a0) { + D_801862A8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_801862B0[])(void); + +void func_801702FC(void *a0) { + D_801862B0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_801862B8[])(void); + +void func_801703E0(void *a0) { + D_801862B8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_801862C0[])(void); + +void func_801704B0(void *a0) { + D_801862C0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_801862C8[])(void); + +void func_80170548(void *a0) { + D_801862C8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_801862D0[])(void); + +void func_801705F8(void *a0) { + D_801862D0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_801862D8[])(void); + +void func_801706AC(void *a0) { + D_801862D8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_801862E0[])(void); + +void func_80170748(void *a0) { + D_801862E0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_801862E8[])(void); + +void func_80170810(void *a0) { + D_801862E8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_801862F0[])(void); + +void func_80170AD8(void *a0) { + D_801862F0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_801862F8[])(void); + +void func_80170BD8(void *a0) { + D_801862F8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80186300[])(void); + +void func_80170C74(void *a0) { + D_80186300[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80186308[])(void); + +void func_80170D68(void *a0) { + D_80186308[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80186310[])(void); + +void func_80170E34(void *a0) { + D_80186310[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80186318[])(void); + +void func_80170EFC(void *a0) { + D_80186318[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80186320[])(void); + +void func_80170FB0(void *a0) { + D_80186320[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80186328[])(void); + +void func_80171064(void *a0) { + D_80186328[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80186330[])(void); + +void func_80171120(void *a0) { + D_80186330[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80186338[])(void); + +void func_801711C0(void *a0) { + D_80186338[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80186340[])(void); + +void func_80171260(void *a0) { + D_80186340[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80186348[])(void); + +void func_801714E4(void *a0) { + D_80186348[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8016AB6C", func_80172C50); + + +extern void (*D_8018638C[])(void); + +void func_80172CA0(void *a0) { + D_8018638C[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80186350; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80186350); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_114/ov_SC03_114_jr_8015AE2C.c b/src/ov_SC03_114/ov_SC03_114_jr_8015AE2C.c index 6b035a8ee..cdbb7aa38 100644 --- a/src/ov_SC03_114/ov_SC03_114_jr_8015AE2C.c +++ b/src/ov_SC03_114/ov_SC03_114_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_80181BAC[])(void); void func_8016AB30(void *a0) { D_80181BAC[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80181C28[])(void); - -void func_8016B4BC(void *a0) { - D_80181C28[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801A8940; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801A8940); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80181C1C[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80181C1C; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80181C60[]; -extern unsigned short D_80181C68[]; -extern unsigned short D_80181C70[]; -extern unsigned char D_801A8948[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801A8948 + param_2 * 0x40); - puVar3 = D_80181C60[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80181C68[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80181C70[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801A8940; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801A8940, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80181C78[])(void); - -void func_8016BBA4(void *a0) { - D_80181C78[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801A8A7C; - extern u8 D_801A8A7D; - extern u8 D_801A8A7E; - extern M2C_UNK D_801A8A80; - extern u8 D_801A8A81; - extern u8 D_801A8A82; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801A8A7C) = 0x20; - D_801A8A7D = 0x20; - D_801A8A7E = 0; - (*(u8 *)&D_801A8A80) = 0xc0; - D_801A8A81 = 0xc0; - D_801A8A82 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801A8A7C; -extern M2C_UNK D_801A8A80; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801A8A7C, &D_801A8A80, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801A8A7D; - extern u8 D_801A8A7E; - extern u8 D_801A8A81; - extern u8 D_801A8A82; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801A8A7C); - if (*p1 != 0) *p1 -= 4; - if (D_801A8A7D != 0) D_801A8A7D -= 4; - if (D_801A8A7E != 0) D_801A8A7E -= 4; - p2 = &(*(u8 *)&D_801A8A80); - if (*p2 != 0) *p2 -= 4; - if (D_801A8A81 != 0) D_801A8A81 -= 4; - if (D_801A8A82 != 0) D_801A8A82 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801A8A7C), &(*(int *)&D_801A8A80), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801A8A08; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801A8A08); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80181C88; - extern s32 D_80181C90; - extern s32 D_80181C98; - extern s32 D_80181CA0; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80181C88, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80181C90, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80181C98, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80181CA0, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80181CA8[])(void); - -void func_8016C14C(void *a0) { - D_80181CA8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801A8A84[]; -extern u8 D_801A8A8C[]; -extern u8 D_801A8A3C[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801A8A84, D_801A8A8C, D_801A8A3C); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801A8A98[]; - extern u8 D_801A8B58; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801A8A98[1] = 0xff; - D_801A8A98[2] = 0x10; - D_801A8A98[0] = 0x10; - D_801A8A98[6] = 0; - D_801A8A98[5] = 0; - D_801A8A98[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801A8A98, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801A8B58, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801A8A98); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8015AE2C", func_8016C998); - - -extern void (*D_80181CB0[])(void); - -void func_8016CB84(void *a0) { - D_80181CB0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801A8B58[]; - - - Blk_8016CF04_8016CF04 *p = &D_801A8B58[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80181CCC[])(void); - -void func_8016D19C(void *a0) { - D_80181CCC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80181CD4[])(void); - -void func_8016D428(void *a0) { - D_80181CD4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80181D3C[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80181D3C[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80181CE0; -extern u8 D_80181CEC; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80181CE0, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80181CEC); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80181D70[])(void); - -void func_8016DEA4(void *a0) { - D_80181D70[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80181D78[])(void); - -void func_8016DF20(void *a0) { - D_80181D78[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80181DCC[])(void); - -void func_8016E5B8(void *a0) { - D_80181DCC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80181D8C[4]; - extern s32 D_80181DAC; - extern s32 D_80181DB4; - extern s32 D_80181DBC; - extern s32 D_80181DC4; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80181D8C[0], pp, &tmp); - RotTransSV(&D_80181D8C[1], &prim.v[1], &tmp); - RotTransSV(&D_80181D8C[2], &prim.v[2], &tmp); - RotTransSV(&D_80181D8C[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80181DAC; - prim.f1 = D_80181DB4; - prim.f2 = D_80181DBC; - prim.f3 = D_80181DC4; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80181E0C[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80181E0C[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80181E00[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80181E00[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80181DF0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80181DF0[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80181E00[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80181E00[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80181E00[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80181E1C; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80181E1C; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80181E94[])(void); - -void func_8016F6E0(void *a0) { - D_80181E94[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80181E9C[])(void); - -void func_8016F798(void *a0) { - D_80181E9C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80181EA4[])(void); - -void func_8016F834(void *a0) { - D_80181EA4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80181EAC[])(void); - -void func_8016F8E4(void *a0) { - D_80181EAC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80181EB4[])(void); - -void func_8016F9C4(void *a0) { - D_80181EB4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80181EBC[])(void); - -void func_8016FA84(void *a0) { - D_80181EBC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80181EC8[])(void); - -void func_8016FB7C(void *a0) { - D_80181EC8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80181ED4[])(void); - -void func_8016FC90(void *a0) { - D_80181ED4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80181EE0[])(void); - -void func_8016FDB4(void *a0) { - D_80181EE0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80181EF0[])(void); - -void func_8016FF30(void *a0) { - D_80181EF0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80181F00[])(void); - -void func_8016FFDC(void *a0) { - D_80181F00[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80181F08[])(void); - -void func_80170150(void *a0) { - D_80181F08[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80181F10[])(void); - -void func_80170240(void *a0) { - D_80181F10[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80181F18[])(void); - -void func_801702FC(void *a0) { - D_80181F18[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80181F20[])(void); - -void func_801703E0(void *a0) { - D_80181F20[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80181F28[])(void); - -void func_801704B0(void *a0) { - D_80181F28[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80181F30[])(void); - -void func_80170548(void *a0) { - D_80181F30[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80181F38[])(void); - -void func_801705F8(void *a0) { - D_80181F38[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80181F40[])(void); - -void func_801706AC(void *a0) { - D_80181F40[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80181F48[])(void); - -void func_80170748(void *a0) { - D_80181F48[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80181F50[])(void); - -void func_80170810(void *a0) { - D_80181F50[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80181F58[])(void); - -void func_80170AD8(void *a0) { - D_80181F58[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80181F60[])(void); - -void func_80170BD8(void *a0) { - D_80181F60[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80181F68[])(void); - -void func_80170C74(void *a0) { - D_80181F68[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80181F70[])(void); - -void func_80170D68(void *a0) { - D_80181F70[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80181F78[])(void); - -void func_80170E34(void *a0) { - D_80181F78[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80181F80[])(void); - -void func_80170EFC(void *a0) { - D_80181F80[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80181F88[])(void); - -void func_80170FB0(void *a0) { - D_80181F88[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80181F90[])(void); - -void func_80171064(void *a0) { - D_80181F90[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80181F98[])(void); - -void func_80171120(void *a0) { - D_80181F98[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80181FA0[])(void); - -void func_801711C0(void *a0) { - D_80181FA0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80181FA8[])(void); - -void func_80171260(void *a0) { - D_80181FA8[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80181FB0[])(void); - -void func_801714E4(void *a0) { - D_80181FB0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8015AE2C", func_80172C50); - - -extern void (*D_80181FF4[])(void); - -void func_80172CA0(void *a0) { - D_80181FF4[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80181FB8; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80181FB8); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_114/ov_SC03_114_jr_8016AB6C.c b/src/ov_SC03_114/ov_SC03_114_jr_8016AB6C.c new file mode 100644 index 000000000..81c39d5ea --- /dev/null +++ b/src/ov_SC03_114/ov_SC03_114_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80180F78; +extern u8 D_80180EE8; +extern u8 D_80180EC4; +extern u8 D_80180EA0; +extern u8 D_80180F54; +extern u8 D_80180F30; +extern u8 D_80180F0C; +extern u8 D_80180E7C; +extern void func_80145934(void); +extern u8 D_80181008; +extern u8 D_80180FE4; +extern u8 D_80180FC0; +extern u8 D_80180F9C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80180400[]; +extern unsigned char D_80180430[]; +extern unsigned char D_80180480[]; +extern unsigned char D_801804B0[]; +extern unsigned char D_801804E0[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80180530[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801805F8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80180680[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80180688; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801A84D0; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801A84D4; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801806B8; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80180760[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80180784[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80180774; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80180798[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801807A4[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801807B4[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801807CC[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801807BC; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801807E0[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801807FC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801807EC; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80180810[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80180824[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80180838; +extern void (*D_80180860[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80180840; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801808AC[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801808B0[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80180D14[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80180D24[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801A8508; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80180D4C[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80180D2C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80180D3C; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80180D8C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80180D94[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80180D60; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80180DA0[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80180D70; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801A8510; +extern s32 D_801A851C; +extern s32 D_801A8520; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80180DDC[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80180DB0[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801A8518; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018102C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80180E4C[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_801810D0[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80181224[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80181040; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018122C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80181050; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80181070; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80181234[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_8018125C[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80181268[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_801810DC[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_8018130C; +extern void func_8015D380(s32 a0); +extern unsigned char D_801803F0[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80181320[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_8018135C[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_801813A4; +extern u16 D_801813A6; +extern u16 D_801813A8; +extern s32 D_801813AC; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_801813B4; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_801810C0; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80181438[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_801814E8[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80181518[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_8018157C; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801A8528[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_801815A0[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801A8580[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_801815E8[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_801815D8; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801A7DD8[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_801815F0[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80181644[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_8018160C; +extern s16 D_80181640; +extern s16 D_8018163E; +extern s16 D_8018163C; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80181650[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801A85E0; +extern u8 D_801A85E1; +extern u8 D_801A85E2; +extern u8 D_801A85E3; +extern u8 D_801A85E4; +extern u8 D_801A85E5; +extern u8 D_801A85E6; +extern u8 D_801A85E7; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80181660[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801A8620; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_801816A4[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80181720[]; +extern s32 D_80181740[]; +extern u8 D_801817BC[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_801817DC[]; +extern u8 D_801817FC[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80181898[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80181914[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801A7DE8; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80181920[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80181928[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_801819F0[])(void); +extern void func_80166618(void *a0); +extern void (*D_80181A00[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80181A10[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80181A1C[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_8018197C[]; +extern u8 D_80181990[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80181A34[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80181A3C[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80181A44[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80181A4C[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80181A54[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80181A5C[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80181A64[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80181B18[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80181B20[])(void); +extern void func_80169F00(void *a0); +extern char D_80181AD0[]; +extern char D_80181A90[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80181B58[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80181B64[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80181BAC[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80181B6C[]; + extern u8 D_80181B7C[]; + extern u8 D_801A88F0[]; + extern u8 D_801A8918[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80181B6C, D_801A88F0) + 3; + func_8001CE28(obj, D_801A88F0); + } else { + var_s3 = func_80024054(D_80181B7C, D_801A8918) + 9; + func_8001CE28(obj, D_801A8918); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80181C28[])(void); + +void func_8016B4BC(void *a0) { + D_80181C28[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801A8940; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801A8940); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80181C1C[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80181C1C; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80181C60[]; +extern unsigned short D_80181C68[]; +extern unsigned short D_80181C70[]; +extern unsigned char D_801A8948[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801A8948 + param_2 * 0x40); + puVar3 = D_80181C60[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80181C68[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80181C70[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801A8940; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801A8940, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80181C78[])(void); + +void func_8016BBA4(void *a0) { + D_80181C78[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801A8A7C; + extern u8 D_801A8A7D; + extern u8 D_801A8A7E; + extern M2C_UNK D_801A8A80; + extern u8 D_801A8A81; + extern u8 D_801A8A82; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801A8A7C) = 0x20; + D_801A8A7D = 0x20; + D_801A8A7E = 0; + (*(u8 *)&D_801A8A80) = 0xc0; + D_801A8A81 = 0xc0; + D_801A8A82 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801A8A7C; +extern M2C_UNK D_801A8A80; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801A8A7C, &D_801A8A80, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801A8A7D; + extern u8 D_801A8A7E; + extern u8 D_801A8A81; + extern u8 D_801A8A82; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801A8A7C); + if (*p1 != 0) *p1 -= 4; + if (D_801A8A7D != 0) D_801A8A7D -= 4; + if (D_801A8A7E != 0) D_801A8A7E -= 4; + p2 = &(*(u8 *)&D_801A8A80); + if (*p2 != 0) *p2 -= 4; + if (D_801A8A81 != 0) D_801A8A81 -= 4; + if (D_801A8A82 != 0) D_801A8A82 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801A8A7C), &(*(int *)&D_801A8A80), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801A8A08; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801A8A08); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80181C88; + extern s32 D_80181C90; + extern s32 D_80181C98; + extern s32 D_80181CA0; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80181C88, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80181C90, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80181C98, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80181CA0, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80181CA8[])(void); + +void func_8016C14C(void *a0) { + D_80181CA8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801A8A84[]; +extern u8 D_801A8A8C[]; +extern u8 D_801A8A3C[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801A8A84, D_801A8A8C, D_801A8A3C); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801A8A98[]; + extern u8 D_801A8B58; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801A8A98[1] = 0xff; + D_801A8A98[2] = 0x10; + D_801A8A98[0] = 0x10; + D_801A8A98[6] = 0; + D_801A8A98[5] = 0; + D_801A8A98[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801A8A98, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801A8B58, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801A8A98); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8016AB6C", func_8016C998); + + +extern void (*D_80181CB0[])(void); + +void func_8016CB84(void *a0) { + D_80181CB0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801A8B58[]; + + + Blk_8016CF04_8016CF04 *p = &D_801A8B58[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80181CCC[])(void); + +void func_8016D19C(void *a0) { + D_80181CCC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80181CD4[])(void); + +void func_8016D428(void *a0) { + D_80181CD4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80181D3C[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80181D3C[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80181CE0; +extern u8 D_80181CEC; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80181CE0, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80181CEC); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80181D70[])(void); + +void func_8016DEA4(void *a0) { + D_80181D70[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80181D78[])(void); + +void func_8016DF20(void *a0) { + D_80181D78[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80181DCC[])(void); + +void func_8016E5B8(void *a0) { + D_80181DCC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80181D8C[4]; + extern s32 D_80181DAC; + extern s32 D_80181DB4; + extern s32 D_80181DBC; + extern s32 D_80181DC4; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80181D8C[0], pp, &tmp); + RotTransSV(&D_80181D8C[1], &prim.v[1], &tmp); + RotTransSV(&D_80181D8C[2], &prim.v[2], &tmp); + RotTransSV(&D_80181D8C[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80181DAC; + prim.f1 = D_80181DB4; + prim.f2 = D_80181DBC; + prim.f3 = D_80181DC4; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80181E0C[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80181E0C[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80181E00[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80181E00[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80181DF0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80181DF0[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80181E00[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80181E00[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80181E00[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80181E1C; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80181E1C; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80181E94[])(void); + +void func_8016F6E0(void *a0) { + D_80181E94[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80181E9C[])(void); + +void func_8016F798(void *a0) { + D_80181E9C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80181EA4[])(void); + +void func_8016F834(void *a0) { + D_80181EA4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80181EAC[])(void); + +void func_8016F8E4(void *a0) { + D_80181EAC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80181EB4[])(void); + +void func_8016F9C4(void *a0) { + D_80181EB4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80181EBC[])(void); + +void func_8016FA84(void *a0) { + D_80181EBC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80181EC8[])(void); + +void func_8016FB7C(void *a0) { + D_80181EC8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80181ED4[])(void); + +void func_8016FC90(void *a0) { + D_80181ED4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80181EE0[])(void); + +void func_8016FDB4(void *a0) { + D_80181EE0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80181EF0[])(void); + +void func_8016FF30(void *a0) { + D_80181EF0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80181F00[])(void); + +void func_8016FFDC(void *a0) { + D_80181F00[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80181F08[])(void); + +void func_80170150(void *a0) { + D_80181F08[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80181F10[])(void); + +void func_80170240(void *a0) { + D_80181F10[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80181F18[])(void); + +void func_801702FC(void *a0) { + D_80181F18[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80181F20[])(void); + +void func_801703E0(void *a0) { + D_80181F20[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80181F28[])(void); + +void func_801704B0(void *a0) { + D_80181F28[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80181F30[])(void); + +void func_80170548(void *a0) { + D_80181F30[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80181F38[])(void); + +void func_801705F8(void *a0) { + D_80181F38[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80181F40[])(void); + +void func_801706AC(void *a0) { + D_80181F40[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80181F48[])(void); + +void func_80170748(void *a0) { + D_80181F48[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80181F50[])(void); + +void func_80170810(void *a0) { + D_80181F50[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80181F58[])(void); + +void func_80170AD8(void *a0) { + D_80181F58[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80181F60[])(void); + +void func_80170BD8(void *a0) { + D_80181F60[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80181F68[])(void); + +void func_80170C74(void *a0) { + D_80181F68[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80181F70[])(void); + +void func_80170D68(void *a0) { + D_80181F70[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80181F78[])(void); + +void func_80170E34(void *a0) { + D_80181F78[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80181F80[])(void); + +void func_80170EFC(void *a0) { + D_80181F80[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80181F88[])(void); + +void func_80170FB0(void *a0) { + D_80181F88[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80181F90[])(void); + +void func_80171064(void *a0) { + D_80181F90[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80181F98[])(void); + +void func_80171120(void *a0) { + D_80181F98[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80181FA0[])(void); + +void func_801711C0(void *a0) { + D_80181FA0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80181FA8[])(void); + +void func_80171260(void *a0) { + D_80181FA8[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80181FB0[])(void); + +void func_801714E4(void *a0) { + D_80181FB0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8016AB6C", func_80172C50); + + +extern void (*D_80181FF4[])(void); + +void func_80172CA0(void *a0) { + D_80181FF4[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80181FB8; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80181FB8); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_115/ov_SC03_115_jr_8015AE2C.c b/src/ov_SC03_115/ov_SC03_115_jr_8015AE2C.c index 67c06d1af..cc39c5a89 100644 --- a/src/ov_SC03_115/ov_SC03_115_jr_8015AE2C.c +++ b/src/ov_SC03_115/ov_SC03_115_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_80183618[])(void); void func_8016AB30(void *a0) { D_80183618[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80183694[])(void); - -void func_8016B4BC(void *a0) { - D_80183694[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_80194298; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_80194298); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80183688[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80183688; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_801836CC[]; -extern unsigned short D_801836D4[]; -extern unsigned short D_801836DC[]; -extern unsigned char D_801942A0[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801942A0 + param_2 * 0x40); - puVar3 = D_801836CC[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_801836D4[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_801836DC[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_80194298; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_80194298, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_801836E4[])(void); - -void func_8016BBA4(void *a0) { - D_801836E4[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801943D4; - extern u8 D_801943D5; - extern u8 D_801943D6; - extern M2C_UNK D_801943D8; - extern u8 D_801943D9; - extern u8 D_801943DA; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801943D4) = 0x20; - D_801943D5 = 0x20; - D_801943D6 = 0; - (*(u8 *)&D_801943D8) = 0xc0; - D_801943D9 = 0xc0; - D_801943DA = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801943D4; -extern M2C_UNK D_801943D8; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801943D4, &D_801943D8, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801943D5; - extern u8 D_801943D6; - extern u8 D_801943D9; - extern u8 D_801943DA; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801943D4); - if (*p1 != 0) *p1 -= 4; - if (D_801943D5 != 0) D_801943D5 -= 4; - if (D_801943D6 != 0) D_801943D6 -= 4; - p2 = &(*(u8 *)&D_801943D8); - if (*p2 != 0) *p2 -= 4; - if (D_801943D9 != 0) D_801943D9 -= 4; - if (D_801943DA != 0) D_801943DA -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801943D4), &(*(int *)&D_801943D8), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_80194360; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_80194360); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_801836F4; - extern s32 D_801836FC; - extern s32 D_80183704; - extern s32 D_8018370C; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_801836F4, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_801836FC, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80183704, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_8018370C, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80183714[])(void); - -void func_8016C14C(void *a0) { - D_80183714[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801943DC[]; -extern u8 D_801943E4[]; -extern u8 D_80194394[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801943DC, D_801943E4, D_80194394); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801943F0[]; - extern u8 D_801944B0; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801943F0[1] = 0xff; - D_801943F0[2] = 0x10; - D_801943F0[0] = 0x10; - D_801943F0[6] = 0; - D_801943F0[5] = 0; - D_801943F0[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801943F0, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801944B0, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801943F0); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8015AE2C", func_8016C998); - - -extern void (*D_8018371C[])(void); - -void func_8016CB84(void *a0) { - D_8018371C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801944B0[]; - - - Blk_8016CF04_8016CF04 *p = &D_801944B0[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80183738[])(void); - -void func_8016D19C(void *a0) { - D_80183738[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80183740[])(void); - -void func_8016D428(void *a0) { - D_80183740[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_801837A8[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_801837A8[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_8018374C; -extern u8 D_80183758; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018374C, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80183758); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8015AE2C", func_8016DC20); - - -extern void (*D_801837DC[])(void); - -void func_8016DEA4(void *a0) { - D_801837DC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_801837E4[])(void); - -void func_8016DF20(void *a0) { - D_801837E4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80183838[])(void); - -void func_8016E5B8(void *a0) { - D_80183838[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_801837F8[4]; - extern s32 D_80183818; - extern s32 D_80183820; - extern s32 D_80183828; - extern s32 D_80183830; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_801837F8[0], pp, &tmp); - RotTransSV(&D_801837F8[1], &prim.v[1], &tmp); - RotTransSV(&D_801837F8[2], &prim.v[2], &tmp); - RotTransSV(&D_801837F8[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80183818; - prim.f1 = D_80183820; - prim.f2 = D_80183828; - prim.f3 = D_80183830; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80183878[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80183878[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_8018386C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_8018386C[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_8018385C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_8018385C[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018386C[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_8018386C[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_8018386C[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80183888; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80183888; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80183900[])(void); - -void func_8016F6E0(void *a0) { - D_80183900[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80183908[])(void); - -void func_8016F798(void *a0) { - D_80183908[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80183910[])(void); - -void func_8016F834(void *a0) { - D_80183910[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80183918[])(void); - -void func_8016F8E4(void *a0) { - D_80183918[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80183920[])(void); - -void func_8016F9C4(void *a0) { - D_80183920[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80183928[])(void); - -void func_8016FA84(void *a0) { - D_80183928[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80183934[])(void); - -void func_8016FB7C(void *a0) { - D_80183934[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80183940[])(void); - -void func_8016FC90(void *a0) { - D_80183940[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_8018394C[])(void); - -void func_8016FDB4(void *a0) { - D_8018394C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_8018395C[])(void); - -void func_8016FF30(void *a0) { - D_8018395C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_8018396C[])(void); - -void func_8016FFDC(void *a0) { - D_8018396C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80183974[])(void); - -void func_80170150(void *a0) { - D_80183974[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_8018397C[])(void); - -void func_80170240(void *a0) { - D_8018397C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80183984[])(void); - -void func_801702FC(void *a0) { - D_80183984[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_8018398C[])(void); - -void func_801703E0(void *a0) { - D_8018398C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80183994[])(void); - -void func_801704B0(void *a0) { - D_80183994[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_8018399C[])(void); - -void func_80170548(void *a0) { - D_8018399C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_801839A4[])(void); - -void func_801705F8(void *a0) { - D_801839A4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_801839AC[])(void); - -void func_801706AC(void *a0) { - D_801839AC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_801839B4[])(void); - -void func_80170748(void *a0) { - D_801839B4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_801839BC[])(void); - -void func_80170810(void *a0) { - D_801839BC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_801839C4[])(void); - -void func_80170AD8(void *a0) { - D_801839C4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_801839CC[])(void); - -void func_80170BD8(void *a0) { - D_801839CC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_801839D4[])(void); - -void func_80170C74(void *a0) { - D_801839D4[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8015AE2C", func_80170CF0); - - -extern void (*D_801839DC[])(void); - -void func_80170D68(void *a0) { - D_801839DC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_801839E4[])(void); - -void func_80170E34(void *a0) { - D_801839E4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_801839EC[])(void); - -void func_80170EFC(void *a0) { - D_801839EC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_801839F4[])(void); - -void func_80170FB0(void *a0) { - D_801839F4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_801839FC[])(void); - -void func_80171064(void *a0) { - D_801839FC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80183A04[])(void); - -void func_80171120(void *a0) { - D_80183A04[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80183A0C[])(void); - -void func_801711C0(void *a0) { - D_80183A0C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80183A14[])(void); - -void func_80171260(void *a0) { - D_80183A14[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80183A1C[])(void); - -void func_801714E4(void *a0) { - D_80183A1C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8015AE2C", func_80172C50); - - -extern void (*D_80183A60[])(void); - -void func_80172CA0(void *a0) { - D_80183A60[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80183A24; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80183A24); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_115/ov_SC03_115_jr_8016AB6C.c b/src/ov_SC03_115/ov_SC03_115_jr_8016AB6C.c new file mode 100644 index 000000000..139826910 --- /dev/null +++ b/src/ov_SC03_115/ov_SC03_115_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801829E4; +extern u8 D_80182954; +extern u8 D_80182930; +extern u8 D_8018290C; +extern u8 D_801829C0; +extern u8 D_8018299C; +extern u8 D_80182978; +extern u8 D_801828E8; +extern void func_80145934(void); +extern u8 D_80182A74; +extern u8 D_80182A50; +extern u8 D_80182A2C; +extern u8 D_80182A08; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80181E6C[]; +extern unsigned char D_80181E9C[]; +extern unsigned char D_80181EEC[]; +extern unsigned char D_80181F1C[]; +extern unsigned char D_80181F4C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80181F9C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80182064[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801820EC[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801820F4; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_80193E28; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_80193E2C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80182124; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801821CC[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801821F0[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801821E0; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80182204[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80182210[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80182220[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80182238[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80182228; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018224C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80182268[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80182258; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018227C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80182290[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801822A4; +extern void (*D_801822CC[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801822AC; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80182318[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018231C[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80182780[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80182790[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_80193E60; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_801827B8[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80182798; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_801827A8; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801827F8[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80182800[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_801827CC; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018280C[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_801827DC; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_80193E68; +extern s32 D_80193E74; +extern s32 D_80193E78; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80182848[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018281C[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_80193E70; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80182A98[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_801828B8[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80182B3C[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80182C90[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80182AAC; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80182C98[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80182ABC; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80182ADC; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80182CA0[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80182CC8[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80182CD4[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80182B48[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80182D78; +extern void func_8015D380(s32 a0); +extern unsigned char D_80181E5C[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80182D8C[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80182DC8[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80182E10; +extern u16 D_80182E12; +extern u16 D_80182E14; +extern s32 D_80182E18; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80182E20; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80182B2C; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80182EA4[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80182F54[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80182F84[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80182FE8; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_80193E80[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_8018300C[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_80193ED8[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80183054[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80183044; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_8019374C[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_8018305C[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_801830B0[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80183078; +extern s16 D_801830AC; +extern s16 D_801830AA; +extern s16 D_801830A8; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_801830BC[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_80193F38; +extern u8 D_80193F39; +extern u8 D_80193F3A; +extern u8 D_80193F3B; +extern u8 D_80193F3C; +extern u8 D_80193F3D; +extern u8 D_80193F3E; +extern u8 D_80193F3F; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_801830CC[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_80193F78; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80183110[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_8018318C[]; +extern s32 D_801831AC[]; +extern u8 D_80183228[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80183248[]; +extern u8 D_80183268[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80183304[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80183380[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_8019375C; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_8018338C[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80183394[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_8018345C[])(void); +extern void func_80166618(void *a0); +extern void (*D_8018346C[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_8018347C[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80183488[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_801833E8[]; +extern u8 D_801833FC[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_801834A0[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_801834A8[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_801834B0[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_801834B8[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_801834C0[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_801834C8[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_801834D0[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80183584[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_8018358C[])(void); +extern void func_80169F00(void *a0); +extern char D_8018353C[]; +extern char D_801834FC[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_801835C4[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_801835D0[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80183618[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_801835D8[]; + extern u8 D_801835E8[]; + extern u8 D_80194248[]; + extern u8 D_80194270[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_801835D8, D_80194248) + 3; + func_8001CE28(obj, D_80194248); + } else { + var_s3 = func_80024054(D_801835E8, D_80194270) + 9; + func_8001CE28(obj, D_80194270); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80183694[])(void); + +void func_8016B4BC(void *a0) { + D_80183694[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_80194298; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_80194298); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80183688[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80183688; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_801836CC[]; +extern unsigned short D_801836D4[]; +extern unsigned short D_801836DC[]; +extern unsigned char D_801942A0[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801942A0 + param_2 * 0x40); + puVar3 = D_801836CC[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_801836D4[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_801836DC[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_80194298; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_80194298, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_801836E4[])(void); + +void func_8016BBA4(void *a0) { + D_801836E4[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801943D4; + extern u8 D_801943D5; + extern u8 D_801943D6; + extern M2C_UNK D_801943D8; + extern u8 D_801943D9; + extern u8 D_801943DA; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801943D4) = 0x20; + D_801943D5 = 0x20; + D_801943D6 = 0; + (*(u8 *)&D_801943D8) = 0xc0; + D_801943D9 = 0xc0; + D_801943DA = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801943D4; +extern M2C_UNK D_801943D8; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801943D4, &D_801943D8, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801943D5; + extern u8 D_801943D6; + extern u8 D_801943D9; + extern u8 D_801943DA; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801943D4); + if (*p1 != 0) *p1 -= 4; + if (D_801943D5 != 0) D_801943D5 -= 4; + if (D_801943D6 != 0) D_801943D6 -= 4; + p2 = &(*(u8 *)&D_801943D8); + if (*p2 != 0) *p2 -= 4; + if (D_801943D9 != 0) D_801943D9 -= 4; + if (D_801943DA != 0) D_801943DA -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801943D4), &(*(int *)&D_801943D8), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_80194360; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_80194360); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_801836F4; + extern s32 D_801836FC; + extern s32 D_80183704; + extern s32 D_8018370C; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_801836F4, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_801836FC, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80183704, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_8018370C, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80183714[])(void); + +void func_8016C14C(void *a0) { + D_80183714[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801943DC[]; +extern u8 D_801943E4[]; +extern u8 D_80194394[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801943DC, D_801943E4, D_80194394); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801943F0[]; + extern u8 D_801944B0; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801943F0[1] = 0xff; + D_801943F0[2] = 0x10; + D_801943F0[0] = 0x10; + D_801943F0[6] = 0; + D_801943F0[5] = 0; + D_801943F0[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801943F0, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801944B0, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801943F0); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8016AB6C", func_8016C998); + + +extern void (*D_8018371C[])(void); + +void func_8016CB84(void *a0) { + D_8018371C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801944B0[]; + + + Blk_8016CF04_8016CF04 *p = &D_801944B0[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80183738[])(void); + +void func_8016D19C(void *a0) { + D_80183738[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80183740[])(void); + +void func_8016D428(void *a0) { + D_80183740[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_801837A8[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_801837A8[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_8018374C; +extern u8 D_80183758; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018374C, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80183758); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8016AB6C", func_8016DC20); + + +extern void (*D_801837DC[])(void); + +void func_8016DEA4(void *a0) { + D_801837DC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_801837E4[])(void); + +void func_8016DF20(void *a0) { + D_801837E4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80183838[])(void); + +void func_8016E5B8(void *a0) { + D_80183838[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_801837F8[4]; + extern s32 D_80183818; + extern s32 D_80183820; + extern s32 D_80183828; + extern s32 D_80183830; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_801837F8[0], pp, &tmp); + RotTransSV(&D_801837F8[1], &prim.v[1], &tmp); + RotTransSV(&D_801837F8[2], &prim.v[2], &tmp); + RotTransSV(&D_801837F8[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80183818; + prim.f1 = D_80183820; + prim.f2 = D_80183828; + prim.f3 = D_80183830; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80183878[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80183878[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_8018386C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_8018386C[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_8018385C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_8018385C[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018386C[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_8018386C[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_8018386C[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80183888; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80183888; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80183900[])(void); + +void func_8016F6E0(void *a0) { + D_80183900[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80183908[])(void); + +void func_8016F798(void *a0) { + D_80183908[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80183910[])(void); + +void func_8016F834(void *a0) { + D_80183910[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80183918[])(void); + +void func_8016F8E4(void *a0) { + D_80183918[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80183920[])(void); + +void func_8016F9C4(void *a0) { + D_80183920[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80183928[])(void); + +void func_8016FA84(void *a0) { + D_80183928[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80183934[])(void); + +void func_8016FB7C(void *a0) { + D_80183934[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80183940[])(void); + +void func_8016FC90(void *a0) { + D_80183940[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_8018394C[])(void); + +void func_8016FDB4(void *a0) { + D_8018394C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_8018395C[])(void); + +void func_8016FF30(void *a0) { + D_8018395C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_8018396C[])(void); + +void func_8016FFDC(void *a0) { + D_8018396C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80183974[])(void); + +void func_80170150(void *a0) { + D_80183974[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_8018397C[])(void); + +void func_80170240(void *a0) { + D_8018397C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80183984[])(void); + +void func_801702FC(void *a0) { + D_80183984[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_8018398C[])(void); + +void func_801703E0(void *a0) { + D_8018398C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80183994[])(void); + +void func_801704B0(void *a0) { + D_80183994[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_8018399C[])(void); + +void func_80170548(void *a0) { + D_8018399C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_801839A4[])(void); + +void func_801705F8(void *a0) { + D_801839A4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_801839AC[])(void); + +void func_801706AC(void *a0) { + D_801839AC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_801839B4[])(void); + +void func_80170748(void *a0) { + D_801839B4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_801839BC[])(void); + +void func_80170810(void *a0) { + D_801839BC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_801839C4[])(void); + +void func_80170AD8(void *a0) { + D_801839C4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_801839CC[])(void); + +void func_80170BD8(void *a0) { + D_801839CC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_801839D4[])(void); + +void func_80170C74(void *a0) { + D_801839D4[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8016AB6C", func_80170CF0); + + +extern void (*D_801839DC[])(void); + +void func_80170D68(void *a0) { + D_801839DC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_801839E4[])(void); + +void func_80170E34(void *a0) { + D_801839E4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_801839EC[])(void); + +void func_80170EFC(void *a0) { + D_801839EC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_801839F4[])(void); + +void func_80170FB0(void *a0) { + D_801839F4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_801839FC[])(void); + +void func_80171064(void *a0) { + D_801839FC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80183A04[])(void); + +void func_80171120(void *a0) { + D_80183A04[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80183A0C[])(void); + +void func_801711C0(void *a0) { + D_80183A0C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80183A14[])(void); + +void func_80171260(void *a0) { + D_80183A14[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80183A1C[])(void); + +void func_801714E4(void *a0) { + D_80183A1C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8016AB6C", func_80172C50); + + +extern void (*D_80183A60[])(void); + +void func_80172CA0(void *a0) { + D_80183A60[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80183A24; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80183A24); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_116/ov_SC03_116_jr_8015AE2C.c b/src/ov_SC03_116/ov_SC03_116_jr_8015AE2C.c index 3134ac18d..0401995bf 100644 --- a/src/ov_SC03_116/ov_SC03_116_jr_8015AE2C.c +++ b/src/ov_SC03_116/ov_SC03_116_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_80185A1C[])(void); void func_8016AB30(void *a0) { D_80185A1C[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80185A98[])(void); - -void func_8016B4BC(void *a0) { - D_80185A98[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_80196E28; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_80196E28); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80185A8C[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80185A8C; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80185AD0[]; -extern unsigned short D_80185AD8[]; -extern unsigned short D_80185AE0[]; -extern unsigned char D_80196E30[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_80196E30 + param_2 * 0x40); - puVar3 = D_80185AD0[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80185AD8[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80185AE0[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_80196E28; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_80196E28, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80185AE8[])(void); - -void func_8016BBA4(void *a0) { - D_80185AE8[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_80196F64; - extern u8 D_80196F65; - extern u8 D_80196F66; - extern M2C_UNK D_80196F68; - extern u8 D_80196F69; - extern u8 D_80196F6A; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_80196F64) = 0x20; - D_80196F65 = 0x20; - D_80196F66 = 0; - (*(u8 *)&D_80196F68) = 0xc0; - D_80196F69 = 0xc0; - D_80196F6A = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_80196F64; -extern M2C_UNK D_80196F68; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_80196F64, &D_80196F68, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_80196F65; - extern u8 D_80196F66; - extern u8 D_80196F69; - extern u8 D_80196F6A; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_80196F64); - if (*p1 != 0) *p1 -= 4; - if (D_80196F65 != 0) D_80196F65 -= 4; - if (D_80196F66 != 0) D_80196F66 -= 4; - p2 = &(*(u8 *)&D_80196F68); - if (*p2 != 0) *p2 -= 4; - if (D_80196F69 != 0) D_80196F69 -= 4; - if (D_80196F6A != 0) D_80196F6A -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_80196F64), &(*(int *)&D_80196F68), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_80196EF0; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_80196EF0); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80185AF8; - extern s32 D_80185B00; - extern s32 D_80185B08; - extern s32 D_80185B10; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80185AF8, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80185B00, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80185B08, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80185B10, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80185B18[])(void); - -void func_8016C14C(void *a0) { - D_80185B18[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_80196F6C[]; -extern u8 D_80196F74[]; -extern u8 D_80196F24[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_80196F6C, D_80196F74, D_80196F24); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_80196F80[]; - extern u8 D_80197040; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_80196F80[1] = 0xff; - D_80196F80[2] = 0x10; - D_80196F80[0] = 0x10; - D_80196F80[6] = 0; - D_80196F80[5] = 0; - D_80196F80[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_80196F80, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_80197040, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_80196F80); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8015AE2C", func_8016C998); - - -extern void (*D_80185B20[])(void); - -void func_8016CB84(void *a0) { - D_80185B20[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_80197040[]; - - - Blk_8016CF04_8016CF04 *p = &D_80197040[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80185B3C[])(void); - -void func_8016D19C(void *a0) { - D_80185B3C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80185B44[])(void); - -void func_8016D428(void *a0) { - D_80185B44[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80185BAC[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80185BAC[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80185B50; -extern u8 D_80185B5C; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80185B50, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80185B5C); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80185BE0[])(void); - -void func_8016DEA4(void *a0) { - D_80185BE0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80185BE8[])(void); - -void func_8016DF20(void *a0) { - D_80185BE8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80185C3C[])(void); - -void func_8016E5B8(void *a0) { - D_80185C3C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80185BFC[4]; - extern s32 D_80185C1C; - extern s32 D_80185C24; - extern s32 D_80185C2C; - extern s32 D_80185C34; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80185BFC[0], pp, &tmp); - RotTransSV(&D_80185BFC[1], &prim.v[1], &tmp); - RotTransSV(&D_80185BFC[2], &prim.v[2], &tmp); - RotTransSV(&D_80185BFC[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80185C1C; - prim.f1 = D_80185C24; - prim.f2 = D_80185C2C; - prim.f3 = D_80185C34; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80185C7C[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80185C7C[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80185C70[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80185C70[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80185C60[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80185C60[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80185C70[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80185C70[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80185C70[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80185C8C; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80185C8C; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80185D04[])(void); - -void func_8016F6E0(void *a0) { - D_80185D04[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80185D0C[])(void); - -void func_8016F798(void *a0) { - D_80185D0C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80185D14[])(void); - -void func_8016F834(void *a0) { - D_80185D14[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80185D1C[])(void); - -void func_8016F8E4(void *a0) { - D_80185D1C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80185D24[])(void); - -void func_8016F9C4(void *a0) { - D_80185D24[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80185D2C[])(void); - -void func_8016FA84(void *a0) { - D_80185D2C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80185D38[])(void); - -void func_8016FB7C(void *a0) { - D_80185D38[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80185D44[])(void); - -void func_8016FC90(void *a0) { - D_80185D44[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80185D50[])(void); - -void func_8016FDB4(void *a0) { - D_80185D50[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80185D60[])(void); - -void func_8016FF30(void *a0) { - D_80185D60[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80185D70[])(void); - -void func_8016FFDC(void *a0) { - D_80185D70[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80185D78[])(void); - -void func_80170150(void *a0) { - D_80185D78[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80185D80[])(void); - -void func_80170240(void *a0) { - D_80185D80[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80185D88[])(void); - -void func_801702FC(void *a0) { - D_80185D88[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80185D90[])(void); - -void func_801703E0(void *a0) { - D_80185D90[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80185D98[])(void); - -void func_801704B0(void *a0) { - D_80185D98[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80185DA0[])(void); - -void func_80170548(void *a0) { - D_80185DA0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80185DA8[])(void); - -void func_801705F8(void *a0) { - D_80185DA8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80185DB0[])(void); - -void func_801706AC(void *a0) { - D_80185DB0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80185DB8[])(void); - -void func_80170748(void *a0) { - D_80185DB8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80185DC0[])(void); - -void func_80170810(void *a0) { - D_80185DC0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80185DC8[])(void); - -void func_80170AD8(void *a0) { - D_80185DC8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80185DD0[])(void); - -void func_80170BD8(void *a0) { - D_80185DD0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80185DD8[])(void); - -void func_80170C74(void *a0) { - D_80185DD8[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80185DE0[])(void); - -void func_80170D68(void *a0) { - D_80185DE0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80185DE8[])(void); - -void func_80170E34(void *a0) { - D_80185DE8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80185DF0[])(void); - -void func_80170EFC(void *a0) { - D_80185DF0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80185DF8[])(void); - -void func_80170FB0(void *a0) { - D_80185DF8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80185E00[])(void); - -void func_80171064(void *a0) { - D_80185E00[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80185E08[])(void); - -void func_80171120(void *a0) { - D_80185E08[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80185E10[])(void); - -void func_801711C0(void *a0) { - D_80185E10[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80185E18[])(void); - -void func_80171260(void *a0) { - D_80185E18[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80185E20[])(void); - -void func_801714E4(void *a0) { - D_80185E20[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8015AE2C", func_80172C50); - - -extern void (*D_80185E64[])(void); - -void func_80172CA0(void *a0) { - D_80185E64[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80185E28; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80185E28); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_116/ov_SC03_116_jr_8016AB6C.c b/src/ov_SC03_116/ov_SC03_116_jr_8016AB6C.c new file mode 100644 index 000000000..1162af9fd --- /dev/null +++ b/src/ov_SC03_116/ov_SC03_116_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80184DE8; +extern u8 D_80184D58; +extern u8 D_80184D34; +extern u8 D_80184D10; +extern u8 D_80184DC4; +extern u8 D_80184DA0; +extern u8 D_80184D7C; +extern u8 D_80184CEC; +extern void func_80145934(void); +extern u8 D_80184E78; +extern u8 D_80184E54; +extern u8 D_80184E30; +extern u8 D_80184E0C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80184270[]; +extern unsigned char D_801842A0[]; +extern unsigned char D_801842F0[]; +extern unsigned char D_80184320[]; +extern unsigned char D_80184350[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801843A0[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80184468[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801844F0[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801844F8; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801969B8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801969BC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80184528; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801845D0[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801845F4[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801845E4; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80184608[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80184614[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80184624[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018463C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018462C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80184650[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018466C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018465C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80184680[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80184694[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801846A8; +extern void (*D_801846D0[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801846B0; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018471C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80184720[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80184B84[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80184B94[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801969F0; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80184BBC[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80184B9C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80184BAC; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80184BFC[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80184C04[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80184BD0; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80184C10[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80184BE0; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801969F8; +extern s32 D_80196A04; +extern s32 D_80196A08; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80184C4C[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80184C20[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_80196A00; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80184E9C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80184CBC[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80184F40[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80185094[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80184EB0; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018509C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80184EC0; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80184EE0; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_801850A4[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_801850CC[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_801850D8[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80184F4C[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_8018517C; +extern void func_8015D380(s32 a0); +extern unsigned char D_80184260[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80185190[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_801851CC[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80185214; +extern u16 D_80185216; +extern u16 D_80185218; +extern s32 D_8018521C; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80185224; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80184F30; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_801852A8[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80185358[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80185388[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_801853EC; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_80196A10[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80185410[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_80196A68[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80185458[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80185448; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801962E8[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80185460[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_801854B4[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_8018547C; +extern s16 D_801854B0; +extern s16 D_801854AE; +extern s16 D_801854AC; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_801854C0[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_80196AC8; +extern u8 D_80196AC9; +extern u8 D_80196ACA; +extern u8 D_80196ACB; +extern u8 D_80196ACC; +extern u8 D_80196ACD; +extern u8 D_80196ACE; +extern u8 D_80196ACF; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_801854D0[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_80196B08; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80185514[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80185590[]; +extern s32 D_801855B0[]; +extern u8 D_8018562C[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_8018564C[]; +extern u8 D_8018566C[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80185708[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80185784[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801962F8; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80185790[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80185798[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80185860[])(void); +extern void func_80166618(void *a0); +extern void (*D_80185870[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80185880[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_8018588C[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_801857EC[]; +extern u8 D_80185800[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_801858A4[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_801858AC[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_801858B4[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_801858BC[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_801858C4[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_801858CC[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_801858D4[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80185988[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80185990[])(void); +extern void func_80169F00(void *a0); +extern char D_80185940[]; +extern char D_80185900[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_801859C8[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_801859D4[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80185A1C[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_801859DC[]; + extern u8 D_801859EC[]; + extern u8 D_80196DD8[]; + extern u8 D_80196E00[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_801859DC, D_80196DD8) + 3; + func_8001CE28(obj, D_80196DD8); + } else { + var_s3 = func_80024054(D_801859EC, D_80196E00) + 9; + func_8001CE28(obj, D_80196E00); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80185A98[])(void); + +void func_8016B4BC(void *a0) { + D_80185A98[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_80196E28; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_80196E28); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80185A8C[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80185A8C; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80185AD0[]; +extern unsigned short D_80185AD8[]; +extern unsigned short D_80185AE0[]; +extern unsigned char D_80196E30[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_80196E30 + param_2 * 0x40); + puVar3 = D_80185AD0[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80185AD8[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80185AE0[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_80196E28; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_80196E28, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80185AE8[])(void); + +void func_8016BBA4(void *a0) { + D_80185AE8[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_80196F64; + extern u8 D_80196F65; + extern u8 D_80196F66; + extern M2C_UNK D_80196F68; + extern u8 D_80196F69; + extern u8 D_80196F6A; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_80196F64) = 0x20; + D_80196F65 = 0x20; + D_80196F66 = 0; + (*(u8 *)&D_80196F68) = 0xc0; + D_80196F69 = 0xc0; + D_80196F6A = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_80196F64; +extern M2C_UNK D_80196F68; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_80196F64, &D_80196F68, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_80196F65; + extern u8 D_80196F66; + extern u8 D_80196F69; + extern u8 D_80196F6A; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_80196F64); + if (*p1 != 0) *p1 -= 4; + if (D_80196F65 != 0) D_80196F65 -= 4; + if (D_80196F66 != 0) D_80196F66 -= 4; + p2 = &(*(u8 *)&D_80196F68); + if (*p2 != 0) *p2 -= 4; + if (D_80196F69 != 0) D_80196F69 -= 4; + if (D_80196F6A != 0) D_80196F6A -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_80196F64), &(*(int *)&D_80196F68), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_80196EF0; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_80196EF0); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80185AF8; + extern s32 D_80185B00; + extern s32 D_80185B08; + extern s32 D_80185B10; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80185AF8, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80185B00, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80185B08, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80185B10, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80185B18[])(void); + +void func_8016C14C(void *a0) { + D_80185B18[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_80196F6C[]; +extern u8 D_80196F74[]; +extern u8 D_80196F24[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_80196F6C, D_80196F74, D_80196F24); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_80196F80[]; + extern u8 D_80197040; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_80196F80[1] = 0xff; + D_80196F80[2] = 0x10; + D_80196F80[0] = 0x10; + D_80196F80[6] = 0; + D_80196F80[5] = 0; + D_80196F80[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_80196F80, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_80197040, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_80196F80); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8016AB6C", func_8016C998); + + +extern void (*D_80185B20[])(void); + +void func_8016CB84(void *a0) { + D_80185B20[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_80197040[]; + + + Blk_8016CF04_8016CF04 *p = &D_80197040[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80185B3C[])(void); + +void func_8016D19C(void *a0) { + D_80185B3C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80185B44[])(void); + +void func_8016D428(void *a0) { + D_80185B44[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80185BAC[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80185BAC[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80185B50; +extern u8 D_80185B5C; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80185B50, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80185B5C); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80185BE0[])(void); + +void func_8016DEA4(void *a0) { + D_80185BE0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80185BE8[])(void); + +void func_8016DF20(void *a0) { + D_80185BE8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80185C3C[])(void); + +void func_8016E5B8(void *a0) { + D_80185C3C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80185BFC[4]; + extern s32 D_80185C1C; + extern s32 D_80185C24; + extern s32 D_80185C2C; + extern s32 D_80185C34; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80185BFC[0], pp, &tmp); + RotTransSV(&D_80185BFC[1], &prim.v[1], &tmp); + RotTransSV(&D_80185BFC[2], &prim.v[2], &tmp); + RotTransSV(&D_80185BFC[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80185C1C; + prim.f1 = D_80185C24; + prim.f2 = D_80185C2C; + prim.f3 = D_80185C34; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80185C7C[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80185C7C[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80185C70[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80185C70[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80185C60[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80185C60[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80185C70[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80185C70[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80185C70[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80185C8C; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80185C8C; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80185D04[])(void); + +void func_8016F6E0(void *a0) { + D_80185D04[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80185D0C[])(void); + +void func_8016F798(void *a0) { + D_80185D0C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80185D14[])(void); + +void func_8016F834(void *a0) { + D_80185D14[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80185D1C[])(void); + +void func_8016F8E4(void *a0) { + D_80185D1C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80185D24[])(void); + +void func_8016F9C4(void *a0) { + D_80185D24[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80185D2C[])(void); + +void func_8016FA84(void *a0) { + D_80185D2C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80185D38[])(void); + +void func_8016FB7C(void *a0) { + D_80185D38[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80185D44[])(void); + +void func_8016FC90(void *a0) { + D_80185D44[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80185D50[])(void); + +void func_8016FDB4(void *a0) { + D_80185D50[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80185D60[])(void); + +void func_8016FF30(void *a0) { + D_80185D60[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80185D70[])(void); + +void func_8016FFDC(void *a0) { + D_80185D70[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80185D78[])(void); + +void func_80170150(void *a0) { + D_80185D78[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80185D80[])(void); + +void func_80170240(void *a0) { + D_80185D80[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80185D88[])(void); + +void func_801702FC(void *a0) { + D_80185D88[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80185D90[])(void); + +void func_801703E0(void *a0) { + D_80185D90[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80185D98[])(void); + +void func_801704B0(void *a0) { + D_80185D98[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80185DA0[])(void); + +void func_80170548(void *a0) { + D_80185DA0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80185DA8[])(void); + +void func_801705F8(void *a0) { + D_80185DA8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80185DB0[])(void); + +void func_801706AC(void *a0) { + D_80185DB0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80185DB8[])(void); + +void func_80170748(void *a0) { + D_80185DB8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80185DC0[])(void); + +void func_80170810(void *a0) { + D_80185DC0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80185DC8[])(void); + +void func_80170AD8(void *a0) { + D_80185DC8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80185DD0[])(void); + +void func_80170BD8(void *a0) { + D_80185DD0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80185DD8[])(void); + +void func_80170C74(void *a0) { + D_80185DD8[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80185DE0[])(void); + +void func_80170D68(void *a0) { + D_80185DE0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80185DE8[])(void); + +void func_80170E34(void *a0) { + D_80185DE8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80185DF0[])(void); + +void func_80170EFC(void *a0) { + D_80185DF0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80185DF8[])(void); + +void func_80170FB0(void *a0) { + D_80185DF8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80185E00[])(void); + +void func_80171064(void *a0) { + D_80185E00[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80185E08[])(void); + +void func_80171120(void *a0) { + D_80185E08[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80185E10[])(void); + +void func_801711C0(void *a0) { + D_80185E10[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80185E18[])(void); + +void func_80171260(void *a0) { + D_80185E18[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80185E20[])(void); + +void func_801714E4(void *a0) { + D_80185E20[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8016AB6C", func_80172C50); + + +extern void (*D_80185E64[])(void); + +void func_80172CA0(void *a0) { + D_80185E64[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80185E28; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80185E28); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_117/ov_SC03_117_jr_8015AE2C.c b/src/ov_SC03_117/ov_SC03_117_jr_8015AE2C.c index 2e26a14f5..8af2a0c97 100644 --- a/src/ov_SC03_117/ov_SC03_117_jr_8015AE2C.c +++ b/src/ov_SC03_117/ov_SC03_117_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_80187A28[])(void); void func_8016AB30(void *a0) { D_80187A28[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80187AA4[])(void); - -void func_8016B4BC(void *a0) { - D_80187AA4[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801CD5A0; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801CD5A0); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80187A98[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80187A98; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80187ADC[]; -extern unsigned short D_80187AE4[]; -extern unsigned short D_80187AEC[]; -extern unsigned char D_801CD5A8[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801CD5A8 + param_2 * 0x40); - puVar3 = D_80187ADC[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80187AE4[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80187AEC[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801CD5A0; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801CD5A0, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80187AF4[])(void); - -void func_8016BBA4(void *a0) { - D_80187AF4[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801CD6DC; - extern u8 D_801CD6DD; - extern u8 D_801CD6DE; - extern M2C_UNK D_801CD6E0; - extern u8 D_801CD6E1; - extern u8 D_801CD6E2; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801CD6DC) = 0x20; - D_801CD6DD = 0x20; - D_801CD6DE = 0; - (*(u8 *)&D_801CD6E0) = 0xc0; - D_801CD6E1 = 0xc0; - D_801CD6E2 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801CD6DC; -extern M2C_UNK D_801CD6E0; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801CD6DC, &D_801CD6E0, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801CD6DD; - extern u8 D_801CD6DE; - extern u8 D_801CD6E1; - extern u8 D_801CD6E2; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801CD6DC); - if (*p1 != 0) *p1 -= 4; - if (D_801CD6DD != 0) D_801CD6DD -= 4; - if (D_801CD6DE != 0) D_801CD6DE -= 4; - p2 = &(*(u8 *)&D_801CD6E0); - if (*p2 != 0) *p2 -= 4; - if (D_801CD6E1 != 0) D_801CD6E1 -= 4; - if (D_801CD6E2 != 0) D_801CD6E2 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801CD6DC), &(*(int *)&D_801CD6E0), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801CD668; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801CD668); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80187B04; - extern s32 D_80187B0C; - extern s32 D_80187B14; - extern s32 D_80187B1C; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80187B04, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80187B0C, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80187B14, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80187B1C, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80187B24[])(void); - -void func_8016C14C(void *a0) { - D_80187B24[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801CD6E4[]; -extern u8 D_801CD6EC[]; -extern u8 D_801CD69C[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801CD6E4, D_801CD6EC, D_801CD69C); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801CD6F8[]; - extern u8 D_801CD7B8; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801CD6F8[1] = 0xff; - D_801CD6F8[2] = 0x10; - D_801CD6F8[0] = 0x10; - D_801CD6F8[6] = 0; - D_801CD6F8[5] = 0; - D_801CD6F8[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801CD6F8, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801CD7B8, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801CD6F8); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8015AE2C", func_8016C998); - - -extern void (*D_80187B2C[])(void); - -void func_8016CB84(void *a0) { - D_80187B2C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801CD7B8[]; - - - Blk_8016CF04_8016CF04 *p = &D_801CD7B8[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80187B48[])(void); - -void func_8016D19C(void *a0) { - D_80187B48[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80187B50[])(void); - -void func_8016D428(void *a0) { - D_80187B50[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80187BB8[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80187BB8[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80187B5C; -extern u8 D_80187B68; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80187B5C, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80187B68); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80187BEC[])(void); - -void func_8016DEA4(void *a0) { - D_80187BEC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80187BF4[])(void); - -void func_8016DF20(void *a0) { - D_80187BF4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80187C48[])(void); - -void func_8016E5B8(void *a0) { - D_80187C48[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80187C08[4]; - extern s32 D_80187C28; - extern s32 D_80187C30; - extern s32 D_80187C38; - extern s32 D_80187C40; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80187C08[0], pp, &tmp); - RotTransSV(&D_80187C08[1], &prim.v[1], &tmp); - RotTransSV(&D_80187C08[2], &prim.v[2], &tmp); - RotTransSV(&D_80187C08[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80187C28; - prim.f1 = D_80187C30; - prim.f2 = D_80187C38; - prim.f3 = D_80187C40; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80187C88[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80187C88[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80187C7C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80187C7C[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80187C6C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80187C6C[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80187C7C[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80187C7C[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80187C7C[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80187C98; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80187C98; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80187D10[])(void); - -void func_8016F6E0(void *a0) { - D_80187D10[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80187D18[])(void); - -void func_8016F798(void *a0) { - D_80187D18[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80187D20[])(void); - -void func_8016F834(void *a0) { - D_80187D20[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80187D28[])(void); - -void func_8016F8E4(void *a0) { - D_80187D28[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80187D30[])(void); - -void func_8016F9C4(void *a0) { - D_80187D30[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80187D38[])(void); - -void func_8016FA84(void *a0) { - D_80187D38[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80187D44[])(void); - -void func_8016FB7C(void *a0) { - D_80187D44[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80187D50[])(void); - -void func_8016FC90(void *a0) { - D_80187D50[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80187D5C[])(void); - -void func_8016FDB4(void *a0) { - D_80187D5C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80187D6C[])(void); - -void func_8016FF30(void *a0) { - D_80187D6C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80187D7C[])(void); - -void func_8016FFDC(void *a0) { - D_80187D7C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80187D84[])(void); - -void func_80170150(void *a0) { - D_80187D84[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80187D8C[])(void); - -void func_80170240(void *a0) { - D_80187D8C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80187D94[])(void); - -void func_801702FC(void *a0) { - D_80187D94[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80187D9C[])(void); - -void func_801703E0(void *a0) { - D_80187D9C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80187DA4[])(void); - -void func_801704B0(void *a0) { - D_80187DA4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80187DAC[])(void); - -void func_80170548(void *a0) { - D_80187DAC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80187DB4[])(void); - -void func_801705F8(void *a0) { - D_80187DB4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80187DBC[])(void); - -void func_801706AC(void *a0) { - D_80187DBC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80187DC4[])(void); - -void func_80170748(void *a0) { - D_80187DC4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80187DCC[])(void); - -void func_80170810(void *a0) { - D_80187DCC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80187DD4[])(void); - -void func_80170AD8(void *a0) { - D_80187DD4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80187DDC[])(void); - -void func_80170BD8(void *a0) { - D_80187DDC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80187DE4[])(void); - -void func_80170C74(void *a0) { - D_80187DE4[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80187DEC[])(void); - -void func_80170D68(void *a0) { - D_80187DEC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80187DF4[])(void); - -void func_80170E34(void *a0) { - D_80187DF4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80187DFC[])(void); - -void func_80170EFC(void *a0) { - D_80187DFC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80187E04[])(void); - -void func_80170FB0(void *a0) { - D_80187E04[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80187E0C[])(void); - -void func_80171064(void *a0) { - D_80187E0C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80187E14[])(void); - -void func_80171120(void *a0) { - D_80187E14[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80187E1C[])(void); - -void func_801711C0(void *a0) { - D_80187E1C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80187E24[])(void); - -void func_80171260(void *a0) { - D_80187E24[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80187E2C[])(void); - -void func_801714E4(void *a0) { - D_80187E2C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8015AE2C", func_80172C50); - - -extern void (*D_80187E70[])(void); - -void func_80172CA0(void *a0) { - D_80187E70[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80187E34; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80187E34); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_117/ov_SC03_117_jr_8016AB6C.c b/src/ov_SC03_117/ov_SC03_117_jr_8016AB6C.c new file mode 100644 index 000000000..c5c8ee38e --- /dev/null +++ b/src/ov_SC03_117/ov_SC03_117_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80186DF4; +extern u8 D_80186D64; +extern u8 D_80186D40; +extern u8 D_80186D1C; +extern u8 D_80186DD0; +extern u8 D_80186DAC; +extern u8 D_80186D88; +extern u8 D_80186CF8; +extern void func_80145934(void); +extern u8 D_80186E84; +extern u8 D_80186E60; +extern u8 D_80186E3C; +extern u8 D_80186E18; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018627C[]; +extern unsigned char D_801862AC[]; +extern unsigned char D_801862FC[]; +extern unsigned char D_8018632C[]; +extern unsigned char D_8018635C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801863AC[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80186474[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801864FC[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80186504; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801CD130; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801CD134; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80186534; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801865DC[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80186600[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801865F0; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80186614[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80186620[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80186630[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80186648[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80186638; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018665C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80186678[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80186668; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018668C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801866A0[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801866B4; +extern void (*D_801866DC[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801866BC; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80186728[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018672C[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80186B90[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80186BA0[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801CD168; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80186BC8[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80186BA8; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80186BB8; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80186C08[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80186C10[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80186BDC; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80186C1C[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80186BEC; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801CD170; +extern s32 D_801CD17C; +extern s32 D_801CD180; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80186C58[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80186C2C[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801CD178; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80186EA8[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80186CC8[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80186F4C[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_801870A0[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80186EBC; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_801870A8[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80186ECC; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80186EEC; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_801870B0[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_801870D8[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_801870E4[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80186F58[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80187188; +extern void func_8015D380(s32 a0); +extern unsigned char D_8018626C[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_8018719C[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_801871D8[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80187220; +extern u16 D_80187222; +extern u16 D_80187224; +extern s32 D_80187228; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80187230; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80186F3C; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_801872B4[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80187364[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80187394[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_801873F8; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801CD188[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_8018741C[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801CD1E0[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80187464[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80187454; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801CC988[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_8018746C[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_801874C0[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80187488; +extern s16 D_801874BC; +extern s16 D_801874BA; +extern s16 D_801874B8; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_801874CC[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801CD240; +extern u8 D_801CD241; +extern u8 D_801CD242; +extern u8 D_801CD243; +extern u8 D_801CD244; +extern u8 D_801CD245; +extern u8 D_801CD246; +extern u8 D_801CD247; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_801874DC[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801CD280; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80187520[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_8018759C[]; +extern s32 D_801875BC[]; +extern u8 D_80187638[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80187658[]; +extern u8 D_80187678[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80187714[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80187790[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801CC998; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_8018779C[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_801877A4[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_8018786C[])(void); +extern void func_80166618(void *a0); +extern void (*D_8018787C[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_8018788C[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80187898[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_801877F8[]; +extern u8 D_8018780C[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_801878B0[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_801878B8[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_801878C0[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_801878C8[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_801878D0[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_801878D8[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_801878E0[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80187994[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_8018799C[])(void); +extern void func_80169F00(void *a0); +extern char D_8018794C[]; +extern char D_8018790C[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_801879D4[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_801879E0[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80187A28[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_801879E8[]; + extern u8 D_801879F8[]; + extern u8 D_801CD550[]; + extern u8 D_801CD578[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_801879E8, D_801CD550) + 3; + func_8001CE28(obj, D_801CD550); + } else { + var_s3 = func_80024054(D_801879F8, D_801CD578) + 9; + func_8001CE28(obj, D_801CD578); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80187AA4[])(void); + +void func_8016B4BC(void *a0) { + D_80187AA4[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801CD5A0; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801CD5A0); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80187A98[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80187A98; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80187ADC[]; +extern unsigned short D_80187AE4[]; +extern unsigned short D_80187AEC[]; +extern unsigned char D_801CD5A8[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801CD5A8 + param_2 * 0x40); + puVar3 = D_80187ADC[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80187AE4[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80187AEC[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801CD5A0; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801CD5A0, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80187AF4[])(void); + +void func_8016BBA4(void *a0) { + D_80187AF4[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801CD6DC; + extern u8 D_801CD6DD; + extern u8 D_801CD6DE; + extern M2C_UNK D_801CD6E0; + extern u8 D_801CD6E1; + extern u8 D_801CD6E2; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801CD6DC) = 0x20; + D_801CD6DD = 0x20; + D_801CD6DE = 0; + (*(u8 *)&D_801CD6E0) = 0xc0; + D_801CD6E1 = 0xc0; + D_801CD6E2 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801CD6DC; +extern M2C_UNK D_801CD6E0; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801CD6DC, &D_801CD6E0, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801CD6DD; + extern u8 D_801CD6DE; + extern u8 D_801CD6E1; + extern u8 D_801CD6E2; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801CD6DC); + if (*p1 != 0) *p1 -= 4; + if (D_801CD6DD != 0) D_801CD6DD -= 4; + if (D_801CD6DE != 0) D_801CD6DE -= 4; + p2 = &(*(u8 *)&D_801CD6E0); + if (*p2 != 0) *p2 -= 4; + if (D_801CD6E1 != 0) D_801CD6E1 -= 4; + if (D_801CD6E2 != 0) D_801CD6E2 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801CD6DC), &(*(int *)&D_801CD6E0), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801CD668; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801CD668); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80187B04; + extern s32 D_80187B0C; + extern s32 D_80187B14; + extern s32 D_80187B1C; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80187B04, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80187B0C, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80187B14, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80187B1C, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80187B24[])(void); + +void func_8016C14C(void *a0) { + D_80187B24[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801CD6E4[]; +extern u8 D_801CD6EC[]; +extern u8 D_801CD69C[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801CD6E4, D_801CD6EC, D_801CD69C); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801CD6F8[]; + extern u8 D_801CD7B8; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801CD6F8[1] = 0xff; + D_801CD6F8[2] = 0x10; + D_801CD6F8[0] = 0x10; + D_801CD6F8[6] = 0; + D_801CD6F8[5] = 0; + D_801CD6F8[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801CD6F8, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801CD7B8, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801CD6F8); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8016AB6C", func_8016C998); + + +extern void (*D_80187B2C[])(void); + +void func_8016CB84(void *a0) { + D_80187B2C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801CD7B8[]; + + + Blk_8016CF04_8016CF04 *p = &D_801CD7B8[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80187B48[])(void); + +void func_8016D19C(void *a0) { + D_80187B48[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80187B50[])(void); + +void func_8016D428(void *a0) { + D_80187B50[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80187BB8[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80187BB8[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80187B5C; +extern u8 D_80187B68; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80187B5C, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80187B68); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80187BEC[])(void); + +void func_8016DEA4(void *a0) { + D_80187BEC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80187BF4[])(void); + +void func_8016DF20(void *a0) { + D_80187BF4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80187C48[])(void); + +void func_8016E5B8(void *a0) { + D_80187C48[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80187C08[4]; + extern s32 D_80187C28; + extern s32 D_80187C30; + extern s32 D_80187C38; + extern s32 D_80187C40; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80187C08[0], pp, &tmp); + RotTransSV(&D_80187C08[1], &prim.v[1], &tmp); + RotTransSV(&D_80187C08[2], &prim.v[2], &tmp); + RotTransSV(&D_80187C08[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80187C28; + prim.f1 = D_80187C30; + prim.f2 = D_80187C38; + prim.f3 = D_80187C40; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80187C88[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80187C88[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80187C7C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80187C7C[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80187C6C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80187C6C[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80187C7C[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80187C7C[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80187C7C[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80187C98; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80187C98; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80187D10[])(void); + +void func_8016F6E0(void *a0) { + D_80187D10[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80187D18[])(void); + +void func_8016F798(void *a0) { + D_80187D18[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80187D20[])(void); + +void func_8016F834(void *a0) { + D_80187D20[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80187D28[])(void); + +void func_8016F8E4(void *a0) { + D_80187D28[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80187D30[])(void); + +void func_8016F9C4(void *a0) { + D_80187D30[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80187D38[])(void); + +void func_8016FA84(void *a0) { + D_80187D38[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80187D44[])(void); + +void func_8016FB7C(void *a0) { + D_80187D44[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80187D50[])(void); + +void func_8016FC90(void *a0) { + D_80187D50[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80187D5C[])(void); + +void func_8016FDB4(void *a0) { + D_80187D5C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80187D6C[])(void); + +void func_8016FF30(void *a0) { + D_80187D6C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80187D7C[])(void); + +void func_8016FFDC(void *a0) { + D_80187D7C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80187D84[])(void); + +void func_80170150(void *a0) { + D_80187D84[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80187D8C[])(void); + +void func_80170240(void *a0) { + D_80187D8C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80187D94[])(void); + +void func_801702FC(void *a0) { + D_80187D94[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80187D9C[])(void); + +void func_801703E0(void *a0) { + D_80187D9C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80187DA4[])(void); + +void func_801704B0(void *a0) { + D_80187DA4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80187DAC[])(void); + +void func_80170548(void *a0) { + D_80187DAC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80187DB4[])(void); + +void func_801705F8(void *a0) { + D_80187DB4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80187DBC[])(void); + +void func_801706AC(void *a0) { + D_80187DBC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80187DC4[])(void); + +void func_80170748(void *a0) { + D_80187DC4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80187DCC[])(void); + +void func_80170810(void *a0) { + D_80187DCC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80187DD4[])(void); + +void func_80170AD8(void *a0) { + D_80187DD4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80187DDC[])(void); + +void func_80170BD8(void *a0) { + D_80187DDC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80187DE4[])(void); + +void func_80170C74(void *a0) { + D_80187DE4[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80187DEC[])(void); + +void func_80170D68(void *a0) { + D_80187DEC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80187DF4[])(void); + +void func_80170E34(void *a0) { + D_80187DF4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80187DFC[])(void); + +void func_80170EFC(void *a0) { + D_80187DFC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80187E04[])(void); + +void func_80170FB0(void *a0) { + D_80187E04[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80187E0C[])(void); + +void func_80171064(void *a0) { + D_80187E0C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80187E14[])(void); + +void func_80171120(void *a0) { + D_80187E14[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80187E1C[])(void); + +void func_801711C0(void *a0) { + D_80187E1C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80187E24[])(void); + +void func_80171260(void *a0) { + D_80187E24[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80187E2C[])(void); + +void func_801714E4(void *a0) { + D_80187E2C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8016AB6C", func_80172C50); + + +extern void (*D_80187E70[])(void); + +void func_80172CA0(void *a0) { + D_80187E70[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80187E34; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80187E34); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_118/ov_SC03_118_jr_8015AE2C.c b/src/ov_SC03_118/ov_SC03_118_jr_8015AE2C.c index fe3d57b3a..0fd35626d 100644 --- a/src/ov_SC03_118/ov_SC03_118_jr_8015AE2C.c +++ b/src/ov_SC03_118/ov_SC03_118_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_8018CAD4[])(void); void func_8016AB30(void *a0) { D_8018CAD4[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_8018CB50[])(void); - -void func_8016B4BC(void *a0) { - D_8018CB50[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801D34F0; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801D34F0); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_8018CB44[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_8018CB44; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_8018CB88[]; -extern unsigned short D_8018CB90[]; -extern unsigned short D_8018CB98[]; -extern unsigned char D_801D34F8[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801D34F8 + param_2 * 0x40); - puVar3 = D_8018CB88[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_8018CB90[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_8018CB98[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801D34F0; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801D34F0, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_8018CBA0[])(void); - -void func_8016BBA4(void *a0) { - D_8018CBA0[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801D362C; - extern u8 D_801D362D; - extern u8 D_801D362E; - extern M2C_UNK D_801D3630; - extern u8 D_801D3631; - extern u8 D_801D3632; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801D362C) = 0x20; - D_801D362D = 0x20; - D_801D362E = 0; - (*(u8 *)&D_801D3630) = 0xc0; - D_801D3631 = 0xc0; - D_801D3632 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801D362C; -extern M2C_UNK D_801D3630; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801D362C, &D_801D3630, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801D362D; - extern u8 D_801D362E; - extern u8 D_801D3631; - extern u8 D_801D3632; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801D362C); - if (*p1 != 0) *p1 -= 4; - if (D_801D362D != 0) D_801D362D -= 4; - if (D_801D362E != 0) D_801D362E -= 4; - p2 = &(*(u8 *)&D_801D3630); - if (*p2 != 0) *p2 -= 4; - if (D_801D3631 != 0) D_801D3631 -= 4; - if (D_801D3632 != 0) D_801D3632 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801D362C), &(*(int *)&D_801D3630), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801D35B8; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801D35B8); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_8018CBB0; - extern s32 D_8018CBB8; - extern s32 D_8018CBC0; - extern s32 D_8018CBC8; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_8018CBB0, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_8018CBB8, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_8018CBC0, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_8018CBC8, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_8018CBD0[])(void); - -void func_8016C14C(void *a0) { - D_8018CBD0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801D3634[]; -extern u8 D_801D363C[]; -extern u8 D_801D35EC[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801D3634, D_801D363C, D_801D35EC); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801D3648[]; - extern u8 D_801D3708; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801D3648[1] = 0xff; - D_801D3648[2] = 0x10; - D_801D3648[0] = 0x10; - D_801D3648[6] = 0; - D_801D3648[5] = 0; - D_801D3648[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801D3648, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801D3708, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801D3648); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8015AE2C", func_8016C998); - - -extern void (*D_8018CBD8[])(void); - -void func_8016CB84(void *a0) { - D_8018CBD8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801D3708[]; - - - Blk_8016CF04_8016CF04 *p = &D_801D3708[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_8018CBF4[])(void); - -void func_8016D19C(void *a0) { - D_8018CBF4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_8018CBFC[])(void); - -void func_8016D428(void *a0) { - D_8018CBFC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_8018CC64[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_8018CC64[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_8018CC08; -extern u8 D_8018CC14; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018CC08, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018CC14); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8015AE2C", func_8016DC20); - - -extern void (*D_8018CC98[])(void); - -void func_8016DEA4(void *a0) { - D_8018CC98[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_8018CCA0[])(void); - -void func_8016DF20(void *a0) { - D_8018CCA0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_8018CCF4[])(void); - -void func_8016E5B8(void *a0) { - D_8018CCF4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_8018CCB4[4]; - extern s32 D_8018CCD4; - extern s32 D_8018CCDC; - extern s32 D_8018CCE4; - extern s32 D_8018CCEC; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_8018CCB4[0], pp, &tmp); - RotTransSV(&D_8018CCB4[1], &prim.v[1], &tmp); - RotTransSV(&D_8018CCB4[2], &prim.v[2], &tmp); - RotTransSV(&D_8018CCB4[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_8018CCD4; - prim.f1 = D_8018CCDC; - prim.f2 = D_8018CCE4; - prim.f3 = D_8018CCEC; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_8018CD34[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_8018CD34[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_8018CD28[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_8018CD28[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_8018CD18[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_8018CD18[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018CD28[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_8018CD28[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_8018CD28[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_8018CD44; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_8018CD44; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_8018CDBC[])(void); - -void func_8016F6E0(void *a0) { - D_8018CDBC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_8018CDC4[])(void); - -void func_8016F798(void *a0) { - D_8018CDC4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_8018CDCC[])(void); - -void func_8016F834(void *a0) { - D_8018CDCC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_8018CDD4[])(void); - -void func_8016F8E4(void *a0) { - D_8018CDD4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_8018CDDC[])(void); - -void func_8016F9C4(void *a0) { - D_8018CDDC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_8018CDE4[])(void); - -void func_8016FA84(void *a0) { - D_8018CDE4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_8018CDF0[])(void); - -void func_8016FB7C(void *a0) { - D_8018CDF0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_8018CDFC[])(void); - -void func_8016FC90(void *a0) { - D_8018CDFC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_8018CE08[])(void); - -void func_8016FDB4(void *a0) { - D_8018CE08[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_8018CE18[])(void); - -void func_8016FF30(void *a0) { - D_8018CE18[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_8018CE28[])(void); - -void func_8016FFDC(void *a0) { - D_8018CE28[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_8018CE30[])(void); - -void func_80170150(void *a0) { - D_8018CE30[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_8018CE38[])(void); - -void func_80170240(void *a0) { - D_8018CE38[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_8018CE40[])(void); - -void func_801702FC(void *a0) { - D_8018CE40[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_8018CE48[])(void); - -void func_801703E0(void *a0) { - D_8018CE48[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_8018CE50[])(void); - -void func_801704B0(void *a0) { - D_8018CE50[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_8018CE58[])(void); - -void func_80170548(void *a0) { - D_8018CE58[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_8018CE60[])(void); - -void func_801705F8(void *a0) { - D_8018CE60[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_8018CE68[])(void); - -void func_801706AC(void *a0) { - D_8018CE68[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_8018CE70[])(void); - -void func_80170748(void *a0) { - D_8018CE70[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_8018CE78[])(void); - -void func_80170810(void *a0) { - D_8018CE78[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_8018CE80[])(void); - -void func_80170AD8(void *a0) { - D_8018CE80[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_8018CE88[])(void); - -void func_80170BD8(void *a0) { - D_8018CE88[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_8018CE90[])(void); - -void func_80170C74(void *a0) { - D_8018CE90[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8015AE2C", func_80170CF0); - - -extern void (*D_8018CE98[])(void); - -void func_80170D68(void *a0) { - D_8018CE98[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_8018CEA0[])(void); - -void func_80170E34(void *a0) { - D_8018CEA0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_8018CEA8[])(void); - -void func_80170EFC(void *a0) { - D_8018CEA8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_8018CEB0[])(void); - -void func_80170FB0(void *a0) { - D_8018CEB0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_8018CEB8[])(void); - -void func_80171064(void *a0) { - D_8018CEB8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_8018CEC0[])(void); - -void func_80171120(void *a0) { - D_8018CEC0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_8018CEC8[])(void); - -void func_801711C0(void *a0) { - D_8018CEC8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_8018CED0[])(void); - -void func_80171260(void *a0) { - D_8018CED0[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_8018CED8[])(void); - -void func_801714E4(void *a0) { - D_8018CED8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8015AE2C", func_80172C50); - - -extern void (*D_8018CF1C[])(void); - -void func_80172CA0(void *a0) { - D_8018CF1C[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_8018CEE0; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_8018CEE0); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_118/ov_SC03_118_jr_8016AB6C.c b/src/ov_SC03_118/ov_SC03_118_jr_8016AB6C.c new file mode 100644 index 000000000..d6b94a3fd --- /dev/null +++ b/src/ov_SC03_118/ov_SC03_118_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018BEA0; +extern u8 D_8018BE10; +extern u8 D_8018BDEC; +extern u8 D_8018BDC8; +extern u8 D_8018BE7C; +extern u8 D_8018BE58; +extern u8 D_8018BE34; +extern u8 D_8018BDA4; +extern void func_80145934(void); +extern u8 D_8018BF30; +extern u8 D_8018BF0C; +extern u8 D_8018BEE8; +extern u8 D_8018BEC4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018B328[]; +extern unsigned char D_8018B358[]; +extern unsigned char D_8018B3A8[]; +extern unsigned char D_8018B3D8[]; +extern unsigned char D_8018B408[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018B458[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018B520[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018B5A8[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018B5B0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801D3080; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801D3084; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018B5E0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018B688[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018B6AC[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018B69C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018B6C0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018B6CC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018B6DC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018B6F4[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018B6E4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018B708[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018B724[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018B714; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018B738[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018B74C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018B760; +extern void (*D_8018B788[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018B768; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018B7D4[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018B7D8[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018BC3C[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018BC4C[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801D30B8; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018BC74[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018BC54; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018BC64; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018BCB4[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018BCBC[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018BC88; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018BCC8[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018BC98; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801D30C0; +extern s32 D_801D30CC; +extern s32 D_801D30D0; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018BD04[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018BCD8[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801D30C8; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018BF54[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018BD74[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018BFF8[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018C14C[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018BF68; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018C154[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018BF78; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018BF98; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_8018C15C[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_8018C184[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_8018C190[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_8018C004[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_8018C234; +extern void func_8015D380(s32 a0); +extern unsigned char D_8018B318[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_8018C248[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_8018C284[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_8018C2CC; +extern u16 D_8018C2CE; +extern u16 D_8018C2D0; +extern s32 D_8018C2D4; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_8018C2DC; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_8018BFE8; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_8018C360[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_8018C410[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_8018C440[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_8018C4A4; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801D30D8[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_8018C4C8[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801D3130[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_8018C510[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_8018C500; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801D28E4[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_8018C518[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_8018C56C[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_8018C534; +extern s16 D_8018C568; +extern s16 D_8018C566; +extern s16 D_8018C564; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_8018C578[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801D3190; +extern u8 D_801D3191; +extern u8 D_801D3192; +extern u8 D_801D3193; +extern u8 D_801D3194; +extern u8 D_801D3195; +extern u8 D_801D3196; +extern u8 D_801D3197; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_8018C588[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801D31D0; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_8018C5CC[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_8018C648[]; +extern s32 D_8018C668[]; +extern u8 D_8018C6E4[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_8018C704[]; +extern u8 D_8018C724[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_8018C7C0[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_8018C83C[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801D28F4; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_8018C848[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_8018C850[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_8018C918[])(void); +extern void func_80166618(void *a0); +extern void (*D_8018C928[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_8018C938[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_8018C944[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_8018C8A4[]; +extern u8 D_8018C8B8[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_8018C95C[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_8018C964[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_8018C96C[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_8018C974[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_8018C97C[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_8018C984[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_8018C98C[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_8018CA40[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_8018CA48[])(void); +extern void func_80169F00(void *a0); +extern char D_8018C9F8[]; +extern char D_8018C9B8[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_8018CA80[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_8018CA8C[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_8018CAD4[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_8018CA94[]; + extern u8 D_8018CAA4[]; + extern u8 D_801D34A0[]; + extern u8 D_801D34C8[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_8018CA94, D_801D34A0) + 3; + func_8001CE28(obj, D_801D34A0); + } else { + var_s3 = func_80024054(D_8018CAA4, D_801D34C8) + 9; + func_8001CE28(obj, D_801D34C8); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_8018CB50[])(void); + +void func_8016B4BC(void *a0) { + D_8018CB50[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801D34F0; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801D34F0); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_8018CB44[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_8018CB44; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_8018CB88[]; +extern unsigned short D_8018CB90[]; +extern unsigned short D_8018CB98[]; +extern unsigned char D_801D34F8[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801D34F8 + param_2 * 0x40); + puVar3 = D_8018CB88[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_8018CB90[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_8018CB98[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801D34F0; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801D34F0, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_8018CBA0[])(void); + +void func_8016BBA4(void *a0) { + D_8018CBA0[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801D362C; + extern u8 D_801D362D; + extern u8 D_801D362E; + extern M2C_UNK D_801D3630; + extern u8 D_801D3631; + extern u8 D_801D3632; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801D362C) = 0x20; + D_801D362D = 0x20; + D_801D362E = 0; + (*(u8 *)&D_801D3630) = 0xc0; + D_801D3631 = 0xc0; + D_801D3632 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801D362C; +extern M2C_UNK D_801D3630; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801D362C, &D_801D3630, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801D362D; + extern u8 D_801D362E; + extern u8 D_801D3631; + extern u8 D_801D3632; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801D362C); + if (*p1 != 0) *p1 -= 4; + if (D_801D362D != 0) D_801D362D -= 4; + if (D_801D362E != 0) D_801D362E -= 4; + p2 = &(*(u8 *)&D_801D3630); + if (*p2 != 0) *p2 -= 4; + if (D_801D3631 != 0) D_801D3631 -= 4; + if (D_801D3632 != 0) D_801D3632 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801D362C), &(*(int *)&D_801D3630), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801D35B8; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801D35B8); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_8018CBB0; + extern s32 D_8018CBB8; + extern s32 D_8018CBC0; + extern s32 D_8018CBC8; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_8018CBB0, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_8018CBB8, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_8018CBC0, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_8018CBC8, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_8018CBD0[])(void); + +void func_8016C14C(void *a0) { + D_8018CBD0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801D3634[]; +extern u8 D_801D363C[]; +extern u8 D_801D35EC[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801D3634, D_801D363C, D_801D35EC); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801D3648[]; + extern u8 D_801D3708; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801D3648[1] = 0xff; + D_801D3648[2] = 0x10; + D_801D3648[0] = 0x10; + D_801D3648[6] = 0; + D_801D3648[5] = 0; + D_801D3648[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801D3648, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801D3708, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801D3648); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8016AB6C", func_8016C998); + + +extern void (*D_8018CBD8[])(void); + +void func_8016CB84(void *a0) { + D_8018CBD8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801D3708[]; + + + Blk_8016CF04_8016CF04 *p = &D_801D3708[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_8018CBF4[])(void); + +void func_8016D19C(void *a0) { + D_8018CBF4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_8018CBFC[])(void); + +void func_8016D428(void *a0) { + D_8018CBFC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018CC64[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_8018CC64[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_8018CC08; +extern u8 D_8018CC14; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018CC08, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018CC14); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8016AB6C", func_8016DC20); + + +extern void (*D_8018CC98[])(void); + +void func_8016DEA4(void *a0) { + D_8018CC98[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_8018CCA0[])(void); + +void func_8016DF20(void *a0) { + D_8018CCA0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_8018CCF4[])(void); + +void func_8016E5B8(void *a0) { + D_8018CCF4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_8018CCB4[4]; + extern s32 D_8018CCD4; + extern s32 D_8018CCDC; + extern s32 D_8018CCE4; + extern s32 D_8018CCEC; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_8018CCB4[0], pp, &tmp); + RotTransSV(&D_8018CCB4[1], &prim.v[1], &tmp); + RotTransSV(&D_8018CCB4[2], &prim.v[2], &tmp); + RotTransSV(&D_8018CCB4[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_8018CCD4; + prim.f1 = D_8018CCDC; + prim.f2 = D_8018CCE4; + prim.f3 = D_8018CCEC; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_8018CD34[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_8018CD34[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_8018CD28[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_8018CD28[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_8018CD18[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_8018CD18[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018CD28[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_8018CD28[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_8018CD28[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_8018CD44; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_8018CD44; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_8018CDBC[])(void); + +void func_8016F6E0(void *a0) { + D_8018CDBC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_8018CDC4[])(void); + +void func_8016F798(void *a0) { + D_8018CDC4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_8018CDCC[])(void); + +void func_8016F834(void *a0) { + D_8018CDCC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_8018CDD4[])(void); + +void func_8016F8E4(void *a0) { + D_8018CDD4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_8018CDDC[])(void); + +void func_8016F9C4(void *a0) { + D_8018CDDC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_8018CDE4[])(void); + +void func_8016FA84(void *a0) { + D_8018CDE4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_8018CDF0[])(void); + +void func_8016FB7C(void *a0) { + D_8018CDF0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_8018CDFC[])(void); + +void func_8016FC90(void *a0) { + D_8018CDFC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_8018CE08[])(void); + +void func_8016FDB4(void *a0) { + D_8018CE08[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_8018CE18[])(void); + +void func_8016FF30(void *a0) { + D_8018CE18[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_8018CE28[])(void); + +void func_8016FFDC(void *a0) { + D_8018CE28[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_8018CE30[])(void); + +void func_80170150(void *a0) { + D_8018CE30[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_8018CE38[])(void); + +void func_80170240(void *a0) { + D_8018CE38[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_8018CE40[])(void); + +void func_801702FC(void *a0) { + D_8018CE40[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_8018CE48[])(void); + +void func_801703E0(void *a0) { + D_8018CE48[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_8018CE50[])(void); + +void func_801704B0(void *a0) { + D_8018CE50[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_8018CE58[])(void); + +void func_80170548(void *a0) { + D_8018CE58[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_8018CE60[])(void); + +void func_801705F8(void *a0) { + D_8018CE60[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_8018CE68[])(void); + +void func_801706AC(void *a0) { + D_8018CE68[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_8018CE70[])(void); + +void func_80170748(void *a0) { + D_8018CE70[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_8018CE78[])(void); + +void func_80170810(void *a0) { + D_8018CE78[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_8018CE80[])(void); + +void func_80170AD8(void *a0) { + D_8018CE80[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_8018CE88[])(void); + +void func_80170BD8(void *a0) { + D_8018CE88[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_8018CE90[])(void); + +void func_80170C74(void *a0) { + D_8018CE90[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8016AB6C", func_80170CF0); + + +extern void (*D_8018CE98[])(void); + +void func_80170D68(void *a0) { + D_8018CE98[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_8018CEA0[])(void); + +void func_80170E34(void *a0) { + D_8018CEA0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_8018CEA8[])(void); + +void func_80170EFC(void *a0) { + D_8018CEA8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_8018CEB0[])(void); + +void func_80170FB0(void *a0) { + D_8018CEB0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_8018CEB8[])(void); + +void func_80171064(void *a0) { + D_8018CEB8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_8018CEC0[])(void); + +void func_80171120(void *a0) { + D_8018CEC0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_8018CEC8[])(void); + +void func_801711C0(void *a0) { + D_8018CEC8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_8018CED0[])(void); + +void func_80171260(void *a0) { + D_8018CED0[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_8018CED8[])(void); + +void func_801714E4(void *a0) { + D_8018CED8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8016AB6C", func_80172C50); + + +extern void (*D_8018CF1C[])(void); + +void func_80172CA0(void *a0) { + D_8018CF1C[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_8018CEE0; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_8018CEE0); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_119/ov_SC03_119_jr_8015AE2C.c b/src/ov_SC03_119/ov_SC03_119_jr_8015AE2C.c index 39a0753b3..6064bed48 100644 --- a/src/ov_SC03_119/ov_SC03_119_jr_8015AE2C.c +++ b/src/ov_SC03_119/ov_SC03_119_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_8018CAD4[])(void); void func_8016AB30(void *a0) { D_8018CAD4[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_8018CB50[])(void); - -void func_8016B4BC(void *a0) { - D_8018CB50[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801D34F0; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801D34F0); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_8018CB44[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_8018CB44; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_8018CB88[]; -extern unsigned short D_8018CB90[]; -extern unsigned short D_8018CB98[]; -extern unsigned char D_801D34F8[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801D34F8 + param_2 * 0x40); - puVar3 = D_8018CB88[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_8018CB90[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_8018CB98[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801D34F0; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801D34F0, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_8018CBA0[])(void); - -void func_8016BBA4(void *a0) { - D_8018CBA0[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801D362C; - extern u8 D_801D362D; - extern u8 D_801D362E; - extern M2C_UNK D_801D3630; - extern u8 D_801D3631; - extern u8 D_801D3632; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801D362C) = 0x20; - D_801D362D = 0x20; - D_801D362E = 0; - (*(u8 *)&D_801D3630) = 0xc0; - D_801D3631 = 0xc0; - D_801D3632 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801D362C; -extern M2C_UNK D_801D3630; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801D362C, &D_801D3630, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801D362D; - extern u8 D_801D362E; - extern u8 D_801D3631; - extern u8 D_801D3632; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801D362C); - if (*p1 != 0) *p1 -= 4; - if (D_801D362D != 0) D_801D362D -= 4; - if (D_801D362E != 0) D_801D362E -= 4; - p2 = &(*(u8 *)&D_801D3630); - if (*p2 != 0) *p2 -= 4; - if (D_801D3631 != 0) D_801D3631 -= 4; - if (D_801D3632 != 0) D_801D3632 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801D362C), &(*(int *)&D_801D3630), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801D35B8; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801D35B8); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_8018CBB0; - extern s32 D_8018CBB8; - extern s32 D_8018CBC0; - extern s32 D_8018CBC8; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_8018CBB0, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_8018CBB8, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_8018CBC0, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_8018CBC8, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_8018CBD0[])(void); - -void func_8016C14C(void *a0) { - D_8018CBD0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801D3634[]; -extern u8 D_801D363C[]; -extern u8 D_801D35EC[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801D3634, D_801D363C, D_801D35EC); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801D3648[]; - extern u8 D_801D3708; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801D3648[1] = 0xff; - D_801D3648[2] = 0x10; - D_801D3648[0] = 0x10; - D_801D3648[6] = 0; - D_801D3648[5] = 0; - D_801D3648[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801D3648, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801D3708, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801D3648); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8015AE2C", func_8016C998); - - -extern void (*D_8018CBD8[])(void); - -void func_8016CB84(void *a0) { - D_8018CBD8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801D3708[]; - - - Blk_8016CF04_8016CF04 *p = &D_801D3708[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_8018CBF4[])(void); - -void func_8016D19C(void *a0) { - D_8018CBF4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_8018CBFC[])(void); - -void func_8016D428(void *a0) { - D_8018CBFC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_8018CC64[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_8018CC64[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_8018CC08; -extern u8 D_8018CC14; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018CC08, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018CC14); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8015AE2C", func_8016DC20); - - -extern void (*D_8018CC98[])(void); - -void func_8016DEA4(void *a0) { - D_8018CC98[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_8018CCA0[])(void); - -void func_8016DF20(void *a0) { - D_8018CCA0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_8018CCF4[])(void); - -void func_8016E5B8(void *a0) { - D_8018CCF4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_8018CCB4[4]; - extern s32 D_8018CCD4; - extern s32 D_8018CCDC; - extern s32 D_8018CCE4; - extern s32 D_8018CCEC; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_8018CCB4[0], pp, &tmp); - RotTransSV(&D_8018CCB4[1], &prim.v[1], &tmp); - RotTransSV(&D_8018CCB4[2], &prim.v[2], &tmp); - RotTransSV(&D_8018CCB4[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_8018CCD4; - prim.f1 = D_8018CCDC; - prim.f2 = D_8018CCE4; - prim.f3 = D_8018CCEC; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_8018CD34[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_8018CD34[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_8018CD28[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_8018CD28[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_8018CD18[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_8018CD18[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018CD28[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_8018CD28[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_8018CD28[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_8018CD44; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_8018CD44; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_8018CDBC[])(void); - -void func_8016F6E0(void *a0) { - D_8018CDBC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_8018CDC4[])(void); - -void func_8016F798(void *a0) { - D_8018CDC4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_8018CDCC[])(void); - -void func_8016F834(void *a0) { - D_8018CDCC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_8018CDD4[])(void); - -void func_8016F8E4(void *a0) { - D_8018CDD4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_8018CDDC[])(void); - -void func_8016F9C4(void *a0) { - D_8018CDDC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_8018CDE4[])(void); - -void func_8016FA84(void *a0) { - D_8018CDE4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_8018CDF0[])(void); - -void func_8016FB7C(void *a0) { - D_8018CDF0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_8018CDFC[])(void); - -void func_8016FC90(void *a0) { - D_8018CDFC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_8018CE08[])(void); - -void func_8016FDB4(void *a0) { - D_8018CE08[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_8018CE18[])(void); - -void func_8016FF30(void *a0) { - D_8018CE18[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_8018CE28[])(void); - -void func_8016FFDC(void *a0) { - D_8018CE28[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_8018CE30[])(void); - -void func_80170150(void *a0) { - D_8018CE30[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_8018CE38[])(void); - -void func_80170240(void *a0) { - D_8018CE38[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_8018CE40[])(void); - -void func_801702FC(void *a0) { - D_8018CE40[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_8018CE48[])(void); - -void func_801703E0(void *a0) { - D_8018CE48[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_8018CE50[])(void); - -void func_801704B0(void *a0) { - D_8018CE50[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_8018CE58[])(void); - -void func_80170548(void *a0) { - D_8018CE58[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_8018CE60[])(void); - -void func_801705F8(void *a0) { - D_8018CE60[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_8018CE68[])(void); - -void func_801706AC(void *a0) { - D_8018CE68[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_8018CE70[])(void); - -void func_80170748(void *a0) { - D_8018CE70[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_8018CE78[])(void); - -void func_80170810(void *a0) { - D_8018CE78[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_8018CE80[])(void); - -void func_80170AD8(void *a0) { - D_8018CE80[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_8018CE88[])(void); - -void func_80170BD8(void *a0) { - D_8018CE88[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_8018CE90[])(void); - -void func_80170C74(void *a0) { - D_8018CE90[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8015AE2C", func_80170CF0); - - -extern void (*D_8018CE98[])(void); - -void func_80170D68(void *a0) { - D_8018CE98[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_8018CEA0[])(void); - -void func_80170E34(void *a0) { - D_8018CEA0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_8018CEA8[])(void); - -void func_80170EFC(void *a0) { - D_8018CEA8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_8018CEB0[])(void); - -void func_80170FB0(void *a0) { - D_8018CEB0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_8018CEB8[])(void); - -void func_80171064(void *a0) { - D_8018CEB8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_8018CEC0[])(void); - -void func_80171120(void *a0) { - D_8018CEC0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_8018CEC8[])(void); - -void func_801711C0(void *a0) { - D_8018CEC8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_8018CED0[])(void); - -void func_80171260(void *a0) { - D_8018CED0[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_8018CED8[])(void); - -void func_801714E4(void *a0) { - D_8018CED8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8015AE2C", func_80172C50); - - -extern void (*D_8018CF1C[])(void); - -void func_80172CA0(void *a0) { - D_8018CF1C[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_8018CEE0; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_8018CEE0); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_119/ov_SC03_119_jr_8016AB6C.c b/src/ov_SC03_119/ov_SC03_119_jr_8016AB6C.c new file mode 100644 index 000000000..f90046e58 --- /dev/null +++ b/src/ov_SC03_119/ov_SC03_119_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018BEA0; +extern u8 D_8018BE10; +extern u8 D_8018BDEC; +extern u8 D_8018BDC8; +extern u8 D_8018BE7C; +extern u8 D_8018BE58; +extern u8 D_8018BE34; +extern u8 D_8018BDA4; +extern void func_80145934(void); +extern u8 D_8018BF30; +extern u8 D_8018BF0C; +extern u8 D_8018BEE8; +extern u8 D_8018BEC4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018B328[]; +extern unsigned char D_8018B358[]; +extern unsigned char D_8018B3A8[]; +extern unsigned char D_8018B3D8[]; +extern unsigned char D_8018B408[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018B458[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018B520[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018B5A8[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018B5B0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801D3080; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801D3084; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018B5E0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018B688[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018B6AC[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018B69C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018B6C0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018B6CC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018B6DC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018B6F4[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018B6E4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018B708[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018B724[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018B714; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018B738[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018B74C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018B760; +extern void (*D_8018B788[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018B768; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018B7D4[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018B7D8[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018BC3C[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018BC4C[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801D30B8; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018BC74[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018BC54; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018BC64; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018BCB4[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018BCBC[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018BC88; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018BCC8[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018BC98; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801D30C0; +extern s32 D_801D30CC; +extern s32 D_801D30D0; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018BD04[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018BCD8[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801D30C8; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018BF54[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018BD74[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018BFF8[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018C14C[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018BF68; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018C154[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018BF78; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018BF98; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_8018C15C[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_8018C184[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_8018C190[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_8018C004[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_8018C234; +extern void func_8015D380(s32 a0); +extern unsigned char D_8018B318[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_8018C248[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_8018C284[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_8018C2CC; +extern u16 D_8018C2CE; +extern u16 D_8018C2D0; +extern s32 D_8018C2D4; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_8018C2DC; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_8018BFE8; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_8018C360[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_8018C410[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_8018C440[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_8018C4A4; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801D30D8[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_8018C4C8[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801D3130[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_8018C510[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_8018C500; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801D28E4[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_8018C518[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_8018C56C[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_8018C534; +extern s16 D_8018C568; +extern s16 D_8018C566; +extern s16 D_8018C564; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_8018C578[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801D3190; +extern u8 D_801D3191; +extern u8 D_801D3192; +extern u8 D_801D3193; +extern u8 D_801D3194; +extern u8 D_801D3195; +extern u8 D_801D3196; +extern u8 D_801D3197; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_8018C588[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801D31D0; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_8018C5CC[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_8018C648[]; +extern s32 D_8018C668[]; +extern u8 D_8018C6E4[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_8018C704[]; +extern u8 D_8018C724[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_8018C7C0[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_8018C83C[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801D28F4; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_8018C848[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_8018C850[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_8018C918[])(void); +extern void func_80166618(void *a0); +extern void (*D_8018C928[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_8018C938[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_8018C944[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_8018C8A4[]; +extern u8 D_8018C8B8[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_8018C95C[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_8018C964[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_8018C96C[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_8018C974[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_8018C97C[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_8018C984[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_8018C98C[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_8018CA40[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_8018CA48[])(void); +extern void func_80169F00(void *a0); +extern char D_8018C9F8[]; +extern char D_8018C9B8[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_8018CA80[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_8018CA8C[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_8018CAD4[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_8018CA94[]; + extern u8 D_8018CAA4[]; + extern u8 D_801D34A0[]; + extern u8 D_801D34C8[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_8018CA94, D_801D34A0) + 3; + func_8001CE28(obj, D_801D34A0); + } else { + var_s3 = func_80024054(D_8018CAA4, D_801D34C8) + 9; + func_8001CE28(obj, D_801D34C8); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_8018CB50[])(void); + +void func_8016B4BC(void *a0) { + D_8018CB50[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801D34F0; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801D34F0); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_8018CB44[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_8018CB44; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_8018CB88[]; +extern unsigned short D_8018CB90[]; +extern unsigned short D_8018CB98[]; +extern unsigned char D_801D34F8[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801D34F8 + param_2 * 0x40); + puVar3 = D_8018CB88[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_8018CB90[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_8018CB98[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801D34F0; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801D34F0, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_8018CBA0[])(void); + +void func_8016BBA4(void *a0) { + D_8018CBA0[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801D362C; + extern u8 D_801D362D; + extern u8 D_801D362E; + extern M2C_UNK D_801D3630; + extern u8 D_801D3631; + extern u8 D_801D3632; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801D362C) = 0x20; + D_801D362D = 0x20; + D_801D362E = 0; + (*(u8 *)&D_801D3630) = 0xc0; + D_801D3631 = 0xc0; + D_801D3632 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801D362C; +extern M2C_UNK D_801D3630; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801D362C, &D_801D3630, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801D362D; + extern u8 D_801D362E; + extern u8 D_801D3631; + extern u8 D_801D3632; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801D362C); + if (*p1 != 0) *p1 -= 4; + if (D_801D362D != 0) D_801D362D -= 4; + if (D_801D362E != 0) D_801D362E -= 4; + p2 = &(*(u8 *)&D_801D3630); + if (*p2 != 0) *p2 -= 4; + if (D_801D3631 != 0) D_801D3631 -= 4; + if (D_801D3632 != 0) D_801D3632 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801D362C), &(*(int *)&D_801D3630), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801D35B8; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801D35B8); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_8018CBB0; + extern s32 D_8018CBB8; + extern s32 D_8018CBC0; + extern s32 D_8018CBC8; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_8018CBB0, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_8018CBB8, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_8018CBC0, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_8018CBC8, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_8018CBD0[])(void); + +void func_8016C14C(void *a0) { + D_8018CBD0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801D3634[]; +extern u8 D_801D363C[]; +extern u8 D_801D35EC[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801D3634, D_801D363C, D_801D35EC); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801D3648[]; + extern u8 D_801D3708; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801D3648[1] = 0xff; + D_801D3648[2] = 0x10; + D_801D3648[0] = 0x10; + D_801D3648[6] = 0; + D_801D3648[5] = 0; + D_801D3648[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801D3648, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801D3708, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801D3648); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8016AB6C", func_8016C998); + + +extern void (*D_8018CBD8[])(void); + +void func_8016CB84(void *a0) { + D_8018CBD8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801D3708[]; + + + Blk_8016CF04_8016CF04 *p = &D_801D3708[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_8018CBF4[])(void); + +void func_8016D19C(void *a0) { + D_8018CBF4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_8018CBFC[])(void); + +void func_8016D428(void *a0) { + D_8018CBFC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018CC64[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_8018CC64[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_8018CC08; +extern u8 D_8018CC14; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018CC08, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018CC14); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8016AB6C", func_8016DC20); + + +extern void (*D_8018CC98[])(void); + +void func_8016DEA4(void *a0) { + D_8018CC98[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_8018CCA0[])(void); + +void func_8016DF20(void *a0) { + D_8018CCA0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_8018CCF4[])(void); + +void func_8016E5B8(void *a0) { + D_8018CCF4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_8018CCB4[4]; + extern s32 D_8018CCD4; + extern s32 D_8018CCDC; + extern s32 D_8018CCE4; + extern s32 D_8018CCEC; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_8018CCB4[0], pp, &tmp); + RotTransSV(&D_8018CCB4[1], &prim.v[1], &tmp); + RotTransSV(&D_8018CCB4[2], &prim.v[2], &tmp); + RotTransSV(&D_8018CCB4[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_8018CCD4; + prim.f1 = D_8018CCDC; + prim.f2 = D_8018CCE4; + prim.f3 = D_8018CCEC; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_8018CD34[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_8018CD34[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_8018CD28[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_8018CD28[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_8018CD18[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_8018CD18[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018CD28[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_8018CD28[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_8018CD28[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_8018CD44; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_8018CD44; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_8018CDBC[])(void); + +void func_8016F6E0(void *a0) { + D_8018CDBC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_8018CDC4[])(void); + +void func_8016F798(void *a0) { + D_8018CDC4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_8018CDCC[])(void); + +void func_8016F834(void *a0) { + D_8018CDCC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_8018CDD4[])(void); + +void func_8016F8E4(void *a0) { + D_8018CDD4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_8018CDDC[])(void); + +void func_8016F9C4(void *a0) { + D_8018CDDC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_8018CDE4[])(void); + +void func_8016FA84(void *a0) { + D_8018CDE4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_8018CDF0[])(void); + +void func_8016FB7C(void *a0) { + D_8018CDF0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_8018CDFC[])(void); + +void func_8016FC90(void *a0) { + D_8018CDFC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_8018CE08[])(void); + +void func_8016FDB4(void *a0) { + D_8018CE08[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_8018CE18[])(void); + +void func_8016FF30(void *a0) { + D_8018CE18[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_8018CE28[])(void); + +void func_8016FFDC(void *a0) { + D_8018CE28[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_8018CE30[])(void); + +void func_80170150(void *a0) { + D_8018CE30[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_8018CE38[])(void); + +void func_80170240(void *a0) { + D_8018CE38[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_8018CE40[])(void); + +void func_801702FC(void *a0) { + D_8018CE40[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_8018CE48[])(void); + +void func_801703E0(void *a0) { + D_8018CE48[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_8018CE50[])(void); + +void func_801704B0(void *a0) { + D_8018CE50[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_8018CE58[])(void); + +void func_80170548(void *a0) { + D_8018CE58[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_8018CE60[])(void); + +void func_801705F8(void *a0) { + D_8018CE60[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_8018CE68[])(void); + +void func_801706AC(void *a0) { + D_8018CE68[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_8018CE70[])(void); + +void func_80170748(void *a0) { + D_8018CE70[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_8018CE78[])(void); + +void func_80170810(void *a0) { + D_8018CE78[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_8018CE80[])(void); + +void func_80170AD8(void *a0) { + D_8018CE80[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_8018CE88[])(void); + +void func_80170BD8(void *a0) { + D_8018CE88[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_8018CE90[])(void); + +void func_80170C74(void *a0) { + D_8018CE90[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8016AB6C", func_80170CF0); + + +extern void (*D_8018CE98[])(void); + +void func_80170D68(void *a0) { + D_8018CE98[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_8018CEA0[])(void); + +void func_80170E34(void *a0) { + D_8018CEA0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_8018CEA8[])(void); + +void func_80170EFC(void *a0) { + D_8018CEA8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_8018CEB0[])(void); + +void func_80170FB0(void *a0) { + D_8018CEB0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_8018CEB8[])(void); + +void func_80171064(void *a0) { + D_8018CEB8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_8018CEC0[])(void); + +void func_80171120(void *a0) { + D_8018CEC0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_8018CEC8[])(void); + +void func_801711C0(void *a0) { + D_8018CEC8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_8018CED0[])(void); + +void func_80171260(void *a0) { + D_8018CED0[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_8018CED8[])(void); + +void func_801714E4(void *a0) { + D_8018CED8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8016AB6C", func_80172C50); + + +extern void (*D_8018CF1C[])(void); + +void func_80172CA0(void *a0) { + D_8018CF1C[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_8018CEE0; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_8018CEE0); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_121/ov_SC03_121_jr_8015AE2C.c b/src/ov_SC03_121/ov_SC03_121_jr_8015AE2C.c index 3951ffb32..a7f3bf0cb 100644 --- a/src/ov_SC03_121/ov_SC03_121_jr_8015AE2C.c +++ b/src/ov_SC03_121/ov_SC03_121_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_801852F0[])(void); void func_8016AB30(void *a0) { D_801852F0[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_8018536C[])(void); - -void func_8016B4BC(void *a0) { - D_8018536C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801ADF98; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801ADF98); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80185360[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80185360; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_801853A4[]; -extern unsigned short D_801853AC[]; -extern unsigned short D_801853B4[]; -extern unsigned char D_801ADFA0[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801ADFA0 + param_2 * 0x40); - puVar3 = D_801853A4[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_801853AC[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_801853B4[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801ADF98; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801ADF98, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_801853BC[])(void); - -void func_8016BBA4(void *a0) { - D_801853BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801AE0D4; - extern u8 D_801AE0D5; - extern u8 D_801AE0D6; - extern M2C_UNK D_801AE0D8; - extern u8 D_801AE0D9; - extern u8 D_801AE0DA; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801AE0D4) = 0x20; - D_801AE0D5 = 0x20; - D_801AE0D6 = 0; - (*(u8 *)&D_801AE0D8) = 0xc0; - D_801AE0D9 = 0xc0; - D_801AE0DA = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801AE0D4; -extern M2C_UNK D_801AE0D8; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801AE0D4, &D_801AE0D8, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801AE0D5; - extern u8 D_801AE0D6; - extern u8 D_801AE0D9; - extern u8 D_801AE0DA; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801AE0D4); - if (*p1 != 0) *p1 -= 4; - if (D_801AE0D5 != 0) D_801AE0D5 -= 4; - if (D_801AE0D6 != 0) D_801AE0D6 -= 4; - p2 = &(*(u8 *)&D_801AE0D8); - if (*p2 != 0) *p2 -= 4; - if (D_801AE0D9 != 0) D_801AE0D9 -= 4; - if (D_801AE0DA != 0) D_801AE0DA -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801AE0D4), &(*(int *)&D_801AE0D8), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801AE060; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801AE060); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_801853CC; - extern s32 D_801853D4; - extern s32 D_801853DC; - extern s32 D_801853E4; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_801853CC, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_801853D4, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_801853DC, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_801853E4, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_801853EC[])(void); - -void func_8016C14C(void *a0) { - D_801853EC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801AE0DC[]; -extern u8 D_801AE0E4[]; -extern u8 D_801AE094[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801AE0DC, D_801AE0E4, D_801AE094); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801AE0F0[]; - extern u8 D_801AE1B0; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801AE0F0[1] = 0xff; - D_801AE0F0[2] = 0x10; - D_801AE0F0[0] = 0x10; - D_801AE0F0[6] = 0; - D_801AE0F0[5] = 0; - D_801AE0F0[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801AE0F0, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801AE1B0, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801AE0F0); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8015AE2C", func_8016C998); - - -extern void (*D_801853F4[])(void); - -void func_8016CB84(void *a0) { - D_801853F4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801AE1B0[]; - - - Blk_8016CF04_8016CF04 *p = &D_801AE1B0[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80185410[])(void); - -void func_8016D19C(void *a0) { - D_80185410[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80185418[])(void); - -void func_8016D428(void *a0) { - D_80185418[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80185480[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80185480[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80185424; -extern u8 D_80185430; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80185424, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80185430); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8015AE2C", func_8016DC20); - - -extern void (*D_801854B4[])(void); - -void func_8016DEA4(void *a0) { - D_801854B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_801854BC[])(void); - -void func_8016DF20(void *a0) { - D_801854BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80185510[])(void); - -void func_8016E5B8(void *a0) { - D_80185510[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_801854D0[4]; - extern s32 D_801854F0; - extern s32 D_801854F8; - extern s32 D_80185500; - extern s32 D_80185508; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_801854D0[0], pp, &tmp); - RotTransSV(&D_801854D0[1], &prim.v[1], &tmp); - RotTransSV(&D_801854D0[2], &prim.v[2], &tmp); - RotTransSV(&D_801854D0[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_801854F0; - prim.f1 = D_801854F8; - prim.f2 = D_80185500; - prim.f3 = D_80185508; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80185550[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80185550[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80185544[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80185544[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80185534[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80185534[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80185544[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80185544[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80185544[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80185560; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80185560; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_801855D8[])(void); - -void func_8016F6E0(void *a0) { - D_801855D8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_801855E0[])(void); - -void func_8016F798(void *a0) { - D_801855E0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_801855E8[])(void); - -void func_8016F834(void *a0) { - D_801855E8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_801855F0[])(void); - -void func_8016F8E4(void *a0) { - D_801855F0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_801855F8[])(void); - -void func_8016F9C4(void *a0) { - D_801855F8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80185600[])(void); - -void func_8016FA84(void *a0) { - D_80185600[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_8018560C[])(void); - -void func_8016FB7C(void *a0) { - D_8018560C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80185618[])(void); - -void func_8016FC90(void *a0) { - D_80185618[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80185624[])(void); - -void func_8016FDB4(void *a0) { - D_80185624[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80185634[])(void); - -void func_8016FF30(void *a0) { - D_80185634[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80185644[])(void); - -void func_8016FFDC(void *a0) { - D_80185644[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_8018564C[])(void); - -void func_80170150(void *a0) { - D_8018564C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80185654[])(void); - -void func_80170240(void *a0) { - D_80185654[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_8018565C[])(void); - -void func_801702FC(void *a0) { - D_8018565C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80185664[])(void); - -void func_801703E0(void *a0) { - D_80185664[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_8018566C[])(void); - -void func_801704B0(void *a0) { - D_8018566C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80185674[])(void); - -void func_80170548(void *a0) { - D_80185674[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_8018567C[])(void); - -void func_801705F8(void *a0) { - D_8018567C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80185684[])(void); - -void func_801706AC(void *a0) { - D_80185684[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_8018568C[])(void); - -void func_80170748(void *a0) { - D_8018568C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80185694[])(void); - -void func_80170810(void *a0) { - D_80185694[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_8018569C[])(void); - -void func_80170AD8(void *a0) { - D_8018569C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_801856A4[])(void); - -void func_80170BD8(void *a0) { - D_801856A4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_801856AC[])(void); - -void func_80170C74(void *a0) { - D_801856AC[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8015AE2C", func_80170CF0); - - -extern void (*D_801856B4[])(void); - -void func_80170D68(void *a0) { - D_801856B4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_801856BC[])(void); - -void func_80170E34(void *a0) { - D_801856BC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_801856C4[])(void); - -void func_80170EFC(void *a0) { - D_801856C4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_801856CC[])(void); - -void func_80170FB0(void *a0) { - D_801856CC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_801856D4[])(void); - -void func_80171064(void *a0) { - D_801856D4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_801856DC[])(void); - -void func_80171120(void *a0) { - D_801856DC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_801856E4[])(void); - -void func_801711C0(void *a0) { - D_801856E4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_801856EC[])(void); - -void func_80171260(void *a0) { - D_801856EC[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_801856F4[])(void); - -void func_801714E4(void *a0) { - D_801856F4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8015AE2C", func_80172C50); - - -extern void (*D_80185738[])(void); - -void func_80172CA0(void *a0) { - D_80185738[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_801856FC; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_801856FC); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_121/ov_SC03_121_jr_8016AB6C.c b/src/ov_SC03_121/ov_SC03_121_jr_8016AB6C.c new file mode 100644 index 000000000..ba6c4b388 --- /dev/null +++ b/src/ov_SC03_121/ov_SC03_121_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801846BC; +extern u8 D_8018462C; +extern u8 D_80184608; +extern u8 D_801845E4; +extern u8 D_80184698; +extern u8 D_80184674; +extern u8 D_80184650; +extern u8 D_801845C0; +extern void func_80145934(void); +extern u8 D_8018474C; +extern u8 D_80184728; +extern u8 D_80184704; +extern u8 D_801846E0; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80183B44[]; +extern unsigned char D_80183B74[]; +extern unsigned char D_80183BC4[]; +extern unsigned char D_80183BF4[]; +extern unsigned char D_80183C24[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80183C74[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80183D3C[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80183DC4[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80183DCC; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801ADB28; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801ADB2C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80183DFC; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80183EA4[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80183EC8[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80183EB8; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80183EDC[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80183EE8[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80183EF8[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80183F10[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80183F00; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80183F24[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80183F40[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80183F30; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80183F54[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80183F68[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80183F7C; +extern void (*D_80183FA4[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80183F84; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80183FF0[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80183FF4[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80184458[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80184468[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801ADB60; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80184490[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80184470; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80184480; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801844D0[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801844D8[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_801844A4; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801844E4[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_801844B4; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801ADB68; +extern s32 D_801ADB74; +extern s32 D_801ADB78; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80184520[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801844F4[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801ADB70; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80184770[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80184590[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80184814[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80184968[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80184784; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80184970[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80184794; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801847B4; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80184978[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_801849A0[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_801849AC[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80184820[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80184A50; +extern void func_8015D380(s32 a0); +extern unsigned char D_80183B34[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80184A64[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80184AA0[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80184AE8; +extern u16 D_80184AEA; +extern u16 D_80184AEC; +extern s32 D_80184AF0; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80184AF8; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80184804; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80184B7C[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80184C2C[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80184C5C[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80184CC0; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801ADB80[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80184CE4[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801ADBD8[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80184D2C[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80184D1C; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801AD3EC[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80184D34[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80184D88[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80184D50; +extern s16 D_80184D84; +extern s16 D_80184D82; +extern s16 D_80184D80; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80184D94[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801ADC38; +extern u8 D_801ADC39; +extern u8 D_801ADC3A; +extern u8 D_801ADC3B; +extern u8 D_801ADC3C; +extern u8 D_801ADC3D; +extern u8 D_801ADC3E; +extern u8 D_801ADC3F; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80184DA4[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801ADC78; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80184DE8[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80184E64[]; +extern s32 D_80184E84[]; +extern u8 D_80184F00[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80184F20[]; +extern u8 D_80184F40[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80184FDC[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80185058[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801AD3FC; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80185064[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_8018506C[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80185134[])(void); +extern void func_80166618(void *a0); +extern void (*D_80185144[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80185154[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80185160[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_801850C0[]; +extern u8 D_801850D4[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80185178[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80185180[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80185188[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80185190[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80185198[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_801851A0[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_801851A8[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_8018525C[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80185264[])(void); +extern void func_80169F00(void *a0); +extern char D_80185214[]; +extern char D_801851D4[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_8018529C[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_801852A8[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_801852F0[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_801852B0[]; + extern u8 D_801852C0[]; + extern u8 D_801ADF48[]; + extern u8 D_801ADF70[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_801852B0, D_801ADF48) + 3; + func_8001CE28(obj, D_801ADF48); + } else { + var_s3 = func_80024054(D_801852C0, D_801ADF70) + 9; + func_8001CE28(obj, D_801ADF70); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_8018536C[])(void); + +void func_8016B4BC(void *a0) { + D_8018536C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801ADF98; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801ADF98); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80185360[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80185360; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_801853A4[]; +extern unsigned short D_801853AC[]; +extern unsigned short D_801853B4[]; +extern unsigned char D_801ADFA0[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801ADFA0 + param_2 * 0x40); + puVar3 = D_801853A4[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_801853AC[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_801853B4[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801ADF98; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801ADF98, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_801853BC[])(void); + +void func_8016BBA4(void *a0) { + D_801853BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801AE0D4; + extern u8 D_801AE0D5; + extern u8 D_801AE0D6; + extern M2C_UNK D_801AE0D8; + extern u8 D_801AE0D9; + extern u8 D_801AE0DA; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801AE0D4) = 0x20; + D_801AE0D5 = 0x20; + D_801AE0D6 = 0; + (*(u8 *)&D_801AE0D8) = 0xc0; + D_801AE0D9 = 0xc0; + D_801AE0DA = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801AE0D4; +extern M2C_UNK D_801AE0D8; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801AE0D4, &D_801AE0D8, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801AE0D5; + extern u8 D_801AE0D6; + extern u8 D_801AE0D9; + extern u8 D_801AE0DA; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801AE0D4); + if (*p1 != 0) *p1 -= 4; + if (D_801AE0D5 != 0) D_801AE0D5 -= 4; + if (D_801AE0D6 != 0) D_801AE0D6 -= 4; + p2 = &(*(u8 *)&D_801AE0D8); + if (*p2 != 0) *p2 -= 4; + if (D_801AE0D9 != 0) D_801AE0D9 -= 4; + if (D_801AE0DA != 0) D_801AE0DA -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801AE0D4), &(*(int *)&D_801AE0D8), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801AE060; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801AE060); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_801853CC; + extern s32 D_801853D4; + extern s32 D_801853DC; + extern s32 D_801853E4; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_801853CC, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_801853D4, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_801853DC, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_801853E4, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_801853EC[])(void); + +void func_8016C14C(void *a0) { + D_801853EC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801AE0DC[]; +extern u8 D_801AE0E4[]; +extern u8 D_801AE094[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801AE0DC, D_801AE0E4, D_801AE094); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801AE0F0[]; + extern u8 D_801AE1B0; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801AE0F0[1] = 0xff; + D_801AE0F0[2] = 0x10; + D_801AE0F0[0] = 0x10; + D_801AE0F0[6] = 0; + D_801AE0F0[5] = 0; + D_801AE0F0[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801AE0F0, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801AE1B0, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801AE0F0); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8016AB6C", func_8016C998); + + +extern void (*D_801853F4[])(void); + +void func_8016CB84(void *a0) { + D_801853F4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801AE1B0[]; + + + Blk_8016CF04_8016CF04 *p = &D_801AE1B0[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80185410[])(void); + +void func_8016D19C(void *a0) { + D_80185410[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80185418[])(void); + +void func_8016D428(void *a0) { + D_80185418[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80185480[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80185480[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80185424; +extern u8 D_80185430; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80185424, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80185430); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8016AB6C", func_8016DC20); + + +extern void (*D_801854B4[])(void); + +void func_8016DEA4(void *a0) { + D_801854B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_801854BC[])(void); + +void func_8016DF20(void *a0) { + D_801854BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80185510[])(void); + +void func_8016E5B8(void *a0) { + D_80185510[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_801854D0[4]; + extern s32 D_801854F0; + extern s32 D_801854F8; + extern s32 D_80185500; + extern s32 D_80185508; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_801854D0[0], pp, &tmp); + RotTransSV(&D_801854D0[1], &prim.v[1], &tmp); + RotTransSV(&D_801854D0[2], &prim.v[2], &tmp); + RotTransSV(&D_801854D0[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_801854F0; + prim.f1 = D_801854F8; + prim.f2 = D_80185500; + prim.f3 = D_80185508; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80185550[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80185550[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80185544[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80185544[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80185534[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80185534[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80185544[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80185544[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80185544[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80185560; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80185560; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_801855D8[])(void); + +void func_8016F6E0(void *a0) { + D_801855D8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_801855E0[])(void); + +void func_8016F798(void *a0) { + D_801855E0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_801855E8[])(void); + +void func_8016F834(void *a0) { + D_801855E8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_801855F0[])(void); + +void func_8016F8E4(void *a0) { + D_801855F0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_801855F8[])(void); + +void func_8016F9C4(void *a0) { + D_801855F8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80185600[])(void); + +void func_8016FA84(void *a0) { + D_80185600[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_8018560C[])(void); + +void func_8016FB7C(void *a0) { + D_8018560C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80185618[])(void); + +void func_8016FC90(void *a0) { + D_80185618[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80185624[])(void); + +void func_8016FDB4(void *a0) { + D_80185624[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80185634[])(void); + +void func_8016FF30(void *a0) { + D_80185634[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80185644[])(void); + +void func_8016FFDC(void *a0) { + D_80185644[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_8018564C[])(void); + +void func_80170150(void *a0) { + D_8018564C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80185654[])(void); + +void func_80170240(void *a0) { + D_80185654[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_8018565C[])(void); + +void func_801702FC(void *a0) { + D_8018565C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80185664[])(void); + +void func_801703E0(void *a0) { + D_80185664[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_8018566C[])(void); + +void func_801704B0(void *a0) { + D_8018566C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80185674[])(void); + +void func_80170548(void *a0) { + D_80185674[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_8018567C[])(void); + +void func_801705F8(void *a0) { + D_8018567C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80185684[])(void); + +void func_801706AC(void *a0) { + D_80185684[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_8018568C[])(void); + +void func_80170748(void *a0) { + D_8018568C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80185694[])(void); + +void func_80170810(void *a0) { + D_80185694[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_8018569C[])(void); + +void func_80170AD8(void *a0) { + D_8018569C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_801856A4[])(void); + +void func_80170BD8(void *a0) { + D_801856A4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_801856AC[])(void); + +void func_80170C74(void *a0) { + D_801856AC[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8016AB6C", func_80170CF0); + + +extern void (*D_801856B4[])(void); + +void func_80170D68(void *a0) { + D_801856B4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_801856BC[])(void); + +void func_80170E34(void *a0) { + D_801856BC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_801856C4[])(void); + +void func_80170EFC(void *a0) { + D_801856C4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_801856CC[])(void); + +void func_80170FB0(void *a0) { + D_801856CC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_801856D4[])(void); + +void func_80171064(void *a0) { + D_801856D4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_801856DC[])(void); + +void func_80171120(void *a0) { + D_801856DC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_801856E4[])(void); + +void func_801711C0(void *a0) { + D_801856E4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_801856EC[])(void); + +void func_80171260(void *a0) { + D_801856EC[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_801856F4[])(void); + +void func_801714E4(void *a0) { + D_801856F4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8016AB6C", func_80172C50); + + +extern void (*D_80185738[])(void); + +void func_80172CA0(void *a0) { + D_80185738[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_801856FC; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_801856FC); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_124/ov_SC03_124_jr_8015AE2C.c b/src/ov_SC03_124/ov_SC03_124_jr_8015AE2C.c index c79a6f26b..d42424a96 100644 --- a/src/ov_SC03_124/ov_SC03_124_jr_8015AE2C.c +++ b/src/ov_SC03_124/ov_SC03_124_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_8018DD1C[])(void); void func_8016AB30(void *a0) { D_8018DD1C[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_8018DD98[])(void); - -void func_8016B4BC(void *a0) { - D_8018DD98[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801E0AC0; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801E0AC0); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_8018DD8C[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_8018DD8C; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_8018DDD0[]; -extern unsigned short D_8018DDD8[]; -extern unsigned short D_8018DDE0[]; -extern unsigned char D_801E0AC8[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801E0AC8 + param_2 * 0x40); - puVar3 = D_8018DDD0[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_8018DDD8[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_8018DDE0[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801E0AC0; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801E0AC0, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_8018DDE8[])(void); - -void func_8016BBA4(void *a0) { - D_8018DDE8[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801E0BFC; - extern u8 D_801E0BFD; - extern u8 D_801E0BFE; - extern M2C_UNK D_801E0C00; - extern u8 D_801E0C01; - extern u8 D_801E0C02; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801E0BFC) = 0x20; - D_801E0BFD = 0x20; - D_801E0BFE = 0; - (*(u8 *)&D_801E0C00) = 0xc0; - D_801E0C01 = 0xc0; - D_801E0C02 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801E0BFC; -extern M2C_UNK D_801E0C00; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801E0BFC, &D_801E0C00, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801E0BFD; - extern u8 D_801E0BFE; - extern u8 D_801E0C01; - extern u8 D_801E0C02; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801E0BFC); - if (*p1 != 0) *p1 -= 4; - if (D_801E0BFD != 0) D_801E0BFD -= 4; - if (D_801E0BFE != 0) D_801E0BFE -= 4; - p2 = &(*(u8 *)&D_801E0C00); - if (*p2 != 0) *p2 -= 4; - if (D_801E0C01 != 0) D_801E0C01 -= 4; - if (D_801E0C02 != 0) D_801E0C02 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801E0BFC), &(*(int *)&D_801E0C00), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801E0B88; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801E0B88); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_8018DDF8; - extern s32 D_8018DE00; - extern s32 D_8018DE08; - extern s32 D_8018DE10; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_8018DDF8, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_8018DE00, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_8018DE08, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_8018DE10, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_8018DE18[])(void); - -void func_8016C14C(void *a0) { - D_8018DE18[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801E0C04[]; -extern u8 D_801E0C0C[]; -extern u8 D_801E0BBC[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801E0C04, D_801E0C0C, D_801E0BBC); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801E0C18[]; - extern u8 D_801E0CD8; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801E0C18[1] = 0xff; - D_801E0C18[2] = 0x10; - D_801E0C18[0] = 0x10; - D_801E0C18[6] = 0; - D_801E0C18[5] = 0; - D_801E0C18[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801E0C18, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801E0CD8, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801E0C18); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8015AE2C", func_8016C998); - - -extern void (*D_8018DE20[])(void); - -void func_8016CB84(void *a0) { - D_8018DE20[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801E0CD8[]; - - - Blk_8016CF04_8016CF04 *p = &D_801E0CD8[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_8018DE3C[])(void); - -void func_8016D19C(void *a0) { - D_8018DE3C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_8018DE44[])(void); - -void func_8016D428(void *a0) { - D_8018DE44[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_8018DEAC[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_8018DEAC[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_8018DE50; -extern u8 D_8018DE5C; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018DE50, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018DE5C); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8015AE2C", func_8016DC20); - - -extern void (*D_8018DEE0[])(void); - -void func_8016DEA4(void *a0) { - D_8018DEE0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_8018DEE8[])(void); - -void func_8016DF20(void *a0) { - D_8018DEE8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_8018DF3C[])(void); - -void func_8016E5B8(void *a0) { - D_8018DF3C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_8018DEFC[4]; - extern s32 D_8018DF1C; - extern s32 D_8018DF24; - extern s32 D_8018DF2C; - extern s32 D_8018DF34; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_8018DEFC[0], pp, &tmp); - RotTransSV(&D_8018DEFC[1], &prim.v[1], &tmp); - RotTransSV(&D_8018DEFC[2], &prim.v[2], &tmp); - RotTransSV(&D_8018DEFC[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_8018DF1C; - prim.f1 = D_8018DF24; - prim.f2 = D_8018DF2C; - prim.f3 = D_8018DF34; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_8018DF7C[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_8018DF7C[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_8018DF70[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_8018DF70[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_8018DF60[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_8018DF60[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018DF70[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_8018DF70[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_8018DF70[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_8018DF8C; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_8018DF8C; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_8018E004[])(void); - -void func_8016F6E0(void *a0) { - D_8018E004[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_8018E00C[])(void); - -void func_8016F798(void *a0) { - D_8018E00C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_8018E014[])(void); - -void func_8016F834(void *a0) { - D_8018E014[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_8018E01C[])(void); - -void func_8016F8E4(void *a0) { - D_8018E01C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_8018E024[])(void); - -void func_8016F9C4(void *a0) { - D_8018E024[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_8018E02C[])(void); - -void func_8016FA84(void *a0) { - D_8018E02C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_8018E038[])(void); - -void func_8016FB7C(void *a0) { - D_8018E038[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_8018E044[])(void); - -void func_8016FC90(void *a0) { - D_8018E044[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_8018E050[])(void); - -void func_8016FDB4(void *a0) { - D_8018E050[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_8018E060[])(void); - -void func_8016FF30(void *a0) { - D_8018E060[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_8018E070[])(void); - -void func_8016FFDC(void *a0) { - D_8018E070[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_8018E078[])(void); - -void func_80170150(void *a0) { - D_8018E078[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_8018E080[])(void); - -void func_80170240(void *a0) { - D_8018E080[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_8018E088[])(void); - -void func_801702FC(void *a0) { - D_8018E088[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_8018E090[])(void); - -void func_801703E0(void *a0) { - D_8018E090[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_8018E098[])(void); - -void func_801704B0(void *a0) { - D_8018E098[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_8018E0A0[])(void); - -void func_80170548(void *a0) { - D_8018E0A0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_8018E0A8[])(void); - -void func_801705F8(void *a0) { - D_8018E0A8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_8018E0B0[])(void); - -void func_801706AC(void *a0) { - D_8018E0B0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_8018E0B8[])(void); - -void func_80170748(void *a0) { - D_8018E0B8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_8018E0C0[])(void); - -void func_80170810(void *a0) { - D_8018E0C0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_8018E0C8[])(void); - -void func_80170AD8(void *a0) { - D_8018E0C8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_8018E0D0[])(void); - -void func_80170BD8(void *a0) { - D_8018E0D0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_8018E0D8[])(void); - -void func_80170C74(void *a0) { - D_8018E0D8[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8015AE2C", func_80170CF0); - - -extern void (*D_8018E0E0[])(void); - -void func_80170D68(void *a0) { - D_8018E0E0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_8018E0E8[])(void); - -void func_80170E34(void *a0) { - D_8018E0E8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_8018E0F0[])(void); - -void func_80170EFC(void *a0) { - D_8018E0F0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_8018E0F8[])(void); - -void func_80170FB0(void *a0) { - D_8018E0F8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_8018E100[])(void); - -void func_80171064(void *a0) { - D_8018E100[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_8018E108[])(void); - -void func_80171120(void *a0) { - D_8018E108[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_8018E110[])(void); - -void func_801711C0(void *a0) { - D_8018E110[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_8018E118[])(void); - -void func_80171260(void *a0) { - D_8018E118[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_8018E120[])(void); - -void func_801714E4(void *a0) { - D_8018E120[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8015AE2C", func_80172C50); - - -extern void (*D_8018E164[])(void); - -void func_80172CA0(void *a0) { - D_8018E164[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_8018E128; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_8018E128); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_124/ov_SC03_124_jr_8016AB6C.c b/src/ov_SC03_124/ov_SC03_124_jr_8016AB6C.c new file mode 100644 index 000000000..fcc49d41f --- /dev/null +++ b/src/ov_SC03_124/ov_SC03_124_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018D0E8; +extern u8 D_8018D058; +extern u8 D_8018D034; +extern u8 D_8018D010; +extern u8 D_8018D0C4; +extern u8 D_8018D0A0; +extern u8 D_8018D07C; +extern u8 D_8018CFEC; +extern void func_80145934(void); +extern u8 D_8018D178; +extern u8 D_8018D154; +extern u8 D_8018D130; +extern u8 D_8018D10C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018C570[]; +extern unsigned char D_8018C5A0[]; +extern unsigned char D_8018C5F0[]; +extern unsigned char D_8018C620[]; +extern unsigned char D_8018C650[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018C6A0[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018C768[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018C7F0[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018C7F8; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801E0650; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801E0654; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018C828; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018C8D0[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018C8F4[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018C8E4; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018C908[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018C914[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018C924[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018C93C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018C92C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018C950[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018C96C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018C95C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018C980[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018C994[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018C9A8; +extern void (*D_8018C9D0[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018C9B0; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018CA1C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018CA20[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018CE84[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018CE94[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801E0688; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018CEBC[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018CE9C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018CEAC; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018CEFC[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018CF04[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018CED0; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018CF10[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018CEE0; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801E0690; +extern s32 D_801E069C; +extern s32 D_801E06A0; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018CF4C[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018CF20[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801E0698; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018D19C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018CFBC[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018D240[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018D394[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018D1B0; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018D39C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018D1C0; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018D1E0; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_8018D3A4[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_8018D3CC[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_8018D3D8[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_8018D24C[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_8018D47C; +extern void func_8015D380(s32 a0); +extern unsigned char D_8018C560[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_8018D490[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_8018D4CC[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_8018D514; +extern u16 D_8018D516; +extern u16 D_8018D518; +extern s32 D_8018D51C; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_8018D524; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_8018D230; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_8018D5A8[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_8018D658[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_8018D688[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_8018D6EC; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801E06A8[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_8018D710[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801E0700[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_8018D758[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_8018D748; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801DFB40[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_8018D760[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_8018D7B4[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_8018D77C; +extern s16 D_8018D7B0; +extern s16 D_8018D7AE; +extern s16 D_8018D7AC; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_8018D7C0[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801E0760; +extern u8 D_801E0761; +extern u8 D_801E0762; +extern u8 D_801E0763; +extern u8 D_801E0764; +extern u8 D_801E0765; +extern u8 D_801E0766; +extern u8 D_801E0767; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_8018D7D0[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801E07A0; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_8018D814[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_8018D890[]; +extern s32 D_8018D8B0[]; +extern u8 D_8018D92C[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_8018D94C[]; +extern u8 D_8018D96C[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_8018DA08[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_8018DA84[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801DFB50; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_8018DA90[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_8018DA98[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_8018DB60[])(void); +extern void func_80166618(void *a0); +extern void (*D_8018DB70[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_8018DB80[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_8018DB8C[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_8018DAEC[]; +extern u8 D_8018DB00[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_8018DBA4[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_8018DBAC[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_8018DBB4[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_8018DBBC[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_8018DBC4[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_8018DBCC[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_8018DBD4[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_8018DC88[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_8018DC90[])(void); +extern void func_80169F00(void *a0); +extern char D_8018DC40[]; +extern char D_8018DC00[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_8018DCC8[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_8018DCD4[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_8018DD1C[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_8018DCDC[]; + extern u8 D_8018DCEC[]; + extern u8 D_801E0A70[]; + extern u8 D_801E0A98[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_8018DCDC, D_801E0A70) + 3; + func_8001CE28(obj, D_801E0A70); + } else { + var_s3 = func_80024054(D_8018DCEC, D_801E0A98) + 9; + func_8001CE28(obj, D_801E0A98); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_8018DD98[])(void); + +void func_8016B4BC(void *a0) { + D_8018DD98[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801E0AC0; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801E0AC0); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_8018DD8C[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_8018DD8C; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_8018DDD0[]; +extern unsigned short D_8018DDD8[]; +extern unsigned short D_8018DDE0[]; +extern unsigned char D_801E0AC8[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801E0AC8 + param_2 * 0x40); + puVar3 = D_8018DDD0[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_8018DDD8[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_8018DDE0[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801E0AC0; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801E0AC0, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_8018DDE8[])(void); + +void func_8016BBA4(void *a0) { + D_8018DDE8[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801E0BFC; + extern u8 D_801E0BFD; + extern u8 D_801E0BFE; + extern M2C_UNK D_801E0C00; + extern u8 D_801E0C01; + extern u8 D_801E0C02; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801E0BFC) = 0x20; + D_801E0BFD = 0x20; + D_801E0BFE = 0; + (*(u8 *)&D_801E0C00) = 0xc0; + D_801E0C01 = 0xc0; + D_801E0C02 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801E0BFC; +extern M2C_UNK D_801E0C00; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801E0BFC, &D_801E0C00, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801E0BFD; + extern u8 D_801E0BFE; + extern u8 D_801E0C01; + extern u8 D_801E0C02; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801E0BFC); + if (*p1 != 0) *p1 -= 4; + if (D_801E0BFD != 0) D_801E0BFD -= 4; + if (D_801E0BFE != 0) D_801E0BFE -= 4; + p2 = &(*(u8 *)&D_801E0C00); + if (*p2 != 0) *p2 -= 4; + if (D_801E0C01 != 0) D_801E0C01 -= 4; + if (D_801E0C02 != 0) D_801E0C02 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801E0BFC), &(*(int *)&D_801E0C00), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801E0B88; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801E0B88); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_8018DDF8; + extern s32 D_8018DE00; + extern s32 D_8018DE08; + extern s32 D_8018DE10; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_8018DDF8, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_8018DE00, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_8018DE08, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_8018DE10, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_8018DE18[])(void); + +void func_8016C14C(void *a0) { + D_8018DE18[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801E0C04[]; +extern u8 D_801E0C0C[]; +extern u8 D_801E0BBC[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801E0C04, D_801E0C0C, D_801E0BBC); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801E0C18[]; + extern u8 D_801E0CD8; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801E0C18[1] = 0xff; + D_801E0C18[2] = 0x10; + D_801E0C18[0] = 0x10; + D_801E0C18[6] = 0; + D_801E0C18[5] = 0; + D_801E0C18[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801E0C18, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801E0CD8, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801E0C18); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8016AB6C", func_8016C998); + + +extern void (*D_8018DE20[])(void); + +void func_8016CB84(void *a0) { + D_8018DE20[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801E0CD8[]; + + + Blk_8016CF04_8016CF04 *p = &D_801E0CD8[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_8018DE3C[])(void); + +void func_8016D19C(void *a0) { + D_8018DE3C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_8018DE44[])(void); + +void func_8016D428(void *a0) { + D_8018DE44[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018DEAC[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_8018DEAC[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_8018DE50; +extern u8 D_8018DE5C; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018DE50, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018DE5C); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8016AB6C", func_8016DC20); + + +extern void (*D_8018DEE0[])(void); + +void func_8016DEA4(void *a0) { + D_8018DEE0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_8018DEE8[])(void); + +void func_8016DF20(void *a0) { + D_8018DEE8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_8018DF3C[])(void); + +void func_8016E5B8(void *a0) { + D_8018DF3C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_8018DEFC[4]; + extern s32 D_8018DF1C; + extern s32 D_8018DF24; + extern s32 D_8018DF2C; + extern s32 D_8018DF34; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_8018DEFC[0], pp, &tmp); + RotTransSV(&D_8018DEFC[1], &prim.v[1], &tmp); + RotTransSV(&D_8018DEFC[2], &prim.v[2], &tmp); + RotTransSV(&D_8018DEFC[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_8018DF1C; + prim.f1 = D_8018DF24; + prim.f2 = D_8018DF2C; + prim.f3 = D_8018DF34; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_8018DF7C[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_8018DF7C[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_8018DF70[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_8018DF70[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_8018DF60[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_8018DF60[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018DF70[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_8018DF70[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_8018DF70[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_8018DF8C; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_8018DF8C; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_8018E004[])(void); + +void func_8016F6E0(void *a0) { + D_8018E004[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_8018E00C[])(void); + +void func_8016F798(void *a0) { + D_8018E00C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_8018E014[])(void); + +void func_8016F834(void *a0) { + D_8018E014[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_8018E01C[])(void); + +void func_8016F8E4(void *a0) { + D_8018E01C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_8018E024[])(void); + +void func_8016F9C4(void *a0) { + D_8018E024[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_8018E02C[])(void); + +void func_8016FA84(void *a0) { + D_8018E02C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_8018E038[])(void); + +void func_8016FB7C(void *a0) { + D_8018E038[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_8018E044[])(void); + +void func_8016FC90(void *a0) { + D_8018E044[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_8018E050[])(void); + +void func_8016FDB4(void *a0) { + D_8018E050[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_8018E060[])(void); + +void func_8016FF30(void *a0) { + D_8018E060[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_8018E070[])(void); + +void func_8016FFDC(void *a0) { + D_8018E070[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_8018E078[])(void); + +void func_80170150(void *a0) { + D_8018E078[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_8018E080[])(void); + +void func_80170240(void *a0) { + D_8018E080[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_8018E088[])(void); + +void func_801702FC(void *a0) { + D_8018E088[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_8018E090[])(void); + +void func_801703E0(void *a0) { + D_8018E090[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_8018E098[])(void); + +void func_801704B0(void *a0) { + D_8018E098[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_8018E0A0[])(void); + +void func_80170548(void *a0) { + D_8018E0A0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_8018E0A8[])(void); + +void func_801705F8(void *a0) { + D_8018E0A8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_8018E0B0[])(void); + +void func_801706AC(void *a0) { + D_8018E0B0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_8018E0B8[])(void); + +void func_80170748(void *a0) { + D_8018E0B8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_8018E0C0[])(void); + +void func_80170810(void *a0) { + D_8018E0C0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_8018E0C8[])(void); + +void func_80170AD8(void *a0) { + D_8018E0C8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_8018E0D0[])(void); + +void func_80170BD8(void *a0) { + D_8018E0D0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_8018E0D8[])(void); + +void func_80170C74(void *a0) { + D_8018E0D8[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8016AB6C", func_80170CF0); + + +extern void (*D_8018E0E0[])(void); + +void func_80170D68(void *a0) { + D_8018E0E0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_8018E0E8[])(void); + +void func_80170E34(void *a0) { + D_8018E0E8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_8018E0F0[])(void); + +void func_80170EFC(void *a0) { + D_8018E0F0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_8018E0F8[])(void); + +void func_80170FB0(void *a0) { + D_8018E0F8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_8018E100[])(void); + +void func_80171064(void *a0) { + D_8018E100[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_8018E108[])(void); + +void func_80171120(void *a0) { + D_8018E108[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_8018E110[])(void); + +void func_801711C0(void *a0) { + D_8018E110[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_8018E118[])(void); + +void func_80171260(void *a0) { + D_8018E118[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_8018E120[])(void); + +void func_801714E4(void *a0) { + D_8018E120[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8016AB6C", func_80172C50); + + +extern void (*D_8018E164[])(void); + +void func_80172CA0(void *a0) { + D_8018E164[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_8018E128; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_8018E128); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_125/ov_SC03_125_jr_8015AE2C.c b/src/ov_SC03_125/ov_SC03_125_jr_8015AE2C.c index 97d5e9b43..f83739546 100644 --- a/src/ov_SC03_125/ov_SC03_125_jr_8015AE2C.c +++ b/src/ov_SC03_125/ov_SC03_125_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_80186EEC[])(void); void func_8016AB30(void *a0) { D_80186EEC[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80186F68[])(void); - -void func_8016B4BC(void *a0) { - D_80186F68[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801C33B8; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801C33B8); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80186F5C[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80186F5C; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80186FA0[]; -extern unsigned short D_80186FA8[]; -extern unsigned short D_80186FB0[]; -extern unsigned char D_801C33C0[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801C33C0 + param_2 * 0x40); - puVar3 = D_80186FA0[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80186FA8[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80186FB0[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801C33B8; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801C33B8, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80186FB8[])(void); - -void func_8016BBA4(void *a0) { - D_80186FB8[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801C34F4; - extern u8 D_801C34F5; - extern u8 D_801C34F6; - extern M2C_UNK D_801C34F8; - extern u8 D_801C34F9; - extern u8 D_801C34FA; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801C34F4) = 0x20; - D_801C34F5 = 0x20; - D_801C34F6 = 0; - (*(u8 *)&D_801C34F8) = 0xc0; - D_801C34F9 = 0xc0; - D_801C34FA = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801C34F4; -extern M2C_UNK D_801C34F8; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801C34F4, &D_801C34F8, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801C34F5; - extern u8 D_801C34F6; - extern u8 D_801C34F9; - extern u8 D_801C34FA; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801C34F4); - if (*p1 != 0) *p1 -= 4; - if (D_801C34F5 != 0) D_801C34F5 -= 4; - if (D_801C34F6 != 0) D_801C34F6 -= 4; - p2 = &(*(u8 *)&D_801C34F8); - if (*p2 != 0) *p2 -= 4; - if (D_801C34F9 != 0) D_801C34F9 -= 4; - if (D_801C34FA != 0) D_801C34FA -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801C34F4), &(*(int *)&D_801C34F8), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801C3480; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801C3480); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80186FC8; - extern s32 D_80186FD0; - extern s32 D_80186FD8; - extern s32 D_80186FE0; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80186FC8, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80186FD0, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80186FD8, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80186FE0, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80186FE8[])(void); - -void func_8016C14C(void *a0) { - D_80186FE8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801C34FC[]; -extern u8 D_801C3504[]; -extern u8 D_801C34B4[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801C34FC, D_801C3504, D_801C34B4); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801C3510[]; - extern u8 D_801C35D0; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801C3510[1] = 0xff; - D_801C3510[2] = 0x10; - D_801C3510[0] = 0x10; - D_801C3510[6] = 0; - D_801C3510[5] = 0; - D_801C3510[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801C3510, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801C35D0, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801C3510); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8015AE2C", func_8016C998); - - -extern void (*D_80186FF0[])(void); - -void func_8016CB84(void *a0) { - D_80186FF0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801C35D0[]; - - - Blk_8016CF04_8016CF04 *p = &D_801C35D0[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_8018700C[])(void); - -void func_8016D19C(void *a0) { - D_8018700C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80187014[])(void); - -void func_8016D428(void *a0) { - D_80187014[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_8018707C[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_8018707C[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80187020; -extern u8 D_8018702C; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80187020, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018702C); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8015AE2C", func_8016DC20); - - -extern void (*D_801870B0[])(void); - -void func_8016DEA4(void *a0) { - D_801870B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_801870B8[])(void); - -void func_8016DF20(void *a0) { - D_801870B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_8018710C[])(void); - -void func_8016E5B8(void *a0) { - D_8018710C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_801870CC[4]; - extern s32 D_801870EC; - extern s32 D_801870F4; - extern s32 D_801870FC; - extern s32 D_80187104; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_801870CC[0], pp, &tmp); - RotTransSV(&D_801870CC[1], &prim.v[1], &tmp); - RotTransSV(&D_801870CC[2], &prim.v[2], &tmp); - RotTransSV(&D_801870CC[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_801870EC; - prim.f1 = D_801870F4; - prim.f2 = D_801870FC; - prim.f3 = D_80187104; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_8018714C[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_8018714C[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80187140[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80187140[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80187130[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80187130[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80187140[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80187140[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80187140[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_8018715C; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_8018715C; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_801871D4[])(void); - -void func_8016F6E0(void *a0) { - D_801871D4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_801871DC[])(void); - -void func_8016F798(void *a0) { - D_801871DC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_801871E4[])(void); - -void func_8016F834(void *a0) { - D_801871E4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_801871EC[])(void); - -void func_8016F8E4(void *a0) { - D_801871EC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_801871F4[])(void); - -void func_8016F9C4(void *a0) { - D_801871F4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_801871FC[])(void); - -void func_8016FA84(void *a0) { - D_801871FC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80187208[])(void); - -void func_8016FB7C(void *a0) { - D_80187208[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80187214[])(void); - -void func_8016FC90(void *a0) { - D_80187214[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80187220[])(void); - -void func_8016FDB4(void *a0) { - D_80187220[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80187230[])(void); - -void func_8016FF30(void *a0) { - D_80187230[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80187240[])(void); - -void func_8016FFDC(void *a0) { - D_80187240[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80187248[])(void); - -void func_80170150(void *a0) { - D_80187248[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80187250[])(void); - -void func_80170240(void *a0) { - D_80187250[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80187258[])(void); - -void func_801702FC(void *a0) { - D_80187258[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80187260[])(void); - -void func_801703E0(void *a0) { - D_80187260[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80187268[])(void); - -void func_801704B0(void *a0) { - D_80187268[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80187270[])(void); - -void func_80170548(void *a0) { - D_80187270[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80187278[])(void); - -void func_801705F8(void *a0) { - D_80187278[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80187280[])(void); - -void func_801706AC(void *a0) { - D_80187280[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80187288[])(void); - -void func_80170748(void *a0) { - D_80187288[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80187290[])(void); - -void func_80170810(void *a0) { - D_80187290[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80187298[])(void); - -void func_80170AD8(void *a0) { - D_80187298[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_801872A0[])(void); - -void func_80170BD8(void *a0) { - D_801872A0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_801872A8[])(void); - -void func_80170C74(void *a0) { - D_801872A8[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8015AE2C", func_80170CF0); - - -extern void (*D_801872B0[])(void); - -void func_80170D68(void *a0) { - D_801872B0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_801872B8[])(void); - -void func_80170E34(void *a0) { - D_801872B8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_801872C0[])(void); - -void func_80170EFC(void *a0) { - D_801872C0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_801872C8[])(void); - -void func_80170FB0(void *a0) { - D_801872C8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_801872D0[])(void); - -void func_80171064(void *a0) { - D_801872D0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_801872D8[])(void); - -void func_80171120(void *a0) { - D_801872D8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_801872E0[])(void); - -void func_801711C0(void *a0) { - D_801872E0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_801872E8[])(void); - -void func_80171260(void *a0) { - D_801872E8[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_801872F0[])(void); - -void func_801714E4(void *a0) { - D_801872F0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8015AE2C", func_80172C50); - - -extern void (*D_80187334[])(void); - -void func_80172CA0(void *a0) { - D_80187334[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_801872F8; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_801872F8); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_125/ov_SC03_125_jr_8016AB6C.c b/src/ov_SC03_125/ov_SC03_125_jr_8016AB6C.c new file mode 100644 index 000000000..1b0c96460 --- /dev/null +++ b/src/ov_SC03_125/ov_SC03_125_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801862B8; +extern u8 D_80186228; +extern u8 D_80186204; +extern u8 D_801861E0; +extern u8 D_80186294; +extern u8 D_80186270; +extern u8 D_8018624C; +extern u8 D_801861BC; +extern void func_80145934(void); +extern u8 D_80186348; +extern u8 D_80186324; +extern u8 D_80186300; +extern u8 D_801862DC; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80185740[]; +extern unsigned char D_80185770[]; +extern unsigned char D_801857C0[]; +extern unsigned char D_801857F0[]; +extern unsigned char D_80185820[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80185870[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80185938[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801859C0[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801859C8; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801C2F48; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801C2F4C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801859F8; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80185AA0[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80185AC4[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80185AB4; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80185AD8[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80185AE4[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80185AF4[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80185B0C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80185AFC; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80185B20[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80185B3C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80185B2C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80185B50[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80185B64[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80185B78; +extern void (*D_80185BA0[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80185B80; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80185BEC[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80185BF0[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80186054[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80186064[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801C2F80; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018608C[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018606C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018607C; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801860CC[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801860D4[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_801860A0; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801860E0[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_801860B0; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801C2F88; +extern s32 D_801C2F94; +extern s32 D_801C2F98; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018611C[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801860F0[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801C2F90; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018636C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018618C[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80186410[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80186564[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80186380; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018656C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80186390; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801863B0; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80186574[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_8018659C[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_801865A8[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_8018641C[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_8018664C; +extern void func_8015D380(s32 a0); +extern unsigned char D_80185730[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80186660[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_8018669C[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_801866E4; +extern u16 D_801866E6; +extern u16 D_801866E8; +extern s32 D_801866EC; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_801866F4; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80186400; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80186778[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80186828[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80186858[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_801868BC; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801C2FA0[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_801868E0[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801C2FF8[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80186928[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80186918; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801C282C[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80186930[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80186984[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_8018694C; +extern s16 D_80186980; +extern s16 D_8018697E; +extern s16 D_8018697C; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80186990[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801C3058; +extern u8 D_801C3059; +extern u8 D_801C305A; +extern u8 D_801C305B; +extern u8 D_801C305C; +extern u8 D_801C305D; +extern u8 D_801C305E; +extern u8 D_801C305F; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_801869A0[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801C3098; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_801869E4[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80186A60[]; +extern s32 D_80186A80[]; +extern u8 D_80186AFC[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80186B1C[]; +extern u8 D_80186B3C[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80186BD8[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80186C54[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801C283C; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80186C60[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80186C68[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80186D30[])(void); +extern void func_80166618(void *a0); +extern void (*D_80186D40[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80186D50[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80186D5C[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80186CBC[]; +extern u8 D_80186CD0[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80186D74[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80186D7C[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80186D84[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80186D8C[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80186D94[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80186D9C[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80186DA4[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80186E58[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80186E60[])(void); +extern void func_80169F00(void *a0); +extern char D_80186E10[]; +extern char D_80186DD0[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80186E98[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80186EA4[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80186EEC[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80186EAC[]; + extern u8 D_80186EBC[]; + extern u8 D_801C3368[]; + extern u8 D_801C3390[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80186EAC, D_801C3368) + 3; + func_8001CE28(obj, D_801C3368); + } else { + var_s3 = func_80024054(D_80186EBC, D_801C3390) + 9; + func_8001CE28(obj, D_801C3390); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80186F68[])(void); + +void func_8016B4BC(void *a0) { + D_80186F68[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801C33B8; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801C33B8); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80186F5C[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80186F5C; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80186FA0[]; +extern unsigned short D_80186FA8[]; +extern unsigned short D_80186FB0[]; +extern unsigned char D_801C33C0[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801C33C0 + param_2 * 0x40); + puVar3 = D_80186FA0[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80186FA8[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80186FB0[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801C33B8; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801C33B8, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80186FB8[])(void); + +void func_8016BBA4(void *a0) { + D_80186FB8[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801C34F4; + extern u8 D_801C34F5; + extern u8 D_801C34F6; + extern M2C_UNK D_801C34F8; + extern u8 D_801C34F9; + extern u8 D_801C34FA; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801C34F4) = 0x20; + D_801C34F5 = 0x20; + D_801C34F6 = 0; + (*(u8 *)&D_801C34F8) = 0xc0; + D_801C34F9 = 0xc0; + D_801C34FA = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801C34F4; +extern M2C_UNK D_801C34F8; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801C34F4, &D_801C34F8, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801C34F5; + extern u8 D_801C34F6; + extern u8 D_801C34F9; + extern u8 D_801C34FA; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801C34F4); + if (*p1 != 0) *p1 -= 4; + if (D_801C34F5 != 0) D_801C34F5 -= 4; + if (D_801C34F6 != 0) D_801C34F6 -= 4; + p2 = &(*(u8 *)&D_801C34F8); + if (*p2 != 0) *p2 -= 4; + if (D_801C34F9 != 0) D_801C34F9 -= 4; + if (D_801C34FA != 0) D_801C34FA -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801C34F4), &(*(int *)&D_801C34F8), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801C3480; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801C3480); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80186FC8; + extern s32 D_80186FD0; + extern s32 D_80186FD8; + extern s32 D_80186FE0; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80186FC8, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80186FD0, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80186FD8, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80186FE0, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80186FE8[])(void); + +void func_8016C14C(void *a0) { + D_80186FE8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801C34FC[]; +extern u8 D_801C3504[]; +extern u8 D_801C34B4[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801C34FC, D_801C3504, D_801C34B4); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801C3510[]; + extern u8 D_801C35D0; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801C3510[1] = 0xff; + D_801C3510[2] = 0x10; + D_801C3510[0] = 0x10; + D_801C3510[6] = 0; + D_801C3510[5] = 0; + D_801C3510[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801C3510, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801C35D0, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801C3510); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8016AB6C", func_8016C998); + + +extern void (*D_80186FF0[])(void); + +void func_8016CB84(void *a0) { + D_80186FF0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801C35D0[]; + + + Blk_8016CF04_8016CF04 *p = &D_801C35D0[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_8018700C[])(void); + +void func_8016D19C(void *a0) { + D_8018700C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80187014[])(void); + +void func_8016D428(void *a0) { + D_80187014[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018707C[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_8018707C[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80187020; +extern u8 D_8018702C; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80187020, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018702C); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8016AB6C", func_8016DC20); + + +extern void (*D_801870B0[])(void); + +void func_8016DEA4(void *a0) { + D_801870B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_801870B8[])(void); + +void func_8016DF20(void *a0) { + D_801870B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_8018710C[])(void); + +void func_8016E5B8(void *a0) { + D_8018710C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_801870CC[4]; + extern s32 D_801870EC; + extern s32 D_801870F4; + extern s32 D_801870FC; + extern s32 D_80187104; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_801870CC[0], pp, &tmp); + RotTransSV(&D_801870CC[1], &prim.v[1], &tmp); + RotTransSV(&D_801870CC[2], &prim.v[2], &tmp); + RotTransSV(&D_801870CC[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_801870EC; + prim.f1 = D_801870F4; + prim.f2 = D_801870FC; + prim.f3 = D_80187104; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_8018714C[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_8018714C[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80187140[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80187140[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80187130[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80187130[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80187140[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80187140[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80187140[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_8018715C; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_8018715C; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_801871D4[])(void); + +void func_8016F6E0(void *a0) { + D_801871D4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_801871DC[])(void); + +void func_8016F798(void *a0) { + D_801871DC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_801871E4[])(void); + +void func_8016F834(void *a0) { + D_801871E4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_801871EC[])(void); + +void func_8016F8E4(void *a0) { + D_801871EC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_801871F4[])(void); + +void func_8016F9C4(void *a0) { + D_801871F4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_801871FC[])(void); + +void func_8016FA84(void *a0) { + D_801871FC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80187208[])(void); + +void func_8016FB7C(void *a0) { + D_80187208[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80187214[])(void); + +void func_8016FC90(void *a0) { + D_80187214[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80187220[])(void); + +void func_8016FDB4(void *a0) { + D_80187220[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80187230[])(void); + +void func_8016FF30(void *a0) { + D_80187230[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80187240[])(void); + +void func_8016FFDC(void *a0) { + D_80187240[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80187248[])(void); + +void func_80170150(void *a0) { + D_80187248[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80187250[])(void); + +void func_80170240(void *a0) { + D_80187250[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80187258[])(void); + +void func_801702FC(void *a0) { + D_80187258[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80187260[])(void); + +void func_801703E0(void *a0) { + D_80187260[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80187268[])(void); + +void func_801704B0(void *a0) { + D_80187268[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80187270[])(void); + +void func_80170548(void *a0) { + D_80187270[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80187278[])(void); + +void func_801705F8(void *a0) { + D_80187278[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80187280[])(void); + +void func_801706AC(void *a0) { + D_80187280[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80187288[])(void); + +void func_80170748(void *a0) { + D_80187288[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80187290[])(void); + +void func_80170810(void *a0) { + D_80187290[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80187298[])(void); + +void func_80170AD8(void *a0) { + D_80187298[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_801872A0[])(void); + +void func_80170BD8(void *a0) { + D_801872A0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_801872A8[])(void); + +void func_80170C74(void *a0) { + D_801872A8[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8016AB6C", func_80170CF0); + + +extern void (*D_801872B0[])(void); + +void func_80170D68(void *a0) { + D_801872B0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_801872B8[])(void); + +void func_80170E34(void *a0) { + D_801872B8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_801872C0[])(void); + +void func_80170EFC(void *a0) { + D_801872C0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_801872C8[])(void); + +void func_80170FB0(void *a0) { + D_801872C8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_801872D0[])(void); + +void func_80171064(void *a0) { + D_801872D0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_801872D8[])(void); + +void func_80171120(void *a0) { + D_801872D8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_801872E0[])(void); + +void func_801711C0(void *a0) { + D_801872E0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_801872E8[])(void); + +void func_80171260(void *a0) { + D_801872E8[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_801872F0[])(void); + +void func_801714E4(void *a0) { + D_801872F0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8016AB6C", func_80172C50); + + +extern void (*D_80187334[])(void); + +void func_80172CA0(void *a0) { + D_80187334[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_801872F8; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_801872F8); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC03_126/ov_SC03_126_jr_8015AE2C.c b/src/ov_SC03_126/ov_SC03_126_jr_8015AE2C.c index 3d37ed9e3..3cd9e77fc 100644 --- a/src/ov_SC03_126/ov_SC03_126_jr_8015AE2C.c +++ b/src/ov_SC03_126/ov_SC03_126_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_801823E4[])(void); void func_8016AB30(void *a0) { D_801823E4[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80182460[])(void); - -void func_8016B4BC(void *a0) { - D_80182460[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_8018EC80; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_8018EC80); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80182454[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80182454; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80182498[]; -extern unsigned short D_801824A0[]; -extern unsigned short D_801824A8[]; -extern unsigned char D_8018EC88[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_8018EC88 + param_2 * 0x40); - puVar3 = D_80182498[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_801824A0[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_801824A8[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_8018EC80; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_8018EC80, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_801824B0[])(void); - -void func_8016BBA4(void *a0) { - D_801824B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_8018EDBC; - extern u8 D_8018EDBD; - extern u8 D_8018EDBE; - extern M2C_UNK D_8018EDC0; - extern u8 D_8018EDC1; - extern u8 D_8018EDC2; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_8018EDBC) = 0x20; - D_8018EDBD = 0x20; - D_8018EDBE = 0; - (*(u8 *)&D_8018EDC0) = 0xc0; - D_8018EDC1 = 0xc0; - D_8018EDC2 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_8018EDBC; -extern M2C_UNK D_8018EDC0; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_8018EDBC, &D_8018EDC0, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_8018EDBD; - extern u8 D_8018EDBE; - extern u8 D_8018EDC1; - extern u8 D_8018EDC2; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_8018EDBC); - if (*p1 != 0) *p1 -= 4; - if (D_8018EDBD != 0) D_8018EDBD -= 4; - if (D_8018EDBE != 0) D_8018EDBE -= 4; - p2 = &(*(u8 *)&D_8018EDC0); - if (*p2 != 0) *p2 -= 4; - if (D_8018EDC1 != 0) D_8018EDC1 -= 4; - if (D_8018EDC2 != 0) D_8018EDC2 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_8018EDBC), &(*(int *)&D_8018EDC0), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_8018ED48; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_8018ED48); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_801824C0; - extern s32 D_801824C8; - extern s32 D_801824D0; - extern s32 D_801824D8; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_801824C0, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_801824C8, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_801824D0, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_801824D8, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_801824E0[])(void); - -void func_8016C14C(void *a0) { - D_801824E0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_8018EDC4[]; -extern u8 D_8018EDCC[]; -extern u8 D_8018ED7C[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_8018EDC4, D_8018EDCC, D_8018ED7C); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_8018EDD8[]; - extern u8 D_8018EE98; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_8018EDD8[1] = 0xff; - D_8018EDD8[2] = 0x10; - D_8018EDD8[0] = 0x10; - D_8018EDD8[6] = 0; - D_8018EDD8[5] = 0; - D_8018EDD8[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_8018EDD8, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_8018EE98, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_8018EDD8); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8015AE2C", func_8016C998); - - -extern void (*D_801824E8[])(void); - -void func_8016CB84(void *a0) { - D_801824E8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_8018EE98[]; - - - Blk_8016CF04_8016CF04 *p = &D_8018EE98[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80182504[])(void); - -void func_8016D19C(void *a0) { - D_80182504[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_8018250C[])(void); - -void func_8016D428(void *a0) { - D_8018250C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80182574[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80182574[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80182518; -extern u8 D_80182524; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80182518, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80182524); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8015AE2C", func_8016DC20); - - -extern void (*D_801825A8[])(void); - -void func_8016DEA4(void *a0) { - D_801825A8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_801825B0[])(void); - -void func_8016DF20(void *a0) { - D_801825B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80182604[])(void); - -void func_8016E5B8(void *a0) { - D_80182604[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_801825C4[4]; - extern s32 D_801825E4; - extern s32 D_801825EC; - extern s32 D_801825F4; - extern s32 D_801825FC; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_801825C4[0], pp, &tmp); - RotTransSV(&D_801825C4[1], &prim.v[1], &tmp); - RotTransSV(&D_801825C4[2], &prim.v[2], &tmp); - RotTransSV(&D_801825C4[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_801825E4; - prim.f1 = D_801825EC; - prim.f2 = D_801825F4; - prim.f3 = D_801825FC; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80182644[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80182644[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80182638[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80182638[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80182628[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80182628[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80182638[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80182638[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80182638[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80182654; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80182654; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_801826CC[])(void); - -void func_8016F6E0(void *a0) { - D_801826CC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_801826D4[])(void); - -void func_8016F798(void *a0) { - D_801826D4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_801826DC[])(void); - -void func_8016F834(void *a0) { - D_801826DC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_801826E4[])(void); - -void func_8016F8E4(void *a0) { - D_801826E4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_801826EC[])(void); - -void func_8016F9C4(void *a0) { - D_801826EC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_801826F4[])(void); - -void func_8016FA84(void *a0) { - D_801826F4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80182700[])(void); - -void func_8016FB7C(void *a0) { - D_80182700[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_8018270C[])(void); - -void func_8016FC90(void *a0) { - D_8018270C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80182718[])(void); - -void func_8016FDB4(void *a0) { - D_80182718[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80182728[])(void); - -void func_8016FF30(void *a0) { - D_80182728[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80182738[])(void); - -void func_8016FFDC(void *a0) { - D_80182738[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80182740[])(void); - -void func_80170150(void *a0) { - D_80182740[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80182748[])(void); - -void func_80170240(void *a0) { - D_80182748[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80182750[])(void); - -void func_801702FC(void *a0) { - D_80182750[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80182758[])(void); - -void func_801703E0(void *a0) { - D_80182758[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80182760[])(void); - -void func_801704B0(void *a0) { - D_80182760[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80182768[])(void); - -void func_80170548(void *a0) { - D_80182768[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80182770[])(void); - -void func_801705F8(void *a0) { - D_80182770[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80182778[])(void); - -void func_801706AC(void *a0) { - D_80182778[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80182780[])(void); - -void func_80170748(void *a0) { - D_80182780[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80182788[])(void); - -void func_80170810(void *a0) { - D_80182788[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80182790[])(void); - -void func_80170AD8(void *a0) { - D_80182790[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80182798[])(void); - -void func_80170BD8(void *a0) { - D_80182798[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_801827A0[])(void); - -void func_80170C74(void *a0) { - D_801827A0[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8015AE2C", func_80170CF0); - - -extern void (*D_801827A8[])(void); - -void func_80170D68(void *a0) { - D_801827A8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_801827B0[])(void); - -void func_80170E34(void *a0) { - D_801827B0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_801827B8[])(void); - -void func_80170EFC(void *a0) { - D_801827B8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_801827C0[])(void); - -void func_80170FB0(void *a0) { - D_801827C0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_801827C8[])(void); - -void func_80171064(void *a0) { - D_801827C8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_801827D0[])(void); - -void func_80171120(void *a0) { - D_801827D0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_801827D8[])(void); - -void func_801711C0(void *a0) { - D_801827D8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_801827E0[])(void); - -void func_80171260(void *a0) { - D_801827E0[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_801827E8[])(void); - -void func_801714E4(void *a0) { - D_801827E8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8015AE2C", func_80172C50); - - -extern void (*D_8018282C[])(void); - -void func_80172CA0(void *a0) { - D_8018282C[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_801827F0; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_801827F0); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC03_126/ov_SC03_126_jr_8016AB6C.c b/src/ov_SC03_126/ov_SC03_126_jr_8016AB6C.c new file mode 100644 index 000000000..fc4442b35 --- /dev/null +++ b/src/ov_SC03_126/ov_SC03_126_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801817B0; +extern u8 D_80181720; +extern u8 D_801816FC; +extern u8 D_801816D8; +extern u8 D_8018178C; +extern u8 D_80181768; +extern u8 D_80181744; +extern u8 D_801816B4; +extern void func_80145934(void); +extern u8 D_80181840; +extern u8 D_8018181C; +extern u8 D_801817F8; +extern u8 D_801817D4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80180C38[]; +extern unsigned char D_80180C68[]; +extern unsigned char D_80180CB8[]; +extern unsigned char D_80180CE8[]; +extern unsigned char D_80180D18[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80180D68[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80180E30[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80180EB8[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80180EC0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8018E810; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8018E814; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80180EF0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80180F98[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80180FBC[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80180FAC; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80180FD0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80180FDC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80180FEC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80181004[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80180FF4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80181018[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80181034[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80181024; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80181048[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018105C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80181070; +extern void (*D_80181098[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80181078; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801810E4[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801810E8[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018154C[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018155C[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_8018E848; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80181584[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80181564; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80181574; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801815C4[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801815CC[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80181598; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801815D8[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_801815A8; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_8018E850; +extern s32 D_8018E85C; +extern s32 D_8018E860; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80181614[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801815E8[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_8018E858; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80181864[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80181684[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80181908[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80181A5C[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80181878; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80181A64[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80181888; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801818A8; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80181A6C[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80181A94[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80181AA0[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80181914[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80181B44; +extern void func_8015D380(s32 a0); +extern unsigned char D_80180C28[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80181B58[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80181B94[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80181BDC; +extern u16 D_80181BDE; +extern u16 D_80181BE0; +extern s32 D_80181BE4; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80181BEC; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_801818F8; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80181C70[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80181D20[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80181D50[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80181DB4; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_8018E868[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80181DD8[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_8018E8C0[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80181E20[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80181E10; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_8018E118[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80181E28[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80181E7C[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80181E44; +extern s16 D_80181E78; +extern s16 D_80181E76; +extern s16 D_80181E74; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80181E88[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_8018E920; +extern u8 D_8018E921; +extern u8 D_8018E922; +extern u8 D_8018E923; +extern u8 D_8018E924; +extern u8 D_8018E925; +extern u8 D_8018E926; +extern u8 D_8018E927; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80181E98[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_8018E960; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80181EDC[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80181F58[]; +extern s32 D_80181F78[]; +extern u8 D_80181FF4[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80182014[]; +extern u8 D_80182034[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_801820D0[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_8018214C[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_8018E128; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80182158[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80182160[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80182228[])(void); +extern void func_80166618(void *a0); +extern void (*D_80182238[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80182248[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80182254[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_801821B4[]; +extern u8 D_801821C8[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_8018226C[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80182274[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_8018227C[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80182284[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_8018228C[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80182294[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_8018229C[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80182350[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80182358[])(void); +extern void func_80169F00(void *a0); +extern char D_80182308[]; +extern char D_801822C8[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80182390[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_8018239C[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_801823E4[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_801823A4[]; + extern u8 D_801823B4[]; + extern u8 D_8018EC30[]; + extern u8 D_8018EC58[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_801823A4, D_8018EC30) + 3; + func_8001CE28(obj, D_8018EC30); + } else { + var_s3 = func_80024054(D_801823B4, D_8018EC58) + 9; + func_8001CE28(obj, D_8018EC58); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80182460[])(void); + +void func_8016B4BC(void *a0) { + D_80182460[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_8018EC80; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_8018EC80); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80182454[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80182454; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80182498[]; +extern unsigned short D_801824A0[]; +extern unsigned short D_801824A8[]; +extern unsigned char D_8018EC88[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_8018EC88 + param_2 * 0x40); + puVar3 = D_80182498[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_801824A0[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_801824A8[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_8018EC80; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_8018EC80, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_801824B0[])(void); + +void func_8016BBA4(void *a0) { + D_801824B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_8018EDBC; + extern u8 D_8018EDBD; + extern u8 D_8018EDBE; + extern M2C_UNK D_8018EDC0; + extern u8 D_8018EDC1; + extern u8 D_8018EDC2; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_8018EDBC) = 0x20; + D_8018EDBD = 0x20; + D_8018EDBE = 0; + (*(u8 *)&D_8018EDC0) = 0xc0; + D_8018EDC1 = 0xc0; + D_8018EDC2 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_8018EDBC; +extern M2C_UNK D_8018EDC0; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_8018EDBC, &D_8018EDC0, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_8018EDBD; + extern u8 D_8018EDBE; + extern u8 D_8018EDC1; + extern u8 D_8018EDC2; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_8018EDBC); + if (*p1 != 0) *p1 -= 4; + if (D_8018EDBD != 0) D_8018EDBD -= 4; + if (D_8018EDBE != 0) D_8018EDBE -= 4; + p2 = &(*(u8 *)&D_8018EDC0); + if (*p2 != 0) *p2 -= 4; + if (D_8018EDC1 != 0) D_8018EDC1 -= 4; + if (D_8018EDC2 != 0) D_8018EDC2 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_8018EDBC), &(*(int *)&D_8018EDC0), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_8018ED48; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_8018ED48); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_801824C0; + extern s32 D_801824C8; + extern s32 D_801824D0; + extern s32 D_801824D8; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_801824C0, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_801824C8, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_801824D0, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_801824D8, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_801824E0[])(void); + +void func_8016C14C(void *a0) { + D_801824E0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_8018EDC4[]; +extern u8 D_8018EDCC[]; +extern u8 D_8018ED7C[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_8018EDC4, D_8018EDCC, D_8018ED7C); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_8018EDD8[]; + extern u8 D_8018EE98; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_8018EDD8[1] = 0xff; + D_8018EDD8[2] = 0x10; + D_8018EDD8[0] = 0x10; + D_8018EDD8[6] = 0; + D_8018EDD8[5] = 0; + D_8018EDD8[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_8018EDD8, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_8018EE98, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_8018EDD8); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8016AB6C", func_8016C998); + + +extern void (*D_801824E8[])(void); + +void func_8016CB84(void *a0) { + D_801824E8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_8018EE98[]; + + + Blk_8016CF04_8016CF04 *p = &D_8018EE98[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80182504[])(void); + +void func_8016D19C(void *a0) { + D_80182504[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_8018250C[])(void); + +void func_8016D428(void *a0) { + D_8018250C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80182574[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80182574[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80182518; +extern u8 D_80182524; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80182518, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80182524); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8016AB6C", func_8016DC20); + + +extern void (*D_801825A8[])(void); + +void func_8016DEA4(void *a0) { + D_801825A8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_801825B0[])(void); + +void func_8016DF20(void *a0) { + D_801825B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80182604[])(void); + +void func_8016E5B8(void *a0) { + D_80182604[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_801825C4[4]; + extern s32 D_801825E4; + extern s32 D_801825EC; + extern s32 D_801825F4; + extern s32 D_801825FC; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_801825C4[0], pp, &tmp); + RotTransSV(&D_801825C4[1], &prim.v[1], &tmp); + RotTransSV(&D_801825C4[2], &prim.v[2], &tmp); + RotTransSV(&D_801825C4[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_801825E4; + prim.f1 = D_801825EC; + prim.f2 = D_801825F4; + prim.f3 = D_801825FC; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80182644[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80182644[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80182638[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80182638[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80182628[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80182628[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80182638[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80182638[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80182638[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80182654; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80182654; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_801826CC[])(void); + +void func_8016F6E0(void *a0) { + D_801826CC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_801826D4[])(void); + +void func_8016F798(void *a0) { + D_801826D4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_801826DC[])(void); + +void func_8016F834(void *a0) { + D_801826DC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_801826E4[])(void); + +void func_8016F8E4(void *a0) { + D_801826E4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_801826EC[])(void); + +void func_8016F9C4(void *a0) { + D_801826EC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_801826F4[])(void); + +void func_8016FA84(void *a0) { + D_801826F4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80182700[])(void); + +void func_8016FB7C(void *a0) { + D_80182700[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_8018270C[])(void); + +void func_8016FC90(void *a0) { + D_8018270C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80182718[])(void); + +void func_8016FDB4(void *a0) { + D_80182718[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80182728[])(void); + +void func_8016FF30(void *a0) { + D_80182728[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80182738[])(void); + +void func_8016FFDC(void *a0) { + D_80182738[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80182740[])(void); + +void func_80170150(void *a0) { + D_80182740[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80182748[])(void); + +void func_80170240(void *a0) { + D_80182748[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80182750[])(void); + +void func_801702FC(void *a0) { + D_80182750[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80182758[])(void); + +void func_801703E0(void *a0) { + D_80182758[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80182760[])(void); + +void func_801704B0(void *a0) { + D_80182760[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80182768[])(void); + +void func_80170548(void *a0) { + D_80182768[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80182770[])(void); + +void func_801705F8(void *a0) { + D_80182770[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80182778[])(void); + +void func_801706AC(void *a0) { + D_80182778[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80182780[])(void); + +void func_80170748(void *a0) { + D_80182780[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80182788[])(void); + +void func_80170810(void *a0) { + D_80182788[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80182790[])(void); + +void func_80170AD8(void *a0) { + D_80182790[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80182798[])(void); + +void func_80170BD8(void *a0) { + D_80182798[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_801827A0[])(void); + +void func_80170C74(void *a0) { + D_801827A0[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8016AB6C", func_80170CF0); + + +extern void (*D_801827A8[])(void); + +void func_80170D68(void *a0) { + D_801827A8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_801827B0[])(void); + +void func_80170E34(void *a0) { + D_801827B0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_801827B8[])(void); + +void func_80170EFC(void *a0) { + D_801827B8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_801827C0[])(void); + +void func_80170FB0(void *a0) { + D_801827C0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_801827C8[])(void); + +void func_80171064(void *a0) { + D_801827C8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_801827D0[])(void); + +void func_80171120(void *a0) { + D_801827D0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_801827D8[])(void); + +void func_801711C0(void *a0) { + D_801827D8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_801827E0[])(void); + +void func_80171260(void *a0) { + D_801827E0[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_801827E8[])(void); + +void func_801714E4(void *a0) { + D_801827E8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8016AB6C", func_80172C50); + + +extern void (*D_8018282C[])(void); + +void func_80172CA0(void *a0) { + D_8018282C[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_801827F0; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_801827F0); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC04_000/ov_SC04_000_jr_8015AE2C.c b/src/ov_SC04_000/ov_SC04_000_jr_8015AE2C.c index 2154adeff..d7e3a793e 100644 --- a/src/ov_SC04_000/ov_SC04_000_jr_8015AE2C.c +++ b/src/ov_SC04_000/ov_SC04_000_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_801863F0[])(void); void func_8016AB30(void *a0) { D_801863F0[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_8018646C[])(void); - -void func_8016B4BC(void *a0) { - D_8018646C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801A8D30; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801A8D30); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80186460[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80186460; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_801864A4[]; -extern unsigned short D_801864AC[]; -extern unsigned short D_801864B4[]; -extern unsigned char D_801A8D38[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801A8D38 + param_2 * 0x40); - puVar3 = D_801864A4[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_801864AC[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_801864B4[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801A8D30; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801A8D30, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_801864BC[])(void); - -void func_8016BBA4(void *a0) { - D_801864BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801A8E6C; - extern u8 D_801A8E6D; - extern u8 D_801A8E6E; - extern M2C_UNK D_801A8E70; - extern u8 D_801A8E71; - extern u8 D_801A8E72; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801A8E6C) = 0x20; - D_801A8E6D = 0x20; - D_801A8E6E = 0; - (*(u8 *)&D_801A8E70) = 0xc0; - D_801A8E71 = 0xc0; - D_801A8E72 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801A8E6C; -extern M2C_UNK D_801A8E70; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801A8E6C, &D_801A8E70, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801A8E6D; - extern u8 D_801A8E6E; - extern u8 D_801A8E71; - extern u8 D_801A8E72; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801A8E6C); - if (*p1 != 0) *p1 -= 4; - if (D_801A8E6D != 0) D_801A8E6D -= 4; - if (D_801A8E6E != 0) D_801A8E6E -= 4; - p2 = &(*(u8 *)&D_801A8E70); - if (*p2 != 0) *p2 -= 4; - if (D_801A8E71 != 0) D_801A8E71 -= 4; - if (D_801A8E72 != 0) D_801A8E72 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801A8E6C), &(*(int *)&D_801A8E70), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801A8DF8; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801A8DF8); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_801864CC; - extern s32 D_801864D4; - extern s32 D_801864DC; - extern s32 D_801864E4; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_801864CC, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_801864D4, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_801864DC, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_801864E4, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_801864EC[])(void); - -void func_8016C14C(void *a0) { - D_801864EC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801A8E74[]; -extern u8 D_801A8E7C[]; -extern u8 D_801A8E2C[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801A8E74, D_801A8E7C, D_801A8E2C); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801A8E88[]; - extern u8 D_801A8F48; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801A8E88[1] = 0xff; - D_801A8E88[2] = 0x10; - D_801A8E88[0] = 0x10; - D_801A8E88[6] = 0; - D_801A8E88[5] = 0; - D_801A8E88[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801A8E88, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801A8F48, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801A8E88); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8015AE2C", func_8016C998); - - -extern void (*D_801864F4[])(void); - -void func_8016CB84(void *a0) { - D_801864F4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801A8F48[]; - - - Blk_8016CF04_8016CF04 *p = &D_801A8F48[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80186510[])(void); - -void func_8016D19C(void *a0) { - D_80186510[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80186518[])(void); - -void func_8016D428(void *a0) { - D_80186518[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80186580[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80186580[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80186524; -extern u8 D_80186530; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80186524, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80186530); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8015AE2C", func_8016DC20); - - -extern void (*D_801865B4[])(void); - -void func_8016DEA4(void *a0) { - D_801865B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_801865BC[])(void); - -void func_8016DF20(void *a0) { - D_801865BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80186610[])(void); - -void func_8016E5B8(void *a0) { - D_80186610[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_801865D0[4]; - extern s32 D_801865F0; - extern s32 D_801865F8; - extern s32 D_80186600; - extern s32 D_80186608; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_801865D0[0], pp, &tmp); - RotTransSV(&D_801865D0[1], &prim.v[1], &tmp); - RotTransSV(&D_801865D0[2], &prim.v[2], &tmp); - RotTransSV(&D_801865D0[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_801865F0; - prim.f1 = D_801865F8; - prim.f2 = D_80186600; - prim.f3 = D_80186608; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80186650[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80186650[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80186644[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80186644[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80186634[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80186634[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80186644[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80186644[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80186644[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80186660; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80186660; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_801866D8[])(void); - -void func_8016F6E0(void *a0) { - D_801866D8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_801866E0[])(void); - -void func_8016F798(void *a0) { - D_801866E0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_801866E8[])(void); - -void func_8016F834(void *a0) { - D_801866E8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_801866F0[])(void); - -void func_8016F8E4(void *a0) { - D_801866F0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_801866F8[])(void); - -void func_8016F9C4(void *a0) { - D_801866F8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80186700[])(void); - -void func_8016FA84(void *a0) { - D_80186700[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_8018670C[])(void); - -void func_8016FB7C(void *a0) { - D_8018670C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80186718[])(void); - -void func_8016FC90(void *a0) { - D_80186718[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80186724[])(void); - -void func_8016FDB4(void *a0) { - D_80186724[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80186734[])(void); - -void func_8016FF30(void *a0) { - D_80186734[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80186744[])(void); - -void func_8016FFDC(void *a0) { - D_80186744[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_8018674C[])(void); - -void func_80170150(void *a0) { - D_8018674C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80186754[])(void); - -void func_80170240(void *a0) { - D_80186754[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_8018675C[])(void); - -void func_801702FC(void *a0) { - D_8018675C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80186764[])(void); - -void func_801703E0(void *a0) { - D_80186764[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_8018676C[])(void); - -void func_801704B0(void *a0) { - D_8018676C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80186774[])(void); - -void func_80170548(void *a0) { - D_80186774[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_8018677C[])(void); - -void func_801705F8(void *a0) { - D_8018677C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80186784[])(void); - -void func_801706AC(void *a0) { - D_80186784[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_8018678C[])(void); - -void func_80170748(void *a0) { - D_8018678C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80186794[])(void); - -void func_80170810(void *a0) { - D_80186794[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_8018679C[])(void); - -void func_80170AD8(void *a0) { - D_8018679C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_801867A4[])(void); - -void func_80170BD8(void *a0) { - D_801867A4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_801867AC[])(void); - -void func_80170C74(void *a0) { - D_801867AC[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8015AE2C", func_80170CF0); - - -extern void (*D_801867B4[])(void); - -void func_80170D68(void *a0) { - D_801867B4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_801867BC[])(void); - -void func_80170E34(void *a0) { - D_801867BC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_801867C4[])(void); - -void func_80170EFC(void *a0) { - D_801867C4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_801867CC[])(void); - -void func_80170FB0(void *a0) { - D_801867CC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_801867D4[])(void); - -void func_80171064(void *a0) { - D_801867D4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_801867DC[])(void); - -void func_80171120(void *a0) { - D_801867DC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_801867E4[])(void); - -void func_801711C0(void *a0) { - D_801867E4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_801867EC[])(void); - -void func_80171260(void *a0) { - D_801867EC[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_801867F4[])(void); - -void func_801714E4(void *a0) { - D_801867F4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8015AE2C", func_80172C50); - - -extern void (*D_80186838[])(void); - -void func_80172CA0(void *a0) { - D_80186838[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_801867FC; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_801867FC); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC04_000/ov_SC04_000_jr_8016AB6C.c b/src/ov_SC04_000/ov_SC04_000_jr_8016AB6C.c new file mode 100644 index 000000000..52f625be0 --- /dev/null +++ b/src/ov_SC04_000/ov_SC04_000_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801857BC; +extern u8 D_8018572C; +extern u8 D_80185708; +extern u8 D_801856E4; +extern u8 D_80185798; +extern u8 D_80185774; +extern u8 D_80185750; +extern u8 D_801856C0; +extern void func_80145934(void); +extern u8 D_8018584C; +extern u8 D_80185828; +extern u8 D_80185804; +extern u8 D_801857E0; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80184C44[]; +extern unsigned char D_80184C74[]; +extern unsigned char D_80184CC4[]; +extern unsigned char D_80184CF4[]; +extern unsigned char D_80184D24[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80184D74[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80184E3C[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80184EC4[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80184ECC; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801A88C0; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801A88C4; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80184EFC; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80184FA4[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80184FC8[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80184FB8; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80184FDC[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80184FE8[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80184FF8[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80185010[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80185000; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80185024[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80185040[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80185030; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80185054[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80185068[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018507C; +extern void (*D_801850A4[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80185084; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801850F0[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801850F4[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80185558[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80185568[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801A88F8; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80185590[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80185570; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80185580; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801855D0[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801855D8[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_801855A4; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801855E4[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_801855B4; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801A8900; +extern s32 D_801A890C; +extern s32 D_801A8910; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80185620[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801855F4[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801A8908; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80185870[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80185690[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80185914[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80185A68[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80185884; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80185A70[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80185894; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801858B4; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80185A78[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80185AA0[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80185AAC[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80185920[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80185B50; +extern void func_8015D380(s32 a0); +extern unsigned char D_80184C34[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80185B64[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80185BA0[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80185BE8; +extern u16 D_80185BEA; +extern u16 D_80185BEC; +extern s32 D_80185BF0; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80185BF8; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80185904; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80185C7C[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80185D2C[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80185D5C[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80185DC0; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801A8918[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80185DE4[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801A8970[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80185E2C[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80185E1C; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801A8194[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80185E34[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80185E88[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80185E50; +extern s16 D_80185E84; +extern s16 D_80185E82; +extern s16 D_80185E80; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80185E94[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801A89D0; +extern u8 D_801A89D1; +extern u8 D_801A89D2; +extern u8 D_801A89D3; +extern u8 D_801A89D4; +extern u8 D_801A89D5; +extern u8 D_801A89D6; +extern u8 D_801A89D7; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80185EA4[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801A8A10; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80185EE8[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80185F64[]; +extern s32 D_80185F84[]; +extern u8 D_80186000[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80186020[]; +extern u8 D_80186040[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_801860DC[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80186158[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801A81A4; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80186164[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_8018616C[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80186234[])(void); +extern void func_80166618(void *a0); +extern void (*D_80186244[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80186254[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80186260[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_801861C0[]; +extern u8 D_801861D4[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80186278[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80186280[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80186288[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80186290[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80186298[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_801862A0[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_801862A8[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_8018635C[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80186364[])(void); +extern void func_80169F00(void *a0); +extern char D_80186314[]; +extern char D_801862D4[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_8018639C[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_801863A8[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_801863F0[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_801863B0[]; + extern u8 D_801863C0[]; + extern u8 D_801A8CE0[]; + extern u8 D_801A8D08[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_801863B0, D_801A8CE0) + 3; + func_8001CE28(obj, D_801A8CE0); + } else { + var_s3 = func_80024054(D_801863C0, D_801A8D08) + 9; + func_8001CE28(obj, D_801A8D08); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_8018646C[])(void); + +void func_8016B4BC(void *a0) { + D_8018646C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801A8D30; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801A8D30); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80186460[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80186460; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_801864A4[]; +extern unsigned short D_801864AC[]; +extern unsigned short D_801864B4[]; +extern unsigned char D_801A8D38[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801A8D38 + param_2 * 0x40); + puVar3 = D_801864A4[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_801864AC[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_801864B4[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801A8D30; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801A8D30, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_801864BC[])(void); + +void func_8016BBA4(void *a0) { + D_801864BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801A8E6C; + extern u8 D_801A8E6D; + extern u8 D_801A8E6E; + extern M2C_UNK D_801A8E70; + extern u8 D_801A8E71; + extern u8 D_801A8E72; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801A8E6C) = 0x20; + D_801A8E6D = 0x20; + D_801A8E6E = 0; + (*(u8 *)&D_801A8E70) = 0xc0; + D_801A8E71 = 0xc0; + D_801A8E72 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801A8E6C; +extern M2C_UNK D_801A8E70; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801A8E6C, &D_801A8E70, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801A8E6D; + extern u8 D_801A8E6E; + extern u8 D_801A8E71; + extern u8 D_801A8E72; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801A8E6C); + if (*p1 != 0) *p1 -= 4; + if (D_801A8E6D != 0) D_801A8E6D -= 4; + if (D_801A8E6E != 0) D_801A8E6E -= 4; + p2 = &(*(u8 *)&D_801A8E70); + if (*p2 != 0) *p2 -= 4; + if (D_801A8E71 != 0) D_801A8E71 -= 4; + if (D_801A8E72 != 0) D_801A8E72 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801A8E6C), &(*(int *)&D_801A8E70), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801A8DF8; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801A8DF8); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_801864CC; + extern s32 D_801864D4; + extern s32 D_801864DC; + extern s32 D_801864E4; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_801864CC, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_801864D4, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_801864DC, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_801864E4, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_801864EC[])(void); + +void func_8016C14C(void *a0) { + D_801864EC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801A8E74[]; +extern u8 D_801A8E7C[]; +extern u8 D_801A8E2C[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801A8E74, D_801A8E7C, D_801A8E2C); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801A8E88[]; + extern u8 D_801A8F48; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801A8E88[1] = 0xff; + D_801A8E88[2] = 0x10; + D_801A8E88[0] = 0x10; + D_801A8E88[6] = 0; + D_801A8E88[5] = 0; + D_801A8E88[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801A8E88, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801A8F48, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801A8E88); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8016AB6C", func_8016C998); + + +extern void (*D_801864F4[])(void); + +void func_8016CB84(void *a0) { + D_801864F4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801A8F48[]; + + + Blk_8016CF04_8016CF04 *p = &D_801A8F48[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80186510[])(void); + +void func_8016D19C(void *a0) { + D_80186510[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80186518[])(void); + +void func_8016D428(void *a0) { + D_80186518[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80186580[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80186580[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80186524; +extern u8 D_80186530; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80186524, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80186530); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8016AB6C", func_8016DC20); + + +extern void (*D_801865B4[])(void); + +void func_8016DEA4(void *a0) { + D_801865B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_801865BC[])(void); + +void func_8016DF20(void *a0) { + D_801865BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80186610[])(void); + +void func_8016E5B8(void *a0) { + D_80186610[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_801865D0[4]; + extern s32 D_801865F0; + extern s32 D_801865F8; + extern s32 D_80186600; + extern s32 D_80186608; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_801865D0[0], pp, &tmp); + RotTransSV(&D_801865D0[1], &prim.v[1], &tmp); + RotTransSV(&D_801865D0[2], &prim.v[2], &tmp); + RotTransSV(&D_801865D0[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_801865F0; + prim.f1 = D_801865F8; + prim.f2 = D_80186600; + prim.f3 = D_80186608; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80186650[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80186650[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80186644[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80186644[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80186634[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80186634[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80186644[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80186644[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80186644[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80186660; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80186660; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_801866D8[])(void); + +void func_8016F6E0(void *a0) { + D_801866D8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_801866E0[])(void); + +void func_8016F798(void *a0) { + D_801866E0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_801866E8[])(void); + +void func_8016F834(void *a0) { + D_801866E8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_801866F0[])(void); + +void func_8016F8E4(void *a0) { + D_801866F0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_801866F8[])(void); + +void func_8016F9C4(void *a0) { + D_801866F8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80186700[])(void); + +void func_8016FA84(void *a0) { + D_80186700[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_8018670C[])(void); + +void func_8016FB7C(void *a0) { + D_8018670C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80186718[])(void); + +void func_8016FC90(void *a0) { + D_80186718[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80186724[])(void); + +void func_8016FDB4(void *a0) { + D_80186724[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80186734[])(void); + +void func_8016FF30(void *a0) { + D_80186734[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80186744[])(void); + +void func_8016FFDC(void *a0) { + D_80186744[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_8018674C[])(void); + +void func_80170150(void *a0) { + D_8018674C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80186754[])(void); + +void func_80170240(void *a0) { + D_80186754[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_8018675C[])(void); + +void func_801702FC(void *a0) { + D_8018675C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80186764[])(void); + +void func_801703E0(void *a0) { + D_80186764[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_8018676C[])(void); + +void func_801704B0(void *a0) { + D_8018676C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80186774[])(void); + +void func_80170548(void *a0) { + D_80186774[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_8018677C[])(void); + +void func_801705F8(void *a0) { + D_8018677C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80186784[])(void); + +void func_801706AC(void *a0) { + D_80186784[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_8018678C[])(void); + +void func_80170748(void *a0) { + D_8018678C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80186794[])(void); + +void func_80170810(void *a0) { + D_80186794[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_8018679C[])(void); + +void func_80170AD8(void *a0) { + D_8018679C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_801867A4[])(void); + +void func_80170BD8(void *a0) { + D_801867A4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_801867AC[])(void); + +void func_80170C74(void *a0) { + D_801867AC[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8016AB6C", func_80170CF0); + + +extern void (*D_801867B4[])(void); + +void func_80170D68(void *a0) { + D_801867B4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_801867BC[])(void); + +void func_80170E34(void *a0) { + D_801867BC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_801867C4[])(void); + +void func_80170EFC(void *a0) { + D_801867C4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_801867CC[])(void); + +void func_80170FB0(void *a0) { + D_801867CC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_801867D4[])(void); + +void func_80171064(void *a0) { + D_801867D4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_801867DC[])(void); + +void func_80171120(void *a0) { + D_801867DC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_801867E4[])(void); + +void func_801711C0(void *a0) { + D_801867E4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_801867EC[])(void); + +void func_80171260(void *a0) { + D_801867EC[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_801867F4[])(void); + +void func_801714E4(void *a0) { + D_801867F4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8016AB6C", func_80172C50); + + +extern void (*D_80186838[])(void); + +void func_80172CA0(void *a0) { + D_80186838[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_801867FC; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_801867FC); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC04_002/ov_SC04_002_jr_8015AE2C.c b/src/ov_SC04_002/ov_SC04_002_jr_8015AE2C.c index 180935576..874b8f2a6 100644 --- a/src/ov_SC04_002/ov_SC04_002_jr_8015AE2C.c +++ b/src/ov_SC04_002/ov_SC04_002_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_8018B55C[])(void); void func_8016AB30(void *a0) { D_8018B55C[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_8018B5D8[])(void); - -void func_8016B4BC(void *a0) { - D_8018B5D8[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801C0040; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801C0040); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_8018B5CC[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_8018B5CC; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_8018B610[]; -extern unsigned short D_8018B618[]; -extern unsigned short D_8018B620[]; -extern unsigned char D_801C0048[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801C0048 + param_2 * 0x40); - puVar3 = D_8018B610[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_8018B618[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_8018B620[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801C0040; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801C0040, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_8018B628[])(void); - -void func_8016BBA4(void *a0) { - D_8018B628[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801C017C; - extern u8 D_801C017D; - extern u8 D_801C017E; - extern M2C_UNK D_801C0180; - extern u8 D_801C0181; - extern u8 D_801C0182; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801C017C) = 0x20; - D_801C017D = 0x20; - D_801C017E = 0; - (*(u8 *)&D_801C0180) = 0xc0; - D_801C0181 = 0xc0; - D_801C0182 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801C017C; -extern M2C_UNK D_801C0180; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801C017C, &D_801C0180, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801C017D; - extern u8 D_801C017E; - extern u8 D_801C0181; - extern u8 D_801C0182; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801C017C); - if (*p1 != 0) *p1 -= 4; - if (D_801C017D != 0) D_801C017D -= 4; - if (D_801C017E != 0) D_801C017E -= 4; - p2 = &(*(u8 *)&D_801C0180); - if (*p2 != 0) *p2 -= 4; - if (D_801C0181 != 0) D_801C0181 -= 4; - if (D_801C0182 != 0) D_801C0182 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801C017C), &(*(int *)&D_801C0180), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801C0108; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801C0108); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_8018B638; - extern s32 D_8018B640; - extern s32 D_8018B648; - extern s32 D_8018B650; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_8018B638, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_8018B640, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_8018B648, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_8018B650, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_8018B658[])(void); - -void func_8016C14C(void *a0) { - D_8018B658[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801C0184[]; -extern u8 D_801C018C[]; -extern u8 D_801C013C[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801C0184, D_801C018C, D_801C013C); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801C0198[]; - extern u8 D_801C0258; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801C0198[1] = 0xff; - D_801C0198[2] = 0x10; - D_801C0198[0] = 0x10; - D_801C0198[6] = 0; - D_801C0198[5] = 0; - D_801C0198[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801C0198, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801C0258, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801C0198); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8015AE2C", func_8016C998); - - -extern void (*D_8018B660[])(void); - -void func_8016CB84(void *a0) { - D_8018B660[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801C0258[]; - - - Blk_8016CF04_8016CF04 *p = &D_801C0258[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_8018B67C[])(void); - -void func_8016D19C(void *a0) { - D_8018B67C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_8018B684[])(void); - -void func_8016D428(void *a0) { - D_8018B684[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_8018B6EC[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_8018B6EC[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_8018B690; -extern u8 D_8018B69C; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018B690, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018B69C); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8015AE2C", func_8016DC20); - - -extern void (*D_8018B720[])(void); - -void func_8016DEA4(void *a0) { - D_8018B720[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_8018B728[])(void); - -void func_8016DF20(void *a0) { - D_8018B728[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_8018B77C[])(void); - -void func_8016E5B8(void *a0) { - D_8018B77C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_8018B73C[4]; - extern s32 D_8018B75C; - extern s32 D_8018B764; - extern s32 D_8018B76C; - extern s32 D_8018B774; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_8018B73C[0], pp, &tmp); - RotTransSV(&D_8018B73C[1], &prim.v[1], &tmp); - RotTransSV(&D_8018B73C[2], &prim.v[2], &tmp); - RotTransSV(&D_8018B73C[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_8018B75C; - prim.f1 = D_8018B764; - prim.f2 = D_8018B76C; - prim.f3 = D_8018B774; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_8018B7BC[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_8018B7BC[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_8018B7B0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_8018B7B0[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_8018B7A0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_8018B7A0[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018B7B0[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_8018B7B0[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_8018B7B0[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_8018B7CC; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_8018B7CC; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_8018B844[])(void); - -void func_8016F6E0(void *a0) { - D_8018B844[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_8018B84C[])(void); - -void func_8016F798(void *a0) { - D_8018B84C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_8018B854[])(void); - -void func_8016F834(void *a0) { - D_8018B854[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_8018B85C[])(void); - -void func_8016F8E4(void *a0) { - D_8018B85C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_8018B864[])(void); - -void func_8016F9C4(void *a0) { - D_8018B864[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_8018B86C[])(void); - -void func_8016FA84(void *a0) { - D_8018B86C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_8018B878[])(void); - -void func_8016FB7C(void *a0) { - D_8018B878[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_8018B884[])(void); - -void func_8016FC90(void *a0) { - D_8018B884[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_8018B890[])(void); - -void func_8016FDB4(void *a0) { - D_8018B890[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_8018B8A0[])(void); - -void func_8016FF30(void *a0) { - D_8018B8A0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_8018B8B0[])(void); - -void func_8016FFDC(void *a0) { - D_8018B8B0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_8018B8B8[])(void); - -void func_80170150(void *a0) { - D_8018B8B8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_8018B8C0[])(void); - -void func_80170240(void *a0) { - D_8018B8C0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_8018B8C8[])(void); - -void func_801702FC(void *a0) { - D_8018B8C8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_8018B8D0[])(void); - -void func_801703E0(void *a0) { - D_8018B8D0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_8018B8D8[])(void); - -void func_801704B0(void *a0) { - D_8018B8D8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_8018B8E0[])(void); - -void func_80170548(void *a0) { - D_8018B8E0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_8018B8E8[])(void); - -void func_801705F8(void *a0) { - D_8018B8E8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_8018B8F0[])(void); - -void func_801706AC(void *a0) { - D_8018B8F0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_8018B8F8[])(void); - -void func_80170748(void *a0) { - D_8018B8F8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_8018B900[])(void); - -void func_80170810(void *a0) { - D_8018B900[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_8018B908[])(void); - -void func_80170AD8(void *a0) { - D_8018B908[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_8018B910[])(void); - -void func_80170BD8(void *a0) { - D_8018B910[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_8018B918[])(void); - -void func_80170C74(void *a0) { - D_8018B918[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8015AE2C", func_80170CF0); - - -extern void (*D_8018B920[])(void); - -void func_80170D68(void *a0) { - D_8018B920[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_8018B928[])(void); - -void func_80170E34(void *a0) { - D_8018B928[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_8018B930[])(void); - -void func_80170EFC(void *a0) { - D_8018B930[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_8018B938[])(void); - -void func_80170FB0(void *a0) { - D_8018B938[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_8018B940[])(void); - -void func_80171064(void *a0) { - D_8018B940[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_8018B948[])(void); - -void func_80171120(void *a0) { - D_8018B948[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_8018B950[])(void); - -void func_801711C0(void *a0) { - D_8018B950[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_8018B958[])(void); - -void func_80171260(void *a0) { - D_8018B958[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_8018B960[])(void); - -void func_801714E4(void *a0) { - D_8018B960[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8015AE2C", func_80172C50); - - -extern void (*D_8018B9A4[])(void); - -void func_80172CA0(void *a0) { - D_8018B9A4[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_8018B968; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_8018B968); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC04_002/ov_SC04_002_jr_8016AB6C.c b/src/ov_SC04_002/ov_SC04_002_jr_8016AB6C.c new file mode 100644 index 000000000..f64455563 --- /dev/null +++ b/src/ov_SC04_002/ov_SC04_002_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018A928; +extern u8 D_8018A898; +extern u8 D_8018A874; +extern u8 D_8018A850; +extern u8 D_8018A904; +extern u8 D_8018A8E0; +extern u8 D_8018A8BC; +extern u8 D_8018A82C; +extern void func_80145934(void); +extern u8 D_8018A9B8; +extern u8 D_8018A994; +extern u8 D_8018A970; +extern u8 D_8018A94C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80189DB0[]; +extern unsigned char D_80189DE0[]; +extern unsigned char D_80189E30[]; +extern unsigned char D_80189E60[]; +extern unsigned char D_80189E90[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80189EE0[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80189FA8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018A030[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018A038; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801BFBD0; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801BFBD4; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018A068; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018A110[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018A134[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018A124; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018A148[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018A154[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018A164[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018A17C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018A16C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018A190[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018A1AC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018A19C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018A1C0[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018A1D4[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018A1E8; +extern void (*D_8018A210[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018A1F0; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018A25C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018A260[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018A6C4[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018A6D4[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801BFC08; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018A6FC[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018A6DC; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018A6EC; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018A73C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018A744[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018A710; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018A750[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018A720; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801BFC10; +extern s32 D_801BFC1C; +extern s32 D_801BFC20; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018A78C[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018A760[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801BFC18; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018A9DC[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018A7FC[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018AA80[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018ABD4[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018A9F0; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018ABDC[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018AA00; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018AA20; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_8018ABE4[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_8018AC0C[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_8018AC18[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_8018AA8C[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_8018ACBC; +extern void func_8015D380(s32 a0); +extern unsigned char D_80189DA0[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_8018ACD0[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_8018AD0C[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_8018AD54; +extern u16 D_8018AD56; +extern u16 D_8018AD58; +extern s32 D_8018AD5C; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_8018AD64; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_8018AA70; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_8018ADE8[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_8018AE98[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_8018AEC8[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_8018AF2C; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801BFC28[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_8018AF50[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801BFC80[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_8018AF98[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_8018AF88; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801BF4E4[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_8018AFA0[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_8018AFF4[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_8018AFBC; +extern s16 D_8018AFF0; +extern s16 D_8018AFEE; +extern s16 D_8018AFEC; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_8018B000[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801BFCE0; +extern u8 D_801BFCE1; +extern u8 D_801BFCE2; +extern u8 D_801BFCE3; +extern u8 D_801BFCE4; +extern u8 D_801BFCE5; +extern u8 D_801BFCE6; +extern u8 D_801BFCE7; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_8018B010[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801BFD20; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_8018B054[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_8018B0D0[]; +extern s32 D_8018B0F0[]; +extern u8 D_8018B16C[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_8018B18C[]; +extern u8 D_8018B1AC[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_8018B248[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_8018B2C4[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801BF4F4; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_8018B2D0[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_8018B2D8[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_8018B3A0[])(void); +extern void func_80166618(void *a0); +extern void (*D_8018B3B0[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_8018B3C0[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_8018B3CC[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_8018B32C[]; +extern u8 D_8018B340[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_8018B3E4[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_8018B3EC[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_8018B3F4[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_8018B3FC[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_8018B404[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_8018B40C[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_8018B414[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_8018B4C8[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_8018B4D0[])(void); +extern void func_80169F00(void *a0); +extern char D_8018B480[]; +extern char D_8018B440[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_8018B508[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_8018B514[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_8018B55C[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_8018B51C[]; + extern u8 D_8018B52C[]; + extern u8 D_801BFFF0[]; + extern u8 D_801C0018[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_8018B51C, D_801BFFF0) + 3; + func_8001CE28(obj, D_801BFFF0); + } else { + var_s3 = func_80024054(D_8018B52C, D_801C0018) + 9; + func_8001CE28(obj, D_801C0018); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_8018B5D8[])(void); + +void func_8016B4BC(void *a0) { + D_8018B5D8[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801C0040; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801C0040); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_8018B5CC[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_8018B5CC; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_8018B610[]; +extern unsigned short D_8018B618[]; +extern unsigned short D_8018B620[]; +extern unsigned char D_801C0048[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801C0048 + param_2 * 0x40); + puVar3 = D_8018B610[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_8018B618[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_8018B620[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801C0040; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801C0040, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_8018B628[])(void); + +void func_8016BBA4(void *a0) { + D_8018B628[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801C017C; + extern u8 D_801C017D; + extern u8 D_801C017E; + extern M2C_UNK D_801C0180; + extern u8 D_801C0181; + extern u8 D_801C0182; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801C017C) = 0x20; + D_801C017D = 0x20; + D_801C017E = 0; + (*(u8 *)&D_801C0180) = 0xc0; + D_801C0181 = 0xc0; + D_801C0182 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801C017C; +extern M2C_UNK D_801C0180; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801C017C, &D_801C0180, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801C017D; + extern u8 D_801C017E; + extern u8 D_801C0181; + extern u8 D_801C0182; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801C017C); + if (*p1 != 0) *p1 -= 4; + if (D_801C017D != 0) D_801C017D -= 4; + if (D_801C017E != 0) D_801C017E -= 4; + p2 = &(*(u8 *)&D_801C0180); + if (*p2 != 0) *p2 -= 4; + if (D_801C0181 != 0) D_801C0181 -= 4; + if (D_801C0182 != 0) D_801C0182 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801C017C), &(*(int *)&D_801C0180), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801C0108; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801C0108); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_8018B638; + extern s32 D_8018B640; + extern s32 D_8018B648; + extern s32 D_8018B650; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_8018B638, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_8018B640, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_8018B648, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_8018B650, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_8018B658[])(void); + +void func_8016C14C(void *a0) { + D_8018B658[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801C0184[]; +extern u8 D_801C018C[]; +extern u8 D_801C013C[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801C0184, D_801C018C, D_801C013C); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801C0198[]; + extern u8 D_801C0258; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801C0198[1] = 0xff; + D_801C0198[2] = 0x10; + D_801C0198[0] = 0x10; + D_801C0198[6] = 0; + D_801C0198[5] = 0; + D_801C0198[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801C0198, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801C0258, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801C0198); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8016AB6C", func_8016C998); + + +extern void (*D_8018B660[])(void); + +void func_8016CB84(void *a0) { + D_8018B660[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801C0258[]; + + + Blk_8016CF04_8016CF04 *p = &D_801C0258[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_8018B67C[])(void); + +void func_8016D19C(void *a0) { + D_8018B67C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_8018B684[])(void); + +void func_8016D428(void *a0) { + D_8018B684[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018B6EC[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_8018B6EC[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_8018B690; +extern u8 D_8018B69C; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018B690, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018B69C); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8016AB6C", func_8016DC20); + + +extern void (*D_8018B720[])(void); + +void func_8016DEA4(void *a0) { + D_8018B720[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_8018B728[])(void); + +void func_8016DF20(void *a0) { + D_8018B728[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_8018B77C[])(void); + +void func_8016E5B8(void *a0) { + D_8018B77C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_8018B73C[4]; + extern s32 D_8018B75C; + extern s32 D_8018B764; + extern s32 D_8018B76C; + extern s32 D_8018B774; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_8018B73C[0], pp, &tmp); + RotTransSV(&D_8018B73C[1], &prim.v[1], &tmp); + RotTransSV(&D_8018B73C[2], &prim.v[2], &tmp); + RotTransSV(&D_8018B73C[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_8018B75C; + prim.f1 = D_8018B764; + prim.f2 = D_8018B76C; + prim.f3 = D_8018B774; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_8018B7BC[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_8018B7BC[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_8018B7B0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_8018B7B0[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_8018B7A0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_8018B7A0[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018B7B0[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_8018B7B0[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_8018B7B0[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_8018B7CC; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_8018B7CC; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_8018B844[])(void); + +void func_8016F6E0(void *a0) { + D_8018B844[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_8018B84C[])(void); + +void func_8016F798(void *a0) { + D_8018B84C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_8018B854[])(void); + +void func_8016F834(void *a0) { + D_8018B854[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_8018B85C[])(void); + +void func_8016F8E4(void *a0) { + D_8018B85C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_8018B864[])(void); + +void func_8016F9C4(void *a0) { + D_8018B864[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_8018B86C[])(void); + +void func_8016FA84(void *a0) { + D_8018B86C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_8018B878[])(void); + +void func_8016FB7C(void *a0) { + D_8018B878[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_8018B884[])(void); + +void func_8016FC90(void *a0) { + D_8018B884[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_8018B890[])(void); + +void func_8016FDB4(void *a0) { + D_8018B890[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_8018B8A0[])(void); + +void func_8016FF30(void *a0) { + D_8018B8A0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_8018B8B0[])(void); + +void func_8016FFDC(void *a0) { + D_8018B8B0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_8018B8B8[])(void); + +void func_80170150(void *a0) { + D_8018B8B8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_8018B8C0[])(void); + +void func_80170240(void *a0) { + D_8018B8C0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_8018B8C8[])(void); + +void func_801702FC(void *a0) { + D_8018B8C8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_8018B8D0[])(void); + +void func_801703E0(void *a0) { + D_8018B8D0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_8018B8D8[])(void); + +void func_801704B0(void *a0) { + D_8018B8D8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_8018B8E0[])(void); + +void func_80170548(void *a0) { + D_8018B8E0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_8018B8E8[])(void); + +void func_801705F8(void *a0) { + D_8018B8E8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_8018B8F0[])(void); + +void func_801706AC(void *a0) { + D_8018B8F0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_8018B8F8[])(void); + +void func_80170748(void *a0) { + D_8018B8F8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_8018B900[])(void); + +void func_80170810(void *a0) { + D_8018B900[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_8018B908[])(void); + +void func_80170AD8(void *a0) { + D_8018B908[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_8018B910[])(void); + +void func_80170BD8(void *a0) { + D_8018B910[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_8018B918[])(void); + +void func_80170C74(void *a0) { + D_8018B918[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8016AB6C", func_80170CF0); + + +extern void (*D_8018B920[])(void); + +void func_80170D68(void *a0) { + D_8018B920[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_8018B928[])(void); + +void func_80170E34(void *a0) { + D_8018B928[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_8018B930[])(void); + +void func_80170EFC(void *a0) { + D_8018B930[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_8018B938[])(void); + +void func_80170FB0(void *a0) { + D_8018B938[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_8018B940[])(void); + +void func_80171064(void *a0) { + D_8018B940[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_8018B948[])(void); + +void func_80171120(void *a0) { + D_8018B948[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_8018B950[])(void); + +void func_801711C0(void *a0) { + D_8018B950[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_8018B958[])(void); + +void func_80171260(void *a0) { + D_8018B958[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_8018B960[])(void); + +void func_801714E4(void *a0) { + D_8018B960[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8016AB6C", func_80172C50); + + +extern void (*D_8018B9A4[])(void); + +void func_80172CA0(void *a0) { + D_8018B9A4[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_8018B968; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_8018B968); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC04_003/ov_SC04_003_jr_8015AE2C.c b/src/ov_SC04_003/ov_SC04_003_jr_8015AE2C.c index e0906b11e..18a82cb6b 100644 --- a/src/ov_SC04_003/ov_SC04_003_jr_8015AE2C.c +++ b/src/ov_SC04_003/ov_SC04_003_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_801852F8[])(void); void func_8016AB30(void *a0) { D_801852F8[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80185374[])(void); - -void func_8016B4BC(void *a0) { - D_80185374[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_8019ACA8; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_8019ACA8); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80185368[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80185368; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_801853AC[]; -extern unsigned short D_801853B4[]; -extern unsigned short D_801853BC[]; -extern unsigned char D_8019ACB0[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_8019ACB0 + param_2 * 0x40); - puVar3 = D_801853AC[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_801853B4[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_801853BC[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_8019ACA8; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_8019ACA8, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_801853C4[])(void); - -void func_8016BBA4(void *a0) { - D_801853C4[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_8019ADE4; - extern u8 D_8019ADE5; - extern u8 D_8019ADE6; - extern M2C_UNK D_8019ADE8; - extern u8 D_8019ADE9; - extern u8 D_8019ADEA; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_8019ADE4) = 0x20; - D_8019ADE5 = 0x20; - D_8019ADE6 = 0; - (*(u8 *)&D_8019ADE8) = 0xc0; - D_8019ADE9 = 0xc0; - D_8019ADEA = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_8019ADE4; -extern M2C_UNK D_8019ADE8; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_8019ADE4, &D_8019ADE8, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_8019ADE5; - extern u8 D_8019ADE6; - extern u8 D_8019ADE9; - extern u8 D_8019ADEA; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_8019ADE4); - if (*p1 != 0) *p1 -= 4; - if (D_8019ADE5 != 0) D_8019ADE5 -= 4; - if (D_8019ADE6 != 0) D_8019ADE6 -= 4; - p2 = &(*(u8 *)&D_8019ADE8); - if (*p2 != 0) *p2 -= 4; - if (D_8019ADE9 != 0) D_8019ADE9 -= 4; - if (D_8019ADEA != 0) D_8019ADEA -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_8019ADE4), &(*(int *)&D_8019ADE8), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_8019AD70; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_8019AD70); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_801853D4; - extern s32 D_801853DC; - extern s32 D_801853E4; - extern s32 D_801853EC; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_801853D4, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_801853DC, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_801853E4, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_801853EC, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_801853F4[])(void); - -void func_8016C14C(void *a0) { - D_801853F4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_8019ADEC[]; -extern u8 D_8019ADF4[]; -extern u8 D_8019ADA4[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_8019ADEC, D_8019ADF4, D_8019ADA4); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_8019AE00[]; - extern u8 D_8019AEC0; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_8019AE00[1] = 0xff; - D_8019AE00[2] = 0x10; - D_8019AE00[0] = 0x10; - D_8019AE00[6] = 0; - D_8019AE00[5] = 0; - D_8019AE00[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_8019AE00, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_8019AEC0, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_8019AE00); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8015AE2C", func_8016C998); - - -extern void (*D_801853FC[])(void); - -void func_8016CB84(void *a0) { - D_801853FC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_8019AEC0[]; - - - Blk_8016CF04_8016CF04 *p = &D_8019AEC0[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80185418[])(void); - -void func_8016D19C(void *a0) { - D_80185418[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80185420[])(void); - -void func_8016D428(void *a0) { - D_80185420[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80185488[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80185488[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_8018542C; -extern u8 D_80185438; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018542C, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80185438); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8015AE2C", func_8016DC20); - - -extern void (*D_801854BC[])(void); - -void func_8016DEA4(void *a0) { - D_801854BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_801854C4[])(void); - -void func_8016DF20(void *a0) { - D_801854C4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80185518[])(void); - -void func_8016E5B8(void *a0) { - D_80185518[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_801854D8[4]; - extern s32 D_801854F8; - extern s32 D_80185500; - extern s32 D_80185508; - extern s32 D_80185510; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_801854D8[0], pp, &tmp); - RotTransSV(&D_801854D8[1], &prim.v[1], &tmp); - RotTransSV(&D_801854D8[2], &prim.v[2], &tmp); - RotTransSV(&D_801854D8[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_801854F8; - prim.f1 = D_80185500; - prim.f2 = D_80185508; - prim.f3 = D_80185510; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80185558[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80185558[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_8018554C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_8018554C[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_8018553C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_8018553C[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018554C[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_8018554C[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_8018554C[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80185568; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80185568; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_801855E0[])(void); - -void func_8016F6E0(void *a0) { - D_801855E0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_801855E8[])(void); - -void func_8016F798(void *a0) { - D_801855E8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_801855F0[])(void); - -void func_8016F834(void *a0) { - D_801855F0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_801855F8[])(void); - -void func_8016F8E4(void *a0) { - D_801855F8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80185600[])(void); - -void func_8016F9C4(void *a0) { - D_80185600[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80185608[])(void); - -void func_8016FA84(void *a0) { - D_80185608[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80185614[])(void); - -void func_8016FB7C(void *a0) { - D_80185614[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80185620[])(void); - -void func_8016FC90(void *a0) { - D_80185620[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_8018562C[])(void); - -void func_8016FDB4(void *a0) { - D_8018562C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_8018563C[])(void); - -void func_8016FF30(void *a0) { - D_8018563C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_8018564C[])(void); - -void func_8016FFDC(void *a0) { - D_8018564C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80185654[])(void); - -void func_80170150(void *a0) { - D_80185654[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_8018565C[])(void); - -void func_80170240(void *a0) { - D_8018565C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80185664[])(void); - -void func_801702FC(void *a0) { - D_80185664[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_8018566C[])(void); - -void func_801703E0(void *a0) { - D_8018566C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80185674[])(void); - -void func_801704B0(void *a0) { - D_80185674[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_8018567C[])(void); - -void func_80170548(void *a0) { - D_8018567C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80185684[])(void); - -void func_801705F8(void *a0) { - D_80185684[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_8018568C[])(void); - -void func_801706AC(void *a0) { - D_8018568C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80185694[])(void); - -void func_80170748(void *a0) { - D_80185694[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_8018569C[])(void); - -void func_80170810(void *a0) { - D_8018569C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_801856A4[])(void); - -void func_80170AD8(void *a0) { - D_801856A4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_801856AC[])(void); - -void func_80170BD8(void *a0) { - D_801856AC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_801856B4[])(void); - -void func_80170C74(void *a0) { - D_801856B4[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8015AE2C", func_80170CF0); - - -extern void (*D_801856BC[])(void); - -void func_80170D68(void *a0) { - D_801856BC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_801856C4[])(void); - -void func_80170E34(void *a0) { - D_801856C4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_801856CC[])(void); - -void func_80170EFC(void *a0) { - D_801856CC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_801856D4[])(void); - -void func_80170FB0(void *a0) { - D_801856D4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_801856DC[])(void); - -void func_80171064(void *a0) { - D_801856DC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_801856E4[])(void); - -void func_80171120(void *a0) { - D_801856E4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_801856EC[])(void); - -void func_801711C0(void *a0) { - D_801856EC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_801856F4[])(void); - -void func_80171260(void *a0) { - D_801856F4[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_801856FC[])(void); - -void func_801714E4(void *a0) { - D_801856FC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8015AE2C", func_80172C50); - - -extern void (*D_80185740[])(void); - -void func_80172CA0(void *a0) { - D_80185740[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80185704; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80185704); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC04_003/ov_SC04_003_jr_8016AB6C.c b/src/ov_SC04_003/ov_SC04_003_jr_8016AB6C.c new file mode 100644 index 000000000..d873bc21e --- /dev/null +++ b/src/ov_SC04_003/ov_SC04_003_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801846C4; +extern u8 D_80184634; +extern u8 D_80184610; +extern u8 D_801845EC; +extern u8 D_801846A0; +extern u8 D_8018467C; +extern u8 D_80184658; +extern u8 D_801845C8; +extern void func_80145934(void); +extern u8 D_80184754; +extern u8 D_80184730; +extern u8 D_8018470C; +extern u8 D_801846E8; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80183B4C[]; +extern unsigned char D_80183B7C[]; +extern unsigned char D_80183BCC[]; +extern unsigned char D_80183BFC[]; +extern unsigned char D_80183C2C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80183C7C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80183D44[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80183DCC[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80183DD4; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8019A838; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019A83C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80183E04; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80183EAC[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80183ED0[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80183EC0; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80183EE4[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80183EF0[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80183F00[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80183F18[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80183F08; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80183F2C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80183F48[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80183F38; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80183F5C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80183F70[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80183F84; +extern void (*D_80183FAC[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80183F8C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80183FF8[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80183FFC[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80184460[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80184470[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_8019A870; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80184498[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80184478; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80184488; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801844D8[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801844E0[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_801844AC; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801844EC[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_801844BC; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_8019A878; +extern s32 D_8019A884; +extern s32 D_8019A888; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80184528[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801844FC[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_8019A880; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80184778[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80184598[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018481C[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80184970[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018478C; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80184978[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018479C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801847BC; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80184980[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_801849A8[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_801849B4[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80184828[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80184A58; +extern void func_8015D380(s32 a0); +extern unsigned char D_80183B3C[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80184A6C[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80184AA8[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80184AF0; +extern u16 D_80184AF2; +extern u16 D_80184AF4; +extern s32 D_80184AF8; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80184B00; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_8018480C; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80184B84[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80184C34[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80184C64[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80184CC8; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_8019A890[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80184CEC[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_8019A8E8[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80184D34[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80184D24; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_8019A160[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80184D3C[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80184D90[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80184D58; +extern s16 D_80184D8C; +extern s16 D_80184D8A; +extern s16 D_80184D88; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80184D9C[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_8019A948; +extern u8 D_8019A949; +extern u8 D_8019A94A; +extern u8 D_8019A94B; +extern u8 D_8019A94C; +extern u8 D_8019A94D; +extern u8 D_8019A94E; +extern u8 D_8019A94F; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80184DAC[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_8019A988; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80184DF0[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80184E6C[]; +extern s32 D_80184E8C[]; +extern u8 D_80184F08[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80184F28[]; +extern u8 D_80184F48[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80184FE4[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80185060[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_8019A170; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_8018506C[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80185074[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_8018513C[])(void); +extern void func_80166618(void *a0); +extern void (*D_8018514C[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_8018515C[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80185168[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_801850C8[]; +extern u8 D_801850DC[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80185180[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80185188[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80185190[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80185198[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_801851A0[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_801851A8[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_801851B0[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80185264[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_8018526C[])(void); +extern void func_80169F00(void *a0); +extern char D_8018521C[]; +extern char D_801851DC[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_801852A4[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_801852B0[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_801852F8[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_801852B8[]; + extern u8 D_801852C8[]; + extern u8 D_8019AC58[]; + extern u8 D_8019AC80[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_801852B8, D_8019AC58) + 3; + func_8001CE28(obj, D_8019AC58); + } else { + var_s3 = func_80024054(D_801852C8, D_8019AC80) + 9; + func_8001CE28(obj, D_8019AC80); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80185374[])(void); + +void func_8016B4BC(void *a0) { + D_80185374[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_8019ACA8; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_8019ACA8); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80185368[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80185368; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_801853AC[]; +extern unsigned short D_801853B4[]; +extern unsigned short D_801853BC[]; +extern unsigned char D_8019ACB0[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_8019ACB0 + param_2 * 0x40); + puVar3 = D_801853AC[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_801853B4[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_801853BC[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_8019ACA8; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_8019ACA8, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_801853C4[])(void); + +void func_8016BBA4(void *a0) { + D_801853C4[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_8019ADE4; + extern u8 D_8019ADE5; + extern u8 D_8019ADE6; + extern M2C_UNK D_8019ADE8; + extern u8 D_8019ADE9; + extern u8 D_8019ADEA; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_8019ADE4) = 0x20; + D_8019ADE5 = 0x20; + D_8019ADE6 = 0; + (*(u8 *)&D_8019ADE8) = 0xc0; + D_8019ADE9 = 0xc0; + D_8019ADEA = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_8019ADE4; +extern M2C_UNK D_8019ADE8; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_8019ADE4, &D_8019ADE8, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_8019ADE5; + extern u8 D_8019ADE6; + extern u8 D_8019ADE9; + extern u8 D_8019ADEA; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_8019ADE4); + if (*p1 != 0) *p1 -= 4; + if (D_8019ADE5 != 0) D_8019ADE5 -= 4; + if (D_8019ADE6 != 0) D_8019ADE6 -= 4; + p2 = &(*(u8 *)&D_8019ADE8); + if (*p2 != 0) *p2 -= 4; + if (D_8019ADE9 != 0) D_8019ADE9 -= 4; + if (D_8019ADEA != 0) D_8019ADEA -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_8019ADE4), &(*(int *)&D_8019ADE8), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_8019AD70; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_8019AD70); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_801853D4; + extern s32 D_801853DC; + extern s32 D_801853E4; + extern s32 D_801853EC; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_801853D4, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_801853DC, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_801853E4, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_801853EC, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_801853F4[])(void); + +void func_8016C14C(void *a0) { + D_801853F4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_8019ADEC[]; +extern u8 D_8019ADF4[]; +extern u8 D_8019ADA4[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_8019ADEC, D_8019ADF4, D_8019ADA4); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_8019AE00[]; + extern u8 D_8019AEC0; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_8019AE00[1] = 0xff; + D_8019AE00[2] = 0x10; + D_8019AE00[0] = 0x10; + D_8019AE00[6] = 0; + D_8019AE00[5] = 0; + D_8019AE00[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_8019AE00, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_8019AEC0, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_8019AE00); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8016AB6C", func_8016C998); + + +extern void (*D_801853FC[])(void); + +void func_8016CB84(void *a0) { + D_801853FC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_8019AEC0[]; + + + Blk_8016CF04_8016CF04 *p = &D_8019AEC0[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80185418[])(void); + +void func_8016D19C(void *a0) { + D_80185418[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80185420[])(void); + +void func_8016D428(void *a0) { + D_80185420[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80185488[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80185488[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_8018542C; +extern u8 D_80185438; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018542C, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80185438); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8016AB6C", func_8016DC20); + + +extern void (*D_801854BC[])(void); + +void func_8016DEA4(void *a0) { + D_801854BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_801854C4[])(void); + +void func_8016DF20(void *a0) { + D_801854C4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80185518[])(void); + +void func_8016E5B8(void *a0) { + D_80185518[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_801854D8[4]; + extern s32 D_801854F8; + extern s32 D_80185500; + extern s32 D_80185508; + extern s32 D_80185510; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_801854D8[0], pp, &tmp); + RotTransSV(&D_801854D8[1], &prim.v[1], &tmp); + RotTransSV(&D_801854D8[2], &prim.v[2], &tmp); + RotTransSV(&D_801854D8[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_801854F8; + prim.f1 = D_80185500; + prim.f2 = D_80185508; + prim.f3 = D_80185510; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80185558[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80185558[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_8018554C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_8018554C[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_8018553C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_8018553C[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018554C[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_8018554C[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_8018554C[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80185568; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80185568; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_801855E0[])(void); + +void func_8016F6E0(void *a0) { + D_801855E0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_801855E8[])(void); + +void func_8016F798(void *a0) { + D_801855E8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_801855F0[])(void); + +void func_8016F834(void *a0) { + D_801855F0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_801855F8[])(void); + +void func_8016F8E4(void *a0) { + D_801855F8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80185600[])(void); + +void func_8016F9C4(void *a0) { + D_80185600[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80185608[])(void); + +void func_8016FA84(void *a0) { + D_80185608[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80185614[])(void); + +void func_8016FB7C(void *a0) { + D_80185614[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80185620[])(void); + +void func_8016FC90(void *a0) { + D_80185620[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_8018562C[])(void); + +void func_8016FDB4(void *a0) { + D_8018562C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_8018563C[])(void); + +void func_8016FF30(void *a0) { + D_8018563C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_8018564C[])(void); + +void func_8016FFDC(void *a0) { + D_8018564C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80185654[])(void); + +void func_80170150(void *a0) { + D_80185654[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_8018565C[])(void); + +void func_80170240(void *a0) { + D_8018565C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80185664[])(void); + +void func_801702FC(void *a0) { + D_80185664[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_8018566C[])(void); + +void func_801703E0(void *a0) { + D_8018566C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80185674[])(void); + +void func_801704B0(void *a0) { + D_80185674[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_8018567C[])(void); + +void func_80170548(void *a0) { + D_8018567C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80185684[])(void); + +void func_801705F8(void *a0) { + D_80185684[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_8018568C[])(void); + +void func_801706AC(void *a0) { + D_8018568C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80185694[])(void); + +void func_80170748(void *a0) { + D_80185694[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_8018569C[])(void); + +void func_80170810(void *a0) { + D_8018569C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_801856A4[])(void); + +void func_80170AD8(void *a0) { + D_801856A4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_801856AC[])(void); + +void func_80170BD8(void *a0) { + D_801856AC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_801856B4[])(void); + +void func_80170C74(void *a0) { + D_801856B4[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8016AB6C", func_80170CF0); + + +extern void (*D_801856BC[])(void); + +void func_80170D68(void *a0) { + D_801856BC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_801856C4[])(void); + +void func_80170E34(void *a0) { + D_801856C4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_801856CC[])(void); + +void func_80170EFC(void *a0) { + D_801856CC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_801856D4[])(void); + +void func_80170FB0(void *a0) { + D_801856D4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_801856DC[])(void); + +void func_80171064(void *a0) { + D_801856DC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_801856E4[])(void); + +void func_80171120(void *a0) { + D_801856E4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_801856EC[])(void); + +void func_801711C0(void *a0) { + D_801856EC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_801856F4[])(void); + +void func_80171260(void *a0) { + D_801856F4[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_801856FC[])(void); + +void func_801714E4(void *a0) { + D_801856FC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8016AB6C", func_80172C50); + + +extern void (*D_80185740[])(void); + +void func_80172CA0(void *a0) { + D_80185740[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80185704; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80185704); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC04_004/ov_SC04_004_jr_8015AE2C.c b/src/ov_SC04_004/ov_SC04_004_jr_8015AE2C.c index b863266e3..21617f806 100644 --- a/src/ov_SC04_004/ov_SC04_004_jr_8015AE2C.c +++ b/src/ov_SC04_004/ov_SC04_004_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_8018782C[])(void); void func_8016AB30(void *a0) { D_8018782C[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_801878A8[])(void); - -void func_8016B4BC(void *a0) { - D_801878A8[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801B2AA8; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801B2AA8); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_8018789C[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_8018789C; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_801878E0[]; -extern unsigned short D_801878E8[]; -extern unsigned short D_801878F0[]; -extern unsigned char D_801B2AB0[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801B2AB0 + param_2 * 0x40); - puVar3 = D_801878E0[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_801878E8[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_801878F0[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801B2AA8; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801B2AA8, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_801878F8[])(void); - -void func_8016BBA4(void *a0) { - D_801878F8[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801B2BE4; - extern u8 D_801B2BE5; - extern u8 D_801B2BE6; - extern M2C_UNK D_801B2BE8; - extern u8 D_801B2BE9; - extern u8 D_801B2BEA; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801B2BE4) = 0x20; - D_801B2BE5 = 0x20; - D_801B2BE6 = 0; - (*(u8 *)&D_801B2BE8) = 0xc0; - D_801B2BE9 = 0xc0; - D_801B2BEA = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801B2BE4; -extern M2C_UNK D_801B2BE8; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801B2BE4, &D_801B2BE8, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801B2BE5; - extern u8 D_801B2BE6; - extern u8 D_801B2BE9; - extern u8 D_801B2BEA; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801B2BE4); - if (*p1 != 0) *p1 -= 4; - if (D_801B2BE5 != 0) D_801B2BE5 -= 4; - if (D_801B2BE6 != 0) D_801B2BE6 -= 4; - p2 = &(*(u8 *)&D_801B2BE8); - if (*p2 != 0) *p2 -= 4; - if (D_801B2BE9 != 0) D_801B2BE9 -= 4; - if (D_801B2BEA != 0) D_801B2BEA -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801B2BE4), &(*(int *)&D_801B2BE8), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801B2B70; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801B2B70); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80187908; - extern s32 D_80187910; - extern s32 D_80187918; - extern s32 D_80187920; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80187908, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80187910, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80187918, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80187920, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80187928[])(void); - -void func_8016C14C(void *a0) { - D_80187928[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801B2BEC[]; -extern u8 D_801B2BF4[]; -extern u8 D_801B2BA4[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801B2BEC, D_801B2BF4, D_801B2BA4); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801B2C00[]; - extern u8 D_801B2CC0; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801B2C00[1] = 0xff; - D_801B2C00[2] = 0x10; - D_801B2C00[0] = 0x10; - D_801B2C00[6] = 0; - D_801B2C00[5] = 0; - D_801B2C00[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801B2C00, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801B2CC0, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801B2C00); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8015AE2C", func_8016C998); - - -extern void (*D_80187930[])(void); - -void func_8016CB84(void *a0) { - D_80187930[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801B2CC0[]; - - - Blk_8016CF04_8016CF04 *p = &D_801B2CC0[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_8018794C[])(void); - -void func_8016D19C(void *a0) { - D_8018794C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80187954[])(void); - -void func_8016D428(void *a0) { - D_80187954[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_801879BC[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_801879BC[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80187960; -extern u8 D_8018796C; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80187960, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018796C); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8015AE2C", func_8016DC20); - - -extern void (*D_801879F0[])(void); - -void func_8016DEA4(void *a0) { - D_801879F0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_801879F8[])(void); - -void func_8016DF20(void *a0) { - D_801879F8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80187A4C[])(void); - -void func_8016E5B8(void *a0) { - D_80187A4C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80187A0C[4]; - extern s32 D_80187A2C; - extern s32 D_80187A34; - extern s32 D_80187A3C; - extern s32 D_80187A44; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80187A0C[0], pp, &tmp); - RotTransSV(&D_80187A0C[1], &prim.v[1], &tmp); - RotTransSV(&D_80187A0C[2], &prim.v[2], &tmp); - RotTransSV(&D_80187A0C[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80187A2C; - prim.f1 = D_80187A34; - prim.f2 = D_80187A3C; - prim.f3 = D_80187A44; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80187A8C[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80187A8C[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80187A80[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80187A80[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80187A70[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80187A70[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80187A80[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80187A80[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80187A80[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80187A9C; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80187A9C; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80187B14[])(void); - -void func_8016F6E0(void *a0) { - D_80187B14[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80187B1C[])(void); - -void func_8016F798(void *a0) { - D_80187B1C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80187B24[])(void); - -void func_8016F834(void *a0) { - D_80187B24[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80187B2C[])(void); - -void func_8016F8E4(void *a0) { - D_80187B2C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80187B34[])(void); - -void func_8016F9C4(void *a0) { - D_80187B34[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80187B3C[])(void); - -void func_8016FA84(void *a0) { - D_80187B3C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80187B48[])(void); - -void func_8016FB7C(void *a0) { - D_80187B48[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80187B54[])(void); - -void func_8016FC90(void *a0) { - D_80187B54[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80187B60[])(void); - -void func_8016FDB4(void *a0) { - D_80187B60[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80187B70[])(void); - -void func_8016FF30(void *a0) { - D_80187B70[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80187B80[])(void); - -void func_8016FFDC(void *a0) { - D_80187B80[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80187B88[])(void); - -void func_80170150(void *a0) { - D_80187B88[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80187B90[])(void); - -void func_80170240(void *a0) { - D_80187B90[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80187B98[])(void); - -void func_801702FC(void *a0) { - D_80187B98[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80187BA0[])(void); - -void func_801703E0(void *a0) { - D_80187BA0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80187BA8[])(void); - -void func_801704B0(void *a0) { - D_80187BA8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80187BB0[])(void); - -void func_80170548(void *a0) { - D_80187BB0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80187BB8[])(void); - -void func_801705F8(void *a0) { - D_80187BB8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80187BC0[])(void); - -void func_801706AC(void *a0) { - D_80187BC0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80187BC8[])(void); - -void func_80170748(void *a0) { - D_80187BC8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80187BD0[])(void); - -void func_80170810(void *a0) { - D_80187BD0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80187BD8[])(void); - -void func_80170AD8(void *a0) { - D_80187BD8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80187BE0[])(void); - -void func_80170BD8(void *a0) { - D_80187BE0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80187BE8[])(void); - -void func_80170C74(void *a0) { - D_80187BE8[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80187BF0[])(void); - -void func_80170D68(void *a0) { - D_80187BF0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80187BF8[])(void); - -void func_80170E34(void *a0) { - D_80187BF8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80187C00[])(void); - -void func_80170EFC(void *a0) { - D_80187C00[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80187C08[])(void); - -void func_80170FB0(void *a0) { - D_80187C08[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80187C10[])(void); - -void func_80171064(void *a0) { - D_80187C10[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80187C18[])(void); - -void func_80171120(void *a0) { - D_80187C18[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80187C20[])(void); - -void func_801711C0(void *a0) { - D_80187C20[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80187C28[])(void); - -void func_80171260(void *a0) { - D_80187C28[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80187C30[])(void); - -void func_801714E4(void *a0) { - D_80187C30[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8015AE2C", func_80172C50); - - -extern void (*D_80187C74[])(void); - -void func_80172CA0(void *a0) { - D_80187C74[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80187C38; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80187C38); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC04_004/ov_SC04_004_jr_8016AB6C.c b/src/ov_SC04_004/ov_SC04_004_jr_8016AB6C.c new file mode 100644 index 000000000..1a89bb4df --- /dev/null +++ b/src/ov_SC04_004/ov_SC04_004_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80186BF8; +extern u8 D_80186B68; +extern u8 D_80186B44; +extern u8 D_80186B20; +extern u8 D_80186BD4; +extern u8 D_80186BB0; +extern u8 D_80186B8C; +extern u8 D_80186AFC; +extern void func_80145934(void); +extern u8 D_80186C88; +extern u8 D_80186C64; +extern u8 D_80186C40; +extern u8 D_80186C1C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80186080[]; +extern unsigned char D_801860B0[]; +extern unsigned char D_80186100[]; +extern unsigned char D_80186130[]; +extern unsigned char D_80186160[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801861B0[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80186278[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80186300[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80186308; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801B2638; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801B263C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80186338; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801863E0[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80186404[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801863F4; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80186418[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80186424[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80186434[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018644C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018643C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80186460[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018647C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018646C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80186490[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801864A4[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801864B8; +extern void (*D_801864E0[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801864C0; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018652C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80186530[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80186994[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_801869A4[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801B2670; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_801869CC[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801869AC; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_801869BC; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80186A0C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80186A14[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_801869E0; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80186A20[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_801869F0; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801B2678; +extern s32 D_801B2684; +extern s32 D_801B2688; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80186A5C[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80186A30[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801B2680; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80186CAC[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80186ACC[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80186D50[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80186EA4[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80186CC0; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80186EAC[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80186CD0; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80186CF0; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80186EB4[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80186EDC[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80186EE8[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80186D5C[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80186F8C; +extern void func_8015D380(s32 a0); +extern unsigned char D_80186070[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80186FA0[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80186FDC[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80187024; +extern u16 D_80187026; +extern u16 D_80187028; +extern s32 D_8018702C; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80187034; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80186D40; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_801870B8[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80187168[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80187198[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_801871FC; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801B2690[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80187220[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801B26E8[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80187268[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80187258; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801B1F5C[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80187270[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_801872C4[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_8018728C; +extern s16 D_801872C0; +extern s16 D_801872BE; +extern s16 D_801872BC; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_801872D0[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801B2748; +extern u8 D_801B2749; +extern u8 D_801B274A; +extern u8 D_801B274B; +extern u8 D_801B274C; +extern u8 D_801B274D; +extern u8 D_801B274E; +extern u8 D_801B274F; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_801872E0[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801B2788; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80187324[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_801873A0[]; +extern s32 D_801873C0[]; +extern u8 D_8018743C[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_8018745C[]; +extern u8 D_8018747C[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80187518[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80187594[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801B1F6C; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_801875A0[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_801875A8[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80187670[])(void); +extern void func_80166618(void *a0); +extern void (*D_80187680[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80187690[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_8018769C[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_801875FC[]; +extern u8 D_80187610[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_801876B4[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_801876BC[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_801876C4[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_801876CC[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_801876D4[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_801876DC[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_801876E4[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80187798[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_801877A0[])(void); +extern void func_80169F00(void *a0); +extern char D_80187750[]; +extern char D_80187710[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_801877D8[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_801877E4[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_8018782C[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_801877EC[]; + extern u8 D_801877FC[]; + extern u8 D_801B2A58[]; + extern u8 D_801B2A80[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_801877EC, D_801B2A58) + 3; + func_8001CE28(obj, D_801B2A58); + } else { + var_s3 = func_80024054(D_801877FC, D_801B2A80) + 9; + func_8001CE28(obj, D_801B2A80); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_801878A8[])(void); + +void func_8016B4BC(void *a0) { + D_801878A8[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801B2AA8; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801B2AA8); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_8018789C[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_8018789C; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_801878E0[]; +extern unsigned short D_801878E8[]; +extern unsigned short D_801878F0[]; +extern unsigned char D_801B2AB0[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801B2AB0 + param_2 * 0x40); + puVar3 = D_801878E0[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_801878E8[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_801878F0[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801B2AA8; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801B2AA8, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_801878F8[])(void); + +void func_8016BBA4(void *a0) { + D_801878F8[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801B2BE4; + extern u8 D_801B2BE5; + extern u8 D_801B2BE6; + extern M2C_UNK D_801B2BE8; + extern u8 D_801B2BE9; + extern u8 D_801B2BEA; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801B2BE4) = 0x20; + D_801B2BE5 = 0x20; + D_801B2BE6 = 0; + (*(u8 *)&D_801B2BE8) = 0xc0; + D_801B2BE9 = 0xc0; + D_801B2BEA = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801B2BE4; +extern M2C_UNK D_801B2BE8; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801B2BE4, &D_801B2BE8, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801B2BE5; + extern u8 D_801B2BE6; + extern u8 D_801B2BE9; + extern u8 D_801B2BEA; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801B2BE4); + if (*p1 != 0) *p1 -= 4; + if (D_801B2BE5 != 0) D_801B2BE5 -= 4; + if (D_801B2BE6 != 0) D_801B2BE6 -= 4; + p2 = &(*(u8 *)&D_801B2BE8); + if (*p2 != 0) *p2 -= 4; + if (D_801B2BE9 != 0) D_801B2BE9 -= 4; + if (D_801B2BEA != 0) D_801B2BEA -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801B2BE4), &(*(int *)&D_801B2BE8), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801B2B70; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801B2B70); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80187908; + extern s32 D_80187910; + extern s32 D_80187918; + extern s32 D_80187920; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80187908, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80187910, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80187918, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80187920, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80187928[])(void); + +void func_8016C14C(void *a0) { + D_80187928[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801B2BEC[]; +extern u8 D_801B2BF4[]; +extern u8 D_801B2BA4[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801B2BEC, D_801B2BF4, D_801B2BA4); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801B2C00[]; + extern u8 D_801B2CC0; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801B2C00[1] = 0xff; + D_801B2C00[2] = 0x10; + D_801B2C00[0] = 0x10; + D_801B2C00[6] = 0; + D_801B2C00[5] = 0; + D_801B2C00[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801B2C00, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801B2CC0, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801B2C00); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8016AB6C", func_8016C998); + + +extern void (*D_80187930[])(void); + +void func_8016CB84(void *a0) { + D_80187930[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801B2CC0[]; + + + Blk_8016CF04_8016CF04 *p = &D_801B2CC0[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_8018794C[])(void); + +void func_8016D19C(void *a0) { + D_8018794C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80187954[])(void); + +void func_8016D428(void *a0) { + D_80187954[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_801879BC[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_801879BC[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80187960; +extern u8 D_8018796C; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80187960, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018796C); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8016AB6C", func_8016DC20); + + +extern void (*D_801879F0[])(void); + +void func_8016DEA4(void *a0) { + D_801879F0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_801879F8[])(void); + +void func_8016DF20(void *a0) { + D_801879F8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80187A4C[])(void); + +void func_8016E5B8(void *a0) { + D_80187A4C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80187A0C[4]; + extern s32 D_80187A2C; + extern s32 D_80187A34; + extern s32 D_80187A3C; + extern s32 D_80187A44; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80187A0C[0], pp, &tmp); + RotTransSV(&D_80187A0C[1], &prim.v[1], &tmp); + RotTransSV(&D_80187A0C[2], &prim.v[2], &tmp); + RotTransSV(&D_80187A0C[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80187A2C; + prim.f1 = D_80187A34; + prim.f2 = D_80187A3C; + prim.f3 = D_80187A44; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80187A8C[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80187A8C[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80187A80[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80187A80[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80187A70[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80187A70[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80187A80[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80187A80[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80187A80[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80187A9C; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80187A9C; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80187B14[])(void); + +void func_8016F6E0(void *a0) { + D_80187B14[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80187B1C[])(void); + +void func_8016F798(void *a0) { + D_80187B1C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80187B24[])(void); + +void func_8016F834(void *a0) { + D_80187B24[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80187B2C[])(void); + +void func_8016F8E4(void *a0) { + D_80187B2C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80187B34[])(void); + +void func_8016F9C4(void *a0) { + D_80187B34[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80187B3C[])(void); + +void func_8016FA84(void *a0) { + D_80187B3C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80187B48[])(void); + +void func_8016FB7C(void *a0) { + D_80187B48[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80187B54[])(void); + +void func_8016FC90(void *a0) { + D_80187B54[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80187B60[])(void); + +void func_8016FDB4(void *a0) { + D_80187B60[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80187B70[])(void); + +void func_8016FF30(void *a0) { + D_80187B70[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80187B80[])(void); + +void func_8016FFDC(void *a0) { + D_80187B80[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80187B88[])(void); + +void func_80170150(void *a0) { + D_80187B88[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80187B90[])(void); + +void func_80170240(void *a0) { + D_80187B90[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80187B98[])(void); + +void func_801702FC(void *a0) { + D_80187B98[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80187BA0[])(void); + +void func_801703E0(void *a0) { + D_80187BA0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80187BA8[])(void); + +void func_801704B0(void *a0) { + D_80187BA8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80187BB0[])(void); + +void func_80170548(void *a0) { + D_80187BB0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80187BB8[])(void); + +void func_801705F8(void *a0) { + D_80187BB8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80187BC0[])(void); + +void func_801706AC(void *a0) { + D_80187BC0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80187BC8[])(void); + +void func_80170748(void *a0) { + D_80187BC8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80187BD0[])(void); + +void func_80170810(void *a0) { + D_80187BD0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80187BD8[])(void); + +void func_80170AD8(void *a0) { + D_80187BD8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80187BE0[])(void); + +void func_80170BD8(void *a0) { + D_80187BE0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80187BE8[])(void); + +void func_80170C74(void *a0) { + D_80187BE8[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80187BF0[])(void); + +void func_80170D68(void *a0) { + D_80187BF0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80187BF8[])(void); + +void func_80170E34(void *a0) { + D_80187BF8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80187C00[])(void); + +void func_80170EFC(void *a0) { + D_80187C00[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80187C08[])(void); + +void func_80170FB0(void *a0) { + D_80187C08[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80187C10[])(void); + +void func_80171064(void *a0) { + D_80187C10[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80187C18[])(void); + +void func_80171120(void *a0) { + D_80187C18[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80187C20[])(void); + +void func_801711C0(void *a0) { + D_80187C20[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80187C28[])(void); + +void func_80171260(void *a0) { + D_80187C28[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80187C30[])(void); + +void func_801714E4(void *a0) { + D_80187C30[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8016AB6C", func_80172C50); + + +extern void (*D_80187C74[])(void); + +void func_80172CA0(void *a0) { + D_80187C74[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80187C38; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80187C38); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC04_005/ov_SC04_005_jr_8015AE2C.c b/src/ov_SC04_005/ov_SC04_005_jr_8015AE2C.c index af7a62aed..77a5a80f6 100644 --- a/src/ov_SC04_005/ov_SC04_005_jr_8015AE2C.c +++ b/src/ov_SC04_005/ov_SC04_005_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_8018AC60[])(void); void func_8016AB30(void *a0) { D_8018AC60[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_8018ACDC[])(void); - -void func_8016B4BC(void *a0) { - D_8018ACDC[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801C0C80; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801C0C80); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_8018ACD0[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_8018ACD0; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_8018AD14[]; -extern unsigned short D_8018AD1C[]; -extern unsigned short D_8018AD24[]; -extern unsigned char D_801C0C88[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801C0C88 + param_2 * 0x40); - puVar3 = D_8018AD14[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_8018AD1C[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_8018AD24[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801C0C80; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801C0C80, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_8018AD2C[])(void); - -void func_8016BBA4(void *a0) { - D_8018AD2C[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801C0DBC; - extern u8 D_801C0DBD; - extern u8 D_801C0DBE; - extern M2C_UNK D_801C0DC0; - extern u8 D_801C0DC1; - extern u8 D_801C0DC2; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801C0DBC) = 0x20; - D_801C0DBD = 0x20; - D_801C0DBE = 0; - (*(u8 *)&D_801C0DC0) = 0xc0; - D_801C0DC1 = 0xc0; - D_801C0DC2 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801C0DBC; -extern M2C_UNK D_801C0DC0; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801C0DBC, &D_801C0DC0, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801C0DBD; - extern u8 D_801C0DBE; - extern u8 D_801C0DC1; - extern u8 D_801C0DC2; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801C0DBC); - if (*p1 != 0) *p1 -= 4; - if (D_801C0DBD != 0) D_801C0DBD -= 4; - if (D_801C0DBE != 0) D_801C0DBE -= 4; - p2 = &(*(u8 *)&D_801C0DC0); - if (*p2 != 0) *p2 -= 4; - if (D_801C0DC1 != 0) D_801C0DC1 -= 4; - if (D_801C0DC2 != 0) D_801C0DC2 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801C0DBC), &(*(int *)&D_801C0DC0), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801C0D48; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801C0D48); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_8018AD3C; - extern s32 D_8018AD44; - extern s32 D_8018AD4C; - extern s32 D_8018AD54; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_8018AD3C, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_8018AD44, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_8018AD4C, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_8018AD54, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_8018AD5C[])(void); - -void func_8016C14C(void *a0) { - D_8018AD5C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801C0DC4[]; -extern u8 D_801C0DCC[]; -extern u8 D_801C0D7C[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801C0DC4, D_801C0DCC, D_801C0D7C); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801C0DD8[]; - extern u8 D_801C0E98; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801C0DD8[1] = 0xff; - D_801C0DD8[2] = 0x10; - D_801C0DD8[0] = 0x10; - D_801C0DD8[6] = 0; - D_801C0DD8[5] = 0; - D_801C0DD8[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801C0DD8, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801C0E98, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801C0DD8); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8015AE2C", func_8016C998); - - -extern void (*D_8018AD64[])(void); - -void func_8016CB84(void *a0) { - D_8018AD64[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801C0E98[]; - - - Blk_8016CF04_8016CF04 *p = &D_801C0E98[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_8018AD80[])(void); - -void func_8016D19C(void *a0) { - D_8018AD80[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_8018AD88[])(void); - -void func_8016D428(void *a0) { - D_8018AD88[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_8018ADF0[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_8018ADF0[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_8018AD94; -extern u8 D_8018ADA0; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018AD94, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018ADA0); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8015AE2C", func_8016DC20); - - -extern void (*D_8018AE24[])(void); - -void func_8016DEA4(void *a0) { - D_8018AE24[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_8018AE2C[])(void); - -void func_8016DF20(void *a0) { - D_8018AE2C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_8018AE80[])(void); - -void func_8016E5B8(void *a0) { - D_8018AE80[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_8018AE40[4]; - extern s32 D_8018AE60; - extern s32 D_8018AE68; - extern s32 D_8018AE70; - extern s32 D_8018AE78; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_8018AE40[0], pp, &tmp); - RotTransSV(&D_8018AE40[1], &prim.v[1], &tmp); - RotTransSV(&D_8018AE40[2], &prim.v[2], &tmp); - RotTransSV(&D_8018AE40[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_8018AE60; - prim.f1 = D_8018AE68; - prim.f2 = D_8018AE70; - prim.f3 = D_8018AE78; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_8018AEC0[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_8018AEC0[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_8018AEB4[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_8018AEB4[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_8018AEA4[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_8018AEA4[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018AEB4[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_8018AEB4[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_8018AEB4[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_8018AED0; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_8018AED0; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_8018AF48[])(void); - -void func_8016F6E0(void *a0) { - D_8018AF48[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_8018AF50[])(void); - -void func_8016F798(void *a0) { - D_8018AF50[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_8018AF58[])(void); - -void func_8016F834(void *a0) { - D_8018AF58[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_8018AF60[])(void); - -void func_8016F8E4(void *a0) { - D_8018AF60[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_8018AF68[])(void); - -void func_8016F9C4(void *a0) { - D_8018AF68[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_8018AF70[])(void); - -void func_8016FA84(void *a0) { - D_8018AF70[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_8018AF7C[])(void); - -void func_8016FB7C(void *a0) { - D_8018AF7C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_8018AF88[])(void); - -void func_8016FC90(void *a0) { - D_8018AF88[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_8018AF94[])(void); - -void func_8016FDB4(void *a0) { - D_8018AF94[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_8018AFA4[])(void); - -void func_8016FF30(void *a0) { - D_8018AFA4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_8018AFB4[])(void); - -void func_8016FFDC(void *a0) { - D_8018AFB4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_8018AFBC[])(void); - -void func_80170150(void *a0) { - D_8018AFBC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_8018AFC4[])(void); - -void func_80170240(void *a0) { - D_8018AFC4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_8018AFCC[])(void); - -void func_801702FC(void *a0) { - D_8018AFCC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_8018AFD4[])(void); - -void func_801703E0(void *a0) { - D_8018AFD4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_8018AFDC[])(void); - -void func_801704B0(void *a0) { - D_8018AFDC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_8018AFE4[])(void); - -void func_80170548(void *a0) { - D_8018AFE4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_8018AFEC[])(void); - -void func_801705F8(void *a0) { - D_8018AFEC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_8018AFF4[])(void); - -void func_801706AC(void *a0) { - D_8018AFF4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_8018AFFC[])(void); - -void func_80170748(void *a0) { - D_8018AFFC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_8018B004[])(void); - -void func_80170810(void *a0) { - D_8018B004[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_8018B00C[])(void); - -void func_80170AD8(void *a0) { - D_8018B00C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_8018B014[])(void); - -void func_80170BD8(void *a0) { - D_8018B014[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_8018B01C[])(void); - -void func_80170C74(void *a0) { - D_8018B01C[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8015AE2C", func_80170CF0); - - -extern void (*D_8018B024[])(void); - -void func_80170D68(void *a0) { - D_8018B024[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_8018B02C[])(void); - -void func_80170E34(void *a0) { - D_8018B02C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_8018B034[])(void); - -void func_80170EFC(void *a0) { - D_8018B034[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_8018B03C[])(void); - -void func_80170FB0(void *a0) { - D_8018B03C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_8018B044[])(void); - -void func_80171064(void *a0) { - D_8018B044[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_8018B04C[])(void); - -void func_80171120(void *a0) { - D_8018B04C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_8018B054[])(void); - -void func_801711C0(void *a0) { - D_8018B054[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_8018B05C[])(void); - -void func_80171260(void *a0) { - D_8018B05C[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_8018B064[])(void); - -void func_801714E4(void *a0) { - D_8018B064[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8015AE2C", func_80172C50); - - -extern void (*D_8018B0A8[])(void); - -void func_80172CA0(void *a0) { - D_8018B0A8[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_8018B06C; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_8018B06C); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC04_005/ov_SC04_005_jr_8016AB6C.c b/src/ov_SC04_005/ov_SC04_005_jr_8016AB6C.c new file mode 100644 index 000000000..2708fd62c --- /dev/null +++ b/src/ov_SC04_005/ov_SC04_005_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018A02C; +extern u8 D_80189F9C; +extern u8 D_80189F78; +extern u8 D_80189F54; +extern u8 D_8018A008; +extern u8 D_80189FE4; +extern u8 D_80189FC0; +extern u8 D_80189F30; +extern void func_80145934(void); +extern u8 D_8018A0BC; +extern u8 D_8018A098; +extern u8 D_8018A074; +extern u8 D_8018A050; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801894B4[]; +extern unsigned char D_801894E4[]; +extern unsigned char D_80189534[]; +extern unsigned char D_80189564[]; +extern unsigned char D_80189594[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801895E4[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801896AC[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80189734[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018973C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801C0810; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801C0814; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018976C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80189814[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80189838[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80189828; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018984C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80189858[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80189868[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80189880[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80189870; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80189894[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801898B0[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801898A0; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801898C4[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801898D8[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801898EC; +extern void (*D_80189914[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801898F4; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80189960[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80189964[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80189DC8[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80189DD8[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801C0848; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80189E00[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80189DE0; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80189DF0; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80189E40[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80189E48[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80189E14; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80189E54[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80189E24; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801C0850; +extern s32 D_801C085C; +extern s32 D_801C0860; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80189E90[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80189E64[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801C0858; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018A0E0[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80189F00[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018A184[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018A2D8[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018A0F4; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018A2E0[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018A104; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018A124; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_8018A2E8[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_8018A310[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_8018A31C[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_8018A190[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_8018A3C0; +extern void func_8015D380(s32 a0); +extern unsigned char D_801894A4[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_8018A3D4[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_8018A410[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_8018A458; +extern u16 D_8018A45A; +extern u16 D_8018A45C; +extern s32 D_8018A460; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_8018A468; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_8018A174; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_8018A4EC[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_8018A59C[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_8018A5CC[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_8018A630; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801C0868[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_8018A654[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801C08C0[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_8018A69C[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_8018A68C; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801C0120[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_8018A6A4[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_8018A6F8[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_8018A6C0; +extern s16 D_8018A6F4; +extern s16 D_8018A6F2; +extern s16 D_8018A6F0; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_8018A704[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801C0920; +extern u8 D_801C0921; +extern u8 D_801C0922; +extern u8 D_801C0923; +extern u8 D_801C0924; +extern u8 D_801C0925; +extern u8 D_801C0926; +extern u8 D_801C0927; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_8018A714[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801C0960; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_8018A758[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_8018A7D4[]; +extern s32 D_8018A7F4[]; +extern u8 D_8018A870[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_8018A890[]; +extern u8 D_8018A8B0[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_8018A94C[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_8018A9C8[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801C0130; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_8018A9D4[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_8018A9DC[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_8018AAA4[])(void); +extern void func_80166618(void *a0); +extern void (*D_8018AAB4[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_8018AAC4[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_8018AAD0[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_8018AA30[]; +extern u8 D_8018AA44[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_8018AAE8[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_8018AAF0[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_8018AAF8[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_8018AB00[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_8018AB08[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_8018AB10[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_8018AB18[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_8018ABCC[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_8018ABD4[])(void); +extern void func_80169F00(void *a0); +extern char D_8018AB84[]; +extern char D_8018AB44[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_8018AC0C[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_8018AC18[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_8018AC60[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_8018AC20[]; + extern u8 D_8018AC30[]; + extern u8 D_801C0C30[]; + extern u8 D_801C0C58[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_8018AC20, D_801C0C30) + 3; + func_8001CE28(obj, D_801C0C30); + } else { + var_s3 = func_80024054(D_8018AC30, D_801C0C58) + 9; + func_8001CE28(obj, D_801C0C58); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_8018ACDC[])(void); + +void func_8016B4BC(void *a0) { + D_8018ACDC[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801C0C80; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801C0C80); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_8018ACD0[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_8018ACD0; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_8018AD14[]; +extern unsigned short D_8018AD1C[]; +extern unsigned short D_8018AD24[]; +extern unsigned char D_801C0C88[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801C0C88 + param_2 * 0x40); + puVar3 = D_8018AD14[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_8018AD1C[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_8018AD24[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801C0C80; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801C0C80, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_8018AD2C[])(void); + +void func_8016BBA4(void *a0) { + D_8018AD2C[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801C0DBC; + extern u8 D_801C0DBD; + extern u8 D_801C0DBE; + extern M2C_UNK D_801C0DC0; + extern u8 D_801C0DC1; + extern u8 D_801C0DC2; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801C0DBC) = 0x20; + D_801C0DBD = 0x20; + D_801C0DBE = 0; + (*(u8 *)&D_801C0DC0) = 0xc0; + D_801C0DC1 = 0xc0; + D_801C0DC2 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801C0DBC; +extern M2C_UNK D_801C0DC0; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801C0DBC, &D_801C0DC0, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801C0DBD; + extern u8 D_801C0DBE; + extern u8 D_801C0DC1; + extern u8 D_801C0DC2; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801C0DBC); + if (*p1 != 0) *p1 -= 4; + if (D_801C0DBD != 0) D_801C0DBD -= 4; + if (D_801C0DBE != 0) D_801C0DBE -= 4; + p2 = &(*(u8 *)&D_801C0DC0); + if (*p2 != 0) *p2 -= 4; + if (D_801C0DC1 != 0) D_801C0DC1 -= 4; + if (D_801C0DC2 != 0) D_801C0DC2 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801C0DBC), &(*(int *)&D_801C0DC0), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801C0D48; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801C0D48); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_8018AD3C; + extern s32 D_8018AD44; + extern s32 D_8018AD4C; + extern s32 D_8018AD54; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_8018AD3C, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_8018AD44, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_8018AD4C, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_8018AD54, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_8018AD5C[])(void); + +void func_8016C14C(void *a0) { + D_8018AD5C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801C0DC4[]; +extern u8 D_801C0DCC[]; +extern u8 D_801C0D7C[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801C0DC4, D_801C0DCC, D_801C0D7C); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801C0DD8[]; + extern u8 D_801C0E98; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801C0DD8[1] = 0xff; + D_801C0DD8[2] = 0x10; + D_801C0DD8[0] = 0x10; + D_801C0DD8[6] = 0; + D_801C0DD8[5] = 0; + D_801C0DD8[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801C0DD8, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801C0E98, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801C0DD8); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8016AB6C", func_8016C998); + + +extern void (*D_8018AD64[])(void); + +void func_8016CB84(void *a0) { + D_8018AD64[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801C0E98[]; + + + Blk_8016CF04_8016CF04 *p = &D_801C0E98[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_8018AD80[])(void); + +void func_8016D19C(void *a0) { + D_8018AD80[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_8018AD88[])(void); + +void func_8016D428(void *a0) { + D_8018AD88[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018ADF0[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_8018ADF0[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_8018AD94; +extern u8 D_8018ADA0; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018AD94, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018ADA0); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8016AB6C", func_8016DC20); + + +extern void (*D_8018AE24[])(void); + +void func_8016DEA4(void *a0) { + D_8018AE24[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_8018AE2C[])(void); + +void func_8016DF20(void *a0) { + D_8018AE2C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_8018AE80[])(void); + +void func_8016E5B8(void *a0) { + D_8018AE80[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_8018AE40[4]; + extern s32 D_8018AE60; + extern s32 D_8018AE68; + extern s32 D_8018AE70; + extern s32 D_8018AE78; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_8018AE40[0], pp, &tmp); + RotTransSV(&D_8018AE40[1], &prim.v[1], &tmp); + RotTransSV(&D_8018AE40[2], &prim.v[2], &tmp); + RotTransSV(&D_8018AE40[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_8018AE60; + prim.f1 = D_8018AE68; + prim.f2 = D_8018AE70; + prim.f3 = D_8018AE78; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_8018AEC0[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_8018AEC0[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_8018AEB4[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_8018AEB4[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_8018AEA4[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_8018AEA4[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018AEB4[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_8018AEB4[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_8018AEB4[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_8018AED0; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_8018AED0; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_8018AF48[])(void); + +void func_8016F6E0(void *a0) { + D_8018AF48[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_8018AF50[])(void); + +void func_8016F798(void *a0) { + D_8018AF50[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_8018AF58[])(void); + +void func_8016F834(void *a0) { + D_8018AF58[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_8018AF60[])(void); + +void func_8016F8E4(void *a0) { + D_8018AF60[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_8018AF68[])(void); + +void func_8016F9C4(void *a0) { + D_8018AF68[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_8018AF70[])(void); + +void func_8016FA84(void *a0) { + D_8018AF70[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_8018AF7C[])(void); + +void func_8016FB7C(void *a0) { + D_8018AF7C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_8018AF88[])(void); + +void func_8016FC90(void *a0) { + D_8018AF88[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_8018AF94[])(void); + +void func_8016FDB4(void *a0) { + D_8018AF94[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_8018AFA4[])(void); + +void func_8016FF30(void *a0) { + D_8018AFA4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_8018AFB4[])(void); + +void func_8016FFDC(void *a0) { + D_8018AFB4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_8018AFBC[])(void); + +void func_80170150(void *a0) { + D_8018AFBC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_8018AFC4[])(void); + +void func_80170240(void *a0) { + D_8018AFC4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_8018AFCC[])(void); + +void func_801702FC(void *a0) { + D_8018AFCC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_8018AFD4[])(void); + +void func_801703E0(void *a0) { + D_8018AFD4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_8018AFDC[])(void); + +void func_801704B0(void *a0) { + D_8018AFDC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_8018AFE4[])(void); + +void func_80170548(void *a0) { + D_8018AFE4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_8018AFEC[])(void); + +void func_801705F8(void *a0) { + D_8018AFEC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_8018AFF4[])(void); + +void func_801706AC(void *a0) { + D_8018AFF4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_8018AFFC[])(void); + +void func_80170748(void *a0) { + D_8018AFFC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_8018B004[])(void); + +void func_80170810(void *a0) { + D_8018B004[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_8018B00C[])(void); + +void func_80170AD8(void *a0) { + D_8018B00C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_8018B014[])(void); + +void func_80170BD8(void *a0) { + D_8018B014[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_8018B01C[])(void); + +void func_80170C74(void *a0) { + D_8018B01C[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8016AB6C", func_80170CF0); + + +extern void (*D_8018B024[])(void); + +void func_80170D68(void *a0) { + D_8018B024[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_8018B02C[])(void); + +void func_80170E34(void *a0) { + D_8018B02C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_8018B034[])(void); + +void func_80170EFC(void *a0) { + D_8018B034[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_8018B03C[])(void); + +void func_80170FB0(void *a0) { + D_8018B03C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_8018B044[])(void); + +void func_80171064(void *a0) { + D_8018B044[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_8018B04C[])(void); + +void func_80171120(void *a0) { + D_8018B04C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_8018B054[])(void); + +void func_801711C0(void *a0) { + D_8018B054[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_8018B05C[])(void); + +void func_80171260(void *a0) { + D_8018B05C[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_8018B064[])(void); + +void func_801714E4(void *a0) { + D_8018B064[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8016AB6C", func_80172C50); + + +extern void (*D_8018B0A8[])(void); + +void func_80172CA0(void *a0) { + D_8018B0A8[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_8018B06C; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_8018B06C); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC04_006/ov_SC04_006_jr_8015AE2C.c b/src/ov_SC04_006/ov_SC04_006_jr_8015AE2C.c index c6a0a5062..a1b701691 100644 --- a/src/ov_SC04_006/ov_SC04_006_jr_8015AE2C.c +++ b/src/ov_SC04_006/ov_SC04_006_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_80182D40[])(void); void func_8016AB30(void *a0) { D_80182D40[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80182DBC[])(void); - -void func_8016B4BC(void *a0) { - D_80182DBC[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_8019CF28; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_8019CF28); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80182DB0[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80182DB0; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80182DF4[]; -extern unsigned short D_80182DFC[]; -extern unsigned short D_80182E04[]; -extern unsigned char D_8019CF30[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_8019CF30 + param_2 * 0x40); - puVar3 = D_80182DF4[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80182DFC[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80182E04[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_8019CF28; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_8019CF28, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80182E0C[])(void); - -void func_8016BBA4(void *a0) { - D_80182E0C[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_8019D064; - extern u8 D_8019D065; - extern u8 D_8019D066; - extern M2C_UNK D_8019D068; - extern u8 D_8019D069; - extern u8 D_8019D06A; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_8019D064) = 0x20; - D_8019D065 = 0x20; - D_8019D066 = 0; - (*(u8 *)&D_8019D068) = 0xc0; - D_8019D069 = 0xc0; - D_8019D06A = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_8019D064; -extern M2C_UNK D_8019D068; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_8019D064, &D_8019D068, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_8019D065; - extern u8 D_8019D066; - extern u8 D_8019D069; - extern u8 D_8019D06A; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_8019D064); - if (*p1 != 0) *p1 -= 4; - if (D_8019D065 != 0) D_8019D065 -= 4; - if (D_8019D066 != 0) D_8019D066 -= 4; - p2 = &(*(u8 *)&D_8019D068); - if (*p2 != 0) *p2 -= 4; - if (D_8019D069 != 0) D_8019D069 -= 4; - if (D_8019D06A != 0) D_8019D06A -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_8019D064), &(*(int *)&D_8019D068), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_8019CFF0; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_8019CFF0); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80182E1C; - extern s32 D_80182E24; - extern s32 D_80182E2C; - extern s32 D_80182E34; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80182E1C, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80182E24, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80182E2C, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80182E34, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80182E3C[])(void); - -void func_8016C14C(void *a0) { - D_80182E3C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_8019D06C[]; -extern u8 D_8019D074[]; -extern u8 D_8019D024[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_8019D06C, D_8019D074, D_8019D024); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_8019D080[]; - extern u8 D_8019D140; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_8019D080[1] = 0xff; - D_8019D080[2] = 0x10; - D_8019D080[0] = 0x10; - D_8019D080[6] = 0; - D_8019D080[5] = 0; - D_8019D080[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_8019D080, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_8019D140, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_8019D080); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8015AE2C", func_8016C998); - - -extern void (*D_80182E44[])(void); - -void func_8016CB84(void *a0) { - D_80182E44[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_8019D140[]; - - - Blk_8016CF04_8016CF04 *p = &D_8019D140[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80182E60[])(void); - -void func_8016D19C(void *a0) { - D_80182E60[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80182E68[])(void); - -void func_8016D428(void *a0) { - D_80182E68[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80182ED0[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80182ED0[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80182E74; -extern u8 D_80182E80; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80182E74, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80182E80); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80182F04[])(void); - -void func_8016DEA4(void *a0) { - D_80182F04[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80182F0C[])(void); - -void func_8016DF20(void *a0) { - D_80182F0C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80182F60[])(void); - -void func_8016E5B8(void *a0) { - D_80182F60[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80182F20[4]; - extern s32 D_80182F40; - extern s32 D_80182F48; - extern s32 D_80182F50; - extern s32 D_80182F58; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80182F20[0], pp, &tmp); - RotTransSV(&D_80182F20[1], &prim.v[1], &tmp); - RotTransSV(&D_80182F20[2], &prim.v[2], &tmp); - RotTransSV(&D_80182F20[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80182F40; - prim.f1 = D_80182F48; - prim.f2 = D_80182F50; - prim.f3 = D_80182F58; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80182FA0[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80182FA0[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80182F94[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80182F94[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80182F84[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80182F84[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80182F94[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80182F94[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80182F94[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80182FB0; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80182FB0; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80183028[])(void); - -void func_8016F6E0(void *a0) { - D_80183028[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80183030[])(void); - -void func_8016F798(void *a0) { - D_80183030[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80183038[])(void); - -void func_8016F834(void *a0) { - D_80183038[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80183040[])(void); - -void func_8016F8E4(void *a0) { - D_80183040[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80183048[])(void); - -void func_8016F9C4(void *a0) { - D_80183048[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80183050[])(void); - -void func_8016FA84(void *a0) { - D_80183050[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_8018305C[])(void); - -void func_8016FB7C(void *a0) { - D_8018305C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80183068[])(void); - -void func_8016FC90(void *a0) { - D_80183068[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80183074[])(void); - -void func_8016FDB4(void *a0) { - D_80183074[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80183084[])(void); - -void func_8016FF30(void *a0) { - D_80183084[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80183094[])(void); - -void func_8016FFDC(void *a0) { - D_80183094[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_8018309C[])(void); - -void func_80170150(void *a0) { - D_8018309C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_801830A4[])(void); - -void func_80170240(void *a0) { - D_801830A4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_801830AC[])(void); - -void func_801702FC(void *a0) { - D_801830AC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_801830B4[])(void); - -void func_801703E0(void *a0) { - D_801830B4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_801830BC[])(void); - -void func_801704B0(void *a0) { - D_801830BC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_801830C4[])(void); - -void func_80170548(void *a0) { - D_801830C4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_801830CC[])(void); - -void func_801705F8(void *a0) { - D_801830CC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_801830D4[])(void); - -void func_801706AC(void *a0) { - D_801830D4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_801830DC[])(void); - -void func_80170748(void *a0) { - D_801830DC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_801830E4[])(void); - -void func_80170810(void *a0) { - D_801830E4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_801830EC[])(void); - -void func_80170AD8(void *a0) { - D_801830EC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_801830F4[])(void); - -void func_80170BD8(void *a0) { - D_801830F4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_801830FC[])(void); - -void func_80170C74(void *a0) { - D_801830FC[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80183104[])(void); - -void func_80170D68(void *a0) { - D_80183104[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_8018310C[])(void); - -void func_80170E34(void *a0) { - D_8018310C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80183114[])(void); - -void func_80170EFC(void *a0) { - D_80183114[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_8018311C[])(void); - -void func_80170FB0(void *a0) { - D_8018311C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80183124[])(void); - -void func_80171064(void *a0) { - D_80183124[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_8018312C[])(void); - -void func_80171120(void *a0) { - D_8018312C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80183134[])(void); - -void func_801711C0(void *a0) { - D_80183134[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_8018313C[])(void); - -void func_80171260(void *a0) { - D_8018313C[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80183144[])(void); - -void func_801714E4(void *a0) { - D_80183144[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8015AE2C", func_80172C50); - - -extern void (*D_80183188[])(void); - -void func_80172CA0(void *a0) { - D_80183188[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_8018314C; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_8018314C); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC04_006/ov_SC04_006_jr_8016AB6C.c b/src/ov_SC04_006/ov_SC04_006_jr_8016AB6C.c new file mode 100644 index 000000000..c1798dbf3 --- /dev/null +++ b/src/ov_SC04_006/ov_SC04_006_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018210C; +extern u8 D_8018207C; +extern u8 D_80182058; +extern u8 D_80182034; +extern u8 D_801820E8; +extern u8 D_801820C4; +extern u8 D_801820A0; +extern u8 D_80182010; +extern void func_80145934(void); +extern u8 D_8018219C; +extern u8 D_80182178; +extern u8 D_80182154; +extern u8 D_80182130; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80181594[]; +extern unsigned char D_801815C4[]; +extern unsigned char D_80181614[]; +extern unsigned char D_80181644[]; +extern unsigned char D_80181674[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801816C4[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018178C[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80181814[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018181C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8019CAB8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019CABC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018184C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801818F4[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80181918[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80181908; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018192C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80181938[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80181948[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80181960[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80181950; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80181974[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80181990[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80181980; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801819A4[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801819B8[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801819CC; +extern void (*D_801819F4[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801819D4; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80181A40[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80181A44[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80181EA8[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80181EB8[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_8019CAF0; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80181EE0[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80181EC0; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80181ED0; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80181F20[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80181F28[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80181EF4; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80181F34[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80181F04; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_8019CAF8; +extern s32 D_8019CB04; +extern s32 D_8019CB08; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80181F70[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80181F44[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_8019CB00; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_801821C0[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80181FE0[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80182264[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_801823B8[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_801821D4; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_801823C0[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_801821E4; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80182204; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_801823C8[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_801823F0[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_801823FC[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80182270[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_801824A0; +extern void func_8015D380(s32 a0); +extern unsigned char D_80181584[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_801824B4[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_801824F0[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80182538; +extern u16 D_8018253A; +extern u16 D_8018253C; +extern s32 D_80182540; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80182548; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80182254; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_801825CC[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_8018267C[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_801826AC[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80182710; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_8019CB10[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80182734[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_8019CB68[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_8018277C[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_8018276C; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_8019C3C8[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80182784[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_801827D8[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_801827A0; +extern s16 D_801827D4; +extern s16 D_801827D2; +extern s16 D_801827D0; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_801827E4[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_8019CBC8; +extern u8 D_8019CBC9; +extern u8 D_8019CBCA; +extern u8 D_8019CBCB; +extern u8 D_8019CBCC; +extern u8 D_8019CBCD; +extern u8 D_8019CBCE; +extern u8 D_8019CBCF; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_801827F4[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_8019CC08; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80182838[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_801828B4[]; +extern s32 D_801828D4[]; +extern u8 D_80182950[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80182970[]; +extern u8 D_80182990[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80182A2C[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80182AA8[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_8019C3D8; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80182AB4[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80182ABC[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80182B84[])(void); +extern void func_80166618(void *a0); +extern void (*D_80182B94[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80182BA4[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80182BB0[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80182B10[]; +extern u8 D_80182B24[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80182BC8[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80182BD0[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80182BD8[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80182BE0[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80182BE8[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80182BF0[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80182BF8[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80182CAC[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80182CB4[])(void); +extern void func_80169F00(void *a0); +extern char D_80182C64[]; +extern char D_80182C24[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80182CEC[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80182CF8[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80182D40[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80182D00[]; + extern u8 D_80182D10[]; + extern u8 D_8019CED8[]; + extern u8 D_8019CF00[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80182D00, D_8019CED8) + 3; + func_8001CE28(obj, D_8019CED8); + } else { + var_s3 = func_80024054(D_80182D10, D_8019CF00) + 9; + func_8001CE28(obj, D_8019CF00); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80182DBC[])(void); + +void func_8016B4BC(void *a0) { + D_80182DBC[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_8019CF28; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_8019CF28); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80182DB0[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80182DB0; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80182DF4[]; +extern unsigned short D_80182DFC[]; +extern unsigned short D_80182E04[]; +extern unsigned char D_8019CF30[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_8019CF30 + param_2 * 0x40); + puVar3 = D_80182DF4[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80182DFC[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80182E04[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_8019CF28; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_8019CF28, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80182E0C[])(void); + +void func_8016BBA4(void *a0) { + D_80182E0C[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_8019D064; + extern u8 D_8019D065; + extern u8 D_8019D066; + extern M2C_UNK D_8019D068; + extern u8 D_8019D069; + extern u8 D_8019D06A; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_8019D064) = 0x20; + D_8019D065 = 0x20; + D_8019D066 = 0; + (*(u8 *)&D_8019D068) = 0xc0; + D_8019D069 = 0xc0; + D_8019D06A = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_8019D064; +extern M2C_UNK D_8019D068; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_8019D064, &D_8019D068, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_8019D065; + extern u8 D_8019D066; + extern u8 D_8019D069; + extern u8 D_8019D06A; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_8019D064); + if (*p1 != 0) *p1 -= 4; + if (D_8019D065 != 0) D_8019D065 -= 4; + if (D_8019D066 != 0) D_8019D066 -= 4; + p2 = &(*(u8 *)&D_8019D068); + if (*p2 != 0) *p2 -= 4; + if (D_8019D069 != 0) D_8019D069 -= 4; + if (D_8019D06A != 0) D_8019D06A -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_8019D064), &(*(int *)&D_8019D068), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_8019CFF0; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_8019CFF0); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80182E1C; + extern s32 D_80182E24; + extern s32 D_80182E2C; + extern s32 D_80182E34; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80182E1C, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80182E24, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80182E2C, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80182E34, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80182E3C[])(void); + +void func_8016C14C(void *a0) { + D_80182E3C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_8019D06C[]; +extern u8 D_8019D074[]; +extern u8 D_8019D024[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_8019D06C, D_8019D074, D_8019D024); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_8019D080[]; + extern u8 D_8019D140; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_8019D080[1] = 0xff; + D_8019D080[2] = 0x10; + D_8019D080[0] = 0x10; + D_8019D080[6] = 0; + D_8019D080[5] = 0; + D_8019D080[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_8019D080, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_8019D140, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_8019D080); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8016AB6C", func_8016C998); + + +extern void (*D_80182E44[])(void); + +void func_8016CB84(void *a0) { + D_80182E44[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_8019D140[]; + + + Blk_8016CF04_8016CF04 *p = &D_8019D140[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80182E60[])(void); + +void func_8016D19C(void *a0) { + D_80182E60[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80182E68[])(void); + +void func_8016D428(void *a0) { + D_80182E68[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80182ED0[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80182ED0[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80182E74; +extern u8 D_80182E80; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80182E74, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80182E80); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80182F04[])(void); + +void func_8016DEA4(void *a0) { + D_80182F04[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80182F0C[])(void); + +void func_8016DF20(void *a0) { + D_80182F0C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80182F60[])(void); + +void func_8016E5B8(void *a0) { + D_80182F60[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80182F20[4]; + extern s32 D_80182F40; + extern s32 D_80182F48; + extern s32 D_80182F50; + extern s32 D_80182F58; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80182F20[0], pp, &tmp); + RotTransSV(&D_80182F20[1], &prim.v[1], &tmp); + RotTransSV(&D_80182F20[2], &prim.v[2], &tmp); + RotTransSV(&D_80182F20[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80182F40; + prim.f1 = D_80182F48; + prim.f2 = D_80182F50; + prim.f3 = D_80182F58; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80182FA0[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80182FA0[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80182F94[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80182F94[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80182F84[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80182F84[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80182F94[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80182F94[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80182F94[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80182FB0; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80182FB0; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80183028[])(void); + +void func_8016F6E0(void *a0) { + D_80183028[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80183030[])(void); + +void func_8016F798(void *a0) { + D_80183030[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80183038[])(void); + +void func_8016F834(void *a0) { + D_80183038[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80183040[])(void); + +void func_8016F8E4(void *a0) { + D_80183040[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80183048[])(void); + +void func_8016F9C4(void *a0) { + D_80183048[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80183050[])(void); + +void func_8016FA84(void *a0) { + D_80183050[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_8018305C[])(void); + +void func_8016FB7C(void *a0) { + D_8018305C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80183068[])(void); + +void func_8016FC90(void *a0) { + D_80183068[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80183074[])(void); + +void func_8016FDB4(void *a0) { + D_80183074[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80183084[])(void); + +void func_8016FF30(void *a0) { + D_80183084[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80183094[])(void); + +void func_8016FFDC(void *a0) { + D_80183094[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_8018309C[])(void); + +void func_80170150(void *a0) { + D_8018309C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_801830A4[])(void); + +void func_80170240(void *a0) { + D_801830A4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_801830AC[])(void); + +void func_801702FC(void *a0) { + D_801830AC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_801830B4[])(void); + +void func_801703E0(void *a0) { + D_801830B4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_801830BC[])(void); + +void func_801704B0(void *a0) { + D_801830BC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_801830C4[])(void); + +void func_80170548(void *a0) { + D_801830C4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_801830CC[])(void); + +void func_801705F8(void *a0) { + D_801830CC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_801830D4[])(void); + +void func_801706AC(void *a0) { + D_801830D4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_801830DC[])(void); + +void func_80170748(void *a0) { + D_801830DC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_801830E4[])(void); + +void func_80170810(void *a0) { + D_801830E4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_801830EC[])(void); + +void func_80170AD8(void *a0) { + D_801830EC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_801830F4[])(void); + +void func_80170BD8(void *a0) { + D_801830F4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_801830FC[])(void); + +void func_80170C74(void *a0) { + D_801830FC[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80183104[])(void); + +void func_80170D68(void *a0) { + D_80183104[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_8018310C[])(void); + +void func_80170E34(void *a0) { + D_8018310C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80183114[])(void); + +void func_80170EFC(void *a0) { + D_80183114[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_8018311C[])(void); + +void func_80170FB0(void *a0) { + D_8018311C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80183124[])(void); + +void func_80171064(void *a0) { + D_80183124[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_8018312C[])(void); + +void func_80171120(void *a0) { + D_8018312C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80183134[])(void); + +void func_801711C0(void *a0) { + D_80183134[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_8018313C[])(void); + +void func_80171260(void *a0) { + D_8018313C[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80183144[])(void); + +void func_801714E4(void *a0) { + D_80183144[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8016AB6C", func_80172C50); + + +extern void (*D_80183188[])(void); + +void func_80172CA0(void *a0) { + D_80183188[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_8018314C; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_8018314C); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC04_007/ov_SC04_007_jr_8015AE2C.c b/src/ov_SC04_007/ov_SC04_007_jr_8015AE2C.c index c6acac78e..8d4072e91 100644 --- a/src/ov_SC04_007/ov_SC04_007_jr_8015AE2C.c +++ b/src/ov_SC04_007/ov_SC04_007_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_80188CF8[])(void); void func_8016AB30(void *a0) { D_80188CF8[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80188D74[])(void); - -void func_8016B4BC(void *a0) { - D_80188D74[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801B44E0; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801B44E0); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80188D68[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80188D68; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80188DAC[]; -extern unsigned short D_80188DB4[]; -extern unsigned short D_80188DBC[]; -extern unsigned char D_801B44E8[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801B44E8 + param_2 * 0x40); - puVar3 = D_80188DAC[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80188DB4[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80188DBC[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801B44E0; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801B44E0, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80188DC4[])(void); - -void func_8016BBA4(void *a0) { - D_80188DC4[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801B461C; - extern u8 D_801B461D; - extern u8 D_801B461E; - extern M2C_UNK D_801B4620; - extern u8 D_801B4621; - extern u8 D_801B4622; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801B461C) = 0x20; - D_801B461D = 0x20; - D_801B461E = 0; - (*(u8 *)&D_801B4620) = 0xc0; - D_801B4621 = 0xc0; - D_801B4622 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801B461C; -extern M2C_UNK D_801B4620; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801B461C, &D_801B4620, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801B461D; - extern u8 D_801B461E; - extern u8 D_801B4621; - extern u8 D_801B4622; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801B461C); - if (*p1 != 0) *p1 -= 4; - if (D_801B461D != 0) D_801B461D -= 4; - if (D_801B461E != 0) D_801B461E -= 4; - p2 = &(*(u8 *)&D_801B4620); - if (*p2 != 0) *p2 -= 4; - if (D_801B4621 != 0) D_801B4621 -= 4; - if (D_801B4622 != 0) D_801B4622 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801B461C), &(*(int *)&D_801B4620), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801B45A8; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801B45A8); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80188DD4; - extern s32 D_80188DDC; - extern s32 D_80188DE4; - extern s32 D_80188DEC; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80188DD4, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80188DDC, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80188DE4, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80188DEC, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80188DF4[])(void); - -void func_8016C14C(void *a0) { - D_80188DF4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801B4624[]; -extern u8 D_801B462C[]; -extern u8 D_801B45DC[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801B4624, D_801B462C, D_801B45DC); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801B4638[]; - extern u8 D_801B46F8; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801B4638[1] = 0xff; - D_801B4638[2] = 0x10; - D_801B4638[0] = 0x10; - D_801B4638[6] = 0; - D_801B4638[5] = 0; - D_801B4638[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801B4638, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801B46F8, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801B4638); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8015AE2C", func_8016C998); - - -extern void (*D_80188DFC[])(void); - -void func_8016CB84(void *a0) { - D_80188DFC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801B46F8[]; - - - Blk_8016CF04_8016CF04 *p = &D_801B46F8[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80188E18[])(void); - -void func_8016D19C(void *a0) { - D_80188E18[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80188E20[])(void); - -void func_8016D428(void *a0) { - D_80188E20[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80188E88[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80188E88[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80188E2C; -extern u8 D_80188E38; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80188E2C, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80188E38); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80188EBC[])(void); - -void func_8016DEA4(void *a0) { - D_80188EBC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80188EC4[])(void); - -void func_8016DF20(void *a0) { - D_80188EC4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80188F18[])(void); - -void func_8016E5B8(void *a0) { - D_80188F18[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80188ED8[4]; - extern s32 D_80188EF8; - extern s32 D_80188F00; - extern s32 D_80188F08; - extern s32 D_80188F10; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80188ED8[0], pp, &tmp); - RotTransSV(&D_80188ED8[1], &prim.v[1], &tmp); - RotTransSV(&D_80188ED8[2], &prim.v[2], &tmp); - RotTransSV(&D_80188ED8[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80188EF8; - prim.f1 = D_80188F00; - prim.f2 = D_80188F08; - prim.f3 = D_80188F10; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80188F58[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80188F58[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80188F4C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80188F4C[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80188F3C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80188F3C[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80188F4C[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80188F4C[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80188F4C[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80188F68; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80188F68; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80188FE0[])(void); - -void func_8016F6E0(void *a0) { - D_80188FE0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80188FE8[])(void); - -void func_8016F798(void *a0) { - D_80188FE8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80188FF0[])(void); - -void func_8016F834(void *a0) { - D_80188FF0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80188FF8[])(void); - -void func_8016F8E4(void *a0) { - D_80188FF8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80189000[])(void); - -void func_8016F9C4(void *a0) { - D_80189000[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80189008[])(void); - -void func_8016FA84(void *a0) { - D_80189008[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80189014[])(void); - -void func_8016FB7C(void *a0) { - D_80189014[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80189020[])(void); - -void func_8016FC90(void *a0) { - D_80189020[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_8018902C[])(void); - -void func_8016FDB4(void *a0) { - D_8018902C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_8018903C[])(void); - -void func_8016FF30(void *a0) { - D_8018903C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_8018904C[])(void); - -void func_8016FFDC(void *a0) { - D_8018904C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80189054[])(void); - -void func_80170150(void *a0) { - D_80189054[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_8018905C[])(void); - -void func_80170240(void *a0) { - D_8018905C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80189064[])(void); - -void func_801702FC(void *a0) { - D_80189064[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_8018906C[])(void); - -void func_801703E0(void *a0) { - D_8018906C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80189074[])(void); - -void func_801704B0(void *a0) { - D_80189074[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_8018907C[])(void); - -void func_80170548(void *a0) { - D_8018907C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80189084[])(void); - -void func_801705F8(void *a0) { - D_80189084[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_8018908C[])(void); - -void func_801706AC(void *a0) { - D_8018908C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80189094[])(void); - -void func_80170748(void *a0) { - D_80189094[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_8018909C[])(void); - -void func_80170810(void *a0) { - D_8018909C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_801890A4[])(void); - -void func_80170AD8(void *a0) { - D_801890A4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_801890AC[])(void); - -void func_80170BD8(void *a0) { - D_801890AC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_801890B4[])(void); - -void func_80170C74(void *a0) { - D_801890B4[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8015AE2C", func_80170CF0); - - -extern void (*D_801890BC[])(void); - -void func_80170D68(void *a0) { - D_801890BC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_801890C4[])(void); - -void func_80170E34(void *a0) { - D_801890C4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_801890CC[])(void); - -void func_80170EFC(void *a0) { - D_801890CC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_801890D4[])(void); - -void func_80170FB0(void *a0) { - D_801890D4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_801890DC[])(void); - -void func_80171064(void *a0) { - D_801890DC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_801890E4[])(void); - -void func_80171120(void *a0) { - D_801890E4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_801890EC[])(void); - -void func_801711C0(void *a0) { - D_801890EC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_801890F4[])(void); - -void func_80171260(void *a0) { - D_801890F4[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_801890FC[])(void); - -void func_801714E4(void *a0) { - D_801890FC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8015AE2C", func_80172C50); - - -extern void (*D_80189140[])(void); - -void func_80172CA0(void *a0) { - D_80189140[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80189104; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80189104); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC04_007/ov_SC04_007_jr_8016AB6C.c b/src/ov_SC04_007/ov_SC04_007_jr_8016AB6C.c new file mode 100644 index 000000000..f03b060c6 --- /dev/null +++ b/src/ov_SC04_007/ov_SC04_007_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801880C4; +extern u8 D_80188034; +extern u8 D_80188010; +extern u8 D_80187FEC; +extern u8 D_801880A0; +extern u8 D_8018807C; +extern u8 D_80188058; +extern u8 D_80187FC8; +extern void func_80145934(void); +extern u8 D_80188154; +extern u8 D_80188130; +extern u8 D_8018810C; +extern u8 D_801880E8; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018754C[]; +extern unsigned char D_8018757C[]; +extern unsigned char D_801875CC[]; +extern unsigned char D_801875FC[]; +extern unsigned char D_8018762C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018767C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80187744[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801877CC[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801877D4; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801B4070; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801B4074; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80187804; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801878AC[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801878D0[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801878C0; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801878E4[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801878F0[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80187900[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80187918[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80187908; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018792C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80187948[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80187938; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018795C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80187970[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80187984; +extern void (*D_801879AC[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018798C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801879F8[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801879FC[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80187E60[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80187E70[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801B40A8; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80187E98[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80187E78; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80187E88; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80187ED8[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80187EE0[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80187EAC; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80187EEC[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80187EBC; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801B40B0; +extern s32 D_801B40BC; +extern s32 D_801B40C0; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80187F28[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80187EFC[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801B40B8; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80188178[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80187F98[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018821C[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80188370[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018818C; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80188378[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018819C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801881BC; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80188380[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_801883A8[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_801883B4[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80188228[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80188458; +extern void func_8015D380(s32 a0); +extern unsigned char D_8018753C[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_8018846C[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_801884A8[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_801884F0; +extern u16 D_801884F2; +extern u16 D_801884F4; +extern s32 D_801884F8; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80188500; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_8018820C; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80188584[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80188634[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80188664[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_801886C8; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801B40C8[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_801886EC[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801B4120[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80188734[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80188724; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801B3984[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_8018873C[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80188790[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80188758; +extern s16 D_8018878C; +extern s16 D_8018878A; +extern s16 D_80188788; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_8018879C[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801B4180; +extern u8 D_801B4181; +extern u8 D_801B4182; +extern u8 D_801B4183; +extern u8 D_801B4184; +extern u8 D_801B4185; +extern u8 D_801B4186; +extern u8 D_801B4187; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_801887AC[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801B41C0; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_801887F0[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_8018886C[]; +extern s32 D_8018888C[]; +extern u8 D_80188908[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80188928[]; +extern u8 D_80188948[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_801889E4[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80188A60[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801B3994; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80188A6C[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80188A74[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80188B3C[])(void); +extern void func_80166618(void *a0); +extern void (*D_80188B4C[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80188B5C[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80188B68[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80188AC8[]; +extern u8 D_80188ADC[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80188B80[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80188B88[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80188B90[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80188B98[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80188BA0[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80188BA8[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80188BB0[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80188C64[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80188C6C[])(void); +extern void func_80169F00(void *a0); +extern char D_80188C1C[]; +extern char D_80188BDC[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80188CA4[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80188CB0[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80188CF8[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80188CB8[]; + extern u8 D_80188CC8[]; + extern u8 D_801B4490[]; + extern u8 D_801B44B8[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80188CB8, D_801B4490) + 3; + func_8001CE28(obj, D_801B4490); + } else { + var_s3 = func_80024054(D_80188CC8, D_801B44B8) + 9; + func_8001CE28(obj, D_801B44B8); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80188D74[])(void); + +void func_8016B4BC(void *a0) { + D_80188D74[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801B44E0; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801B44E0); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80188D68[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80188D68; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80188DAC[]; +extern unsigned short D_80188DB4[]; +extern unsigned short D_80188DBC[]; +extern unsigned char D_801B44E8[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801B44E8 + param_2 * 0x40); + puVar3 = D_80188DAC[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80188DB4[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80188DBC[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801B44E0; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801B44E0, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80188DC4[])(void); + +void func_8016BBA4(void *a0) { + D_80188DC4[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801B461C; + extern u8 D_801B461D; + extern u8 D_801B461E; + extern M2C_UNK D_801B4620; + extern u8 D_801B4621; + extern u8 D_801B4622; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801B461C) = 0x20; + D_801B461D = 0x20; + D_801B461E = 0; + (*(u8 *)&D_801B4620) = 0xc0; + D_801B4621 = 0xc0; + D_801B4622 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801B461C; +extern M2C_UNK D_801B4620; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801B461C, &D_801B4620, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801B461D; + extern u8 D_801B461E; + extern u8 D_801B4621; + extern u8 D_801B4622; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801B461C); + if (*p1 != 0) *p1 -= 4; + if (D_801B461D != 0) D_801B461D -= 4; + if (D_801B461E != 0) D_801B461E -= 4; + p2 = &(*(u8 *)&D_801B4620); + if (*p2 != 0) *p2 -= 4; + if (D_801B4621 != 0) D_801B4621 -= 4; + if (D_801B4622 != 0) D_801B4622 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801B461C), &(*(int *)&D_801B4620), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801B45A8; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801B45A8); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80188DD4; + extern s32 D_80188DDC; + extern s32 D_80188DE4; + extern s32 D_80188DEC; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80188DD4, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80188DDC, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80188DE4, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80188DEC, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80188DF4[])(void); + +void func_8016C14C(void *a0) { + D_80188DF4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801B4624[]; +extern u8 D_801B462C[]; +extern u8 D_801B45DC[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801B4624, D_801B462C, D_801B45DC); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801B4638[]; + extern u8 D_801B46F8; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801B4638[1] = 0xff; + D_801B4638[2] = 0x10; + D_801B4638[0] = 0x10; + D_801B4638[6] = 0; + D_801B4638[5] = 0; + D_801B4638[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801B4638, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801B46F8, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801B4638); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8016AB6C", func_8016C998); + + +extern void (*D_80188DFC[])(void); + +void func_8016CB84(void *a0) { + D_80188DFC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801B46F8[]; + + + Blk_8016CF04_8016CF04 *p = &D_801B46F8[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80188E18[])(void); + +void func_8016D19C(void *a0) { + D_80188E18[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80188E20[])(void); + +void func_8016D428(void *a0) { + D_80188E20[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80188E88[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80188E88[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80188E2C; +extern u8 D_80188E38; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80188E2C, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80188E38); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80188EBC[])(void); + +void func_8016DEA4(void *a0) { + D_80188EBC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80188EC4[])(void); + +void func_8016DF20(void *a0) { + D_80188EC4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80188F18[])(void); + +void func_8016E5B8(void *a0) { + D_80188F18[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80188ED8[4]; + extern s32 D_80188EF8; + extern s32 D_80188F00; + extern s32 D_80188F08; + extern s32 D_80188F10; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80188ED8[0], pp, &tmp); + RotTransSV(&D_80188ED8[1], &prim.v[1], &tmp); + RotTransSV(&D_80188ED8[2], &prim.v[2], &tmp); + RotTransSV(&D_80188ED8[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80188EF8; + prim.f1 = D_80188F00; + prim.f2 = D_80188F08; + prim.f3 = D_80188F10; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80188F58[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80188F58[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80188F4C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80188F4C[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80188F3C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80188F3C[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80188F4C[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80188F4C[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80188F4C[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80188F68; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80188F68; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80188FE0[])(void); + +void func_8016F6E0(void *a0) { + D_80188FE0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80188FE8[])(void); + +void func_8016F798(void *a0) { + D_80188FE8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80188FF0[])(void); + +void func_8016F834(void *a0) { + D_80188FF0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80188FF8[])(void); + +void func_8016F8E4(void *a0) { + D_80188FF8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80189000[])(void); + +void func_8016F9C4(void *a0) { + D_80189000[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80189008[])(void); + +void func_8016FA84(void *a0) { + D_80189008[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80189014[])(void); + +void func_8016FB7C(void *a0) { + D_80189014[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80189020[])(void); + +void func_8016FC90(void *a0) { + D_80189020[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_8018902C[])(void); + +void func_8016FDB4(void *a0) { + D_8018902C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_8018903C[])(void); + +void func_8016FF30(void *a0) { + D_8018903C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_8018904C[])(void); + +void func_8016FFDC(void *a0) { + D_8018904C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80189054[])(void); + +void func_80170150(void *a0) { + D_80189054[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_8018905C[])(void); + +void func_80170240(void *a0) { + D_8018905C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80189064[])(void); + +void func_801702FC(void *a0) { + D_80189064[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_8018906C[])(void); + +void func_801703E0(void *a0) { + D_8018906C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80189074[])(void); + +void func_801704B0(void *a0) { + D_80189074[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_8018907C[])(void); + +void func_80170548(void *a0) { + D_8018907C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80189084[])(void); + +void func_801705F8(void *a0) { + D_80189084[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_8018908C[])(void); + +void func_801706AC(void *a0) { + D_8018908C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80189094[])(void); + +void func_80170748(void *a0) { + D_80189094[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_8018909C[])(void); + +void func_80170810(void *a0) { + D_8018909C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_801890A4[])(void); + +void func_80170AD8(void *a0) { + D_801890A4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_801890AC[])(void); + +void func_80170BD8(void *a0) { + D_801890AC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_801890B4[])(void); + +void func_80170C74(void *a0) { + D_801890B4[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8016AB6C", func_80170CF0); + + +extern void (*D_801890BC[])(void); + +void func_80170D68(void *a0) { + D_801890BC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_801890C4[])(void); + +void func_80170E34(void *a0) { + D_801890C4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_801890CC[])(void); + +void func_80170EFC(void *a0) { + D_801890CC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_801890D4[])(void); + +void func_80170FB0(void *a0) { + D_801890D4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_801890DC[])(void); + +void func_80171064(void *a0) { + D_801890DC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_801890E4[])(void); + +void func_80171120(void *a0) { + D_801890E4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_801890EC[])(void); + +void func_801711C0(void *a0) { + D_801890EC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_801890F4[])(void); + +void func_80171260(void *a0) { + D_801890F4[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_801890FC[])(void); + +void func_801714E4(void *a0) { + D_801890FC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8016AB6C", func_80172C50); + + +extern void (*D_80189140[])(void); + +void func_80172CA0(void *a0) { + D_80189140[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80189104; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80189104); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC04_008/ov_SC04_008_jr_8015AE2C.c b/src/ov_SC04_008/ov_SC04_008_jr_8015AE2C.c index b7bf53728..ebd998ba9 100644 --- a/src/ov_SC04_008/ov_SC04_008_jr_8015AE2C.c +++ b/src/ov_SC04_008/ov_SC04_008_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_80181C30[])(void); void func_8016AB30(void *a0) { D_80181C30[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80181CAC[])(void); - -void func_8016B4BC(void *a0) { - D_80181CAC[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801911B8; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801911B8); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80181CA0[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80181CA0; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80181CE4[]; -extern unsigned short D_80181CEC[]; -extern unsigned short D_80181CF4[]; -extern unsigned char D_801911C0[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801911C0 + param_2 * 0x40); - puVar3 = D_80181CE4[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80181CEC[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80181CF4[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801911B8; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801911B8, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80181CFC[])(void); - -void func_8016BBA4(void *a0) { - D_80181CFC[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801912F4; - extern u8 D_801912F5; - extern u8 D_801912F6; - extern M2C_UNK D_801912F8; - extern u8 D_801912F9; - extern u8 D_801912FA; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801912F4) = 0x20; - D_801912F5 = 0x20; - D_801912F6 = 0; - (*(u8 *)&D_801912F8) = 0xc0; - D_801912F9 = 0xc0; - D_801912FA = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801912F4; -extern M2C_UNK D_801912F8; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801912F4, &D_801912F8, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801912F5; - extern u8 D_801912F6; - extern u8 D_801912F9; - extern u8 D_801912FA; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801912F4); - if (*p1 != 0) *p1 -= 4; - if (D_801912F5 != 0) D_801912F5 -= 4; - if (D_801912F6 != 0) D_801912F6 -= 4; - p2 = &(*(u8 *)&D_801912F8); - if (*p2 != 0) *p2 -= 4; - if (D_801912F9 != 0) D_801912F9 -= 4; - if (D_801912FA != 0) D_801912FA -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801912F4), &(*(int *)&D_801912F8), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_80191280; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_80191280); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80181D0C; - extern s32 D_80181D14; - extern s32 D_80181D1C; - extern s32 D_80181D24; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80181D0C, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80181D14, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80181D1C, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80181D24, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80181D2C[])(void); - -void func_8016C14C(void *a0) { - D_80181D2C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801912FC[]; -extern u8 D_80191304[]; -extern u8 D_801912B4[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801912FC, D_80191304, D_801912B4); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_80191310[]; - extern u8 D_801913D0; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_80191310[1] = 0xff; - D_80191310[2] = 0x10; - D_80191310[0] = 0x10; - D_80191310[6] = 0; - D_80191310[5] = 0; - D_80191310[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_80191310, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801913D0, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_80191310); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8015AE2C", func_8016C998); - - -extern void (*D_80181D34[])(void); - -void func_8016CB84(void *a0) { - D_80181D34[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801913D0[]; - - - Blk_8016CF04_8016CF04 *p = &D_801913D0[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80181D50[])(void); - -void func_8016D19C(void *a0) { - D_80181D50[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80181D58[])(void); - -void func_8016D428(void *a0) { - D_80181D58[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80181DC0[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80181DC0[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80181D64; -extern u8 D_80181D70; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80181D64, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80181D70); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80181DF4[])(void); - -void func_8016DEA4(void *a0) { - D_80181DF4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80181DFC[])(void); - -void func_8016DF20(void *a0) { - D_80181DFC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80181E50[])(void); - -void func_8016E5B8(void *a0) { - D_80181E50[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80181E10[4]; - extern s32 D_80181E30; - extern s32 D_80181E38; - extern s32 D_80181E40; - extern s32 D_80181E48; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80181E10[0], pp, &tmp); - RotTransSV(&D_80181E10[1], &prim.v[1], &tmp); - RotTransSV(&D_80181E10[2], &prim.v[2], &tmp); - RotTransSV(&D_80181E10[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80181E30; - prim.f1 = D_80181E38; - prim.f2 = D_80181E40; - prim.f3 = D_80181E48; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80181E90[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80181E90[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80181E84[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80181E84[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80181E74[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80181E74[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80181E84[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80181E84[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80181E84[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80181EA0; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80181EA0; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80181F18[])(void); - -void func_8016F6E0(void *a0) { - D_80181F18[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80181F20[])(void); - -void func_8016F798(void *a0) { - D_80181F20[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80181F28[])(void); - -void func_8016F834(void *a0) { - D_80181F28[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80181F30[])(void); - -void func_8016F8E4(void *a0) { - D_80181F30[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80181F38[])(void); - -void func_8016F9C4(void *a0) { - D_80181F38[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80181F40[])(void); - -void func_8016FA84(void *a0) { - D_80181F40[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80181F4C[])(void); - -void func_8016FB7C(void *a0) { - D_80181F4C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80181F58[])(void); - -void func_8016FC90(void *a0) { - D_80181F58[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80181F64[])(void); - -void func_8016FDB4(void *a0) { - D_80181F64[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80181F74[])(void); - -void func_8016FF30(void *a0) { - D_80181F74[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80181F84[])(void); - -void func_8016FFDC(void *a0) { - D_80181F84[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80181F8C[])(void); - -void func_80170150(void *a0) { - D_80181F8C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80181F94[])(void); - -void func_80170240(void *a0) { - D_80181F94[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80181F9C[])(void); - -void func_801702FC(void *a0) { - D_80181F9C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80181FA4[])(void); - -void func_801703E0(void *a0) { - D_80181FA4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80181FAC[])(void); - -void func_801704B0(void *a0) { - D_80181FAC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80181FB4[])(void); - -void func_80170548(void *a0) { - D_80181FB4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80181FBC[])(void); - -void func_801705F8(void *a0) { - D_80181FBC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80181FC4[])(void); - -void func_801706AC(void *a0) { - D_80181FC4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80181FCC[])(void); - -void func_80170748(void *a0) { - D_80181FCC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80181FD4[])(void); - -void func_80170810(void *a0) { - D_80181FD4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80181FDC[])(void); - -void func_80170AD8(void *a0) { - D_80181FDC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80181FE4[])(void); - -void func_80170BD8(void *a0) { - D_80181FE4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80181FEC[])(void); - -void func_80170C74(void *a0) { - D_80181FEC[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80181FF4[])(void); - -void func_80170D68(void *a0) { - D_80181FF4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80181FFC[])(void); - -void func_80170E34(void *a0) { - D_80181FFC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80182004[])(void); - -void func_80170EFC(void *a0) { - D_80182004[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_8018200C[])(void); - -void func_80170FB0(void *a0) { - D_8018200C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80182014[])(void); - -void func_80171064(void *a0) { - D_80182014[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_8018201C[])(void); - -void func_80171120(void *a0) { - D_8018201C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80182024[])(void); - -void func_801711C0(void *a0) { - D_80182024[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_8018202C[])(void); - -void func_80171260(void *a0) { - D_8018202C[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80182034[])(void); - -void func_801714E4(void *a0) { - D_80182034[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8015AE2C", func_80172C50); - - -extern void (*D_80182078[])(void); - -void func_80172CA0(void *a0) { - D_80182078[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_8018203C; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_8018203C); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC04_008/ov_SC04_008_jr_8016AB6C.c b/src/ov_SC04_008/ov_SC04_008_jr_8016AB6C.c new file mode 100644 index 000000000..ce6344da3 --- /dev/null +++ b/src/ov_SC04_008/ov_SC04_008_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80180FFC; +extern u8 D_80180F6C; +extern u8 D_80180F48; +extern u8 D_80180F24; +extern u8 D_80180FD8; +extern u8 D_80180FB4; +extern u8 D_80180F90; +extern u8 D_80180F00; +extern void func_80145934(void); +extern u8 D_8018108C; +extern u8 D_80181068; +extern u8 D_80181044; +extern u8 D_80181020; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80180484[]; +extern unsigned char D_801804B4[]; +extern unsigned char D_80180504[]; +extern unsigned char D_80180534[]; +extern unsigned char D_80180564[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801805B4[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018067C[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80180704[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018070C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_80190D48; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_80190D4C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018073C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801807E4[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80180808[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801807F8; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018081C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80180828[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80180838[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80180850[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80180840; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80180864[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80180880[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80180870; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80180894[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801808A8[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801808BC; +extern void (*D_801808E4[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801808C4; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80180930[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80180934[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80180D98[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80180DA8[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_80190D80; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80180DD0[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80180DB0; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80180DC0; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80180E10[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80180E18[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80180DE4; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80180E24[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80180DF4; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_80190D88; +extern s32 D_80190D94; +extern s32 D_80190D98; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80180E60[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80180E34[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_80190D90; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_801810B0[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80180ED0[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80181154[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_801812A8[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_801810C4; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_801812B0[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_801810D4; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801810F4; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_801812B8[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_801812E0[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_801812EC[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80181160[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80181390; +extern void func_8015D380(s32 a0); +extern unsigned char D_80180474[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_801813A4[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_801813E0[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80181428; +extern u16 D_8018142A; +extern u16 D_8018142C; +extern s32 D_80181430; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80181438; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80181144; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_801814BC[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_8018156C[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_8018159C[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80181600; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_80190DA0[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80181624[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_80190DF8[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_8018166C[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_8018165C; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_8019066C[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80181674[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_801816C8[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80181690; +extern s16 D_801816C4; +extern s16 D_801816C2; +extern s16 D_801816C0; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_801816D4[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_80190E58; +extern u8 D_80190E59; +extern u8 D_80190E5A; +extern u8 D_80190E5B; +extern u8 D_80190E5C; +extern u8 D_80190E5D; +extern u8 D_80190E5E; +extern u8 D_80190E5F; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_801816E4[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_80190E98; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80181728[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_801817A4[]; +extern s32 D_801817C4[]; +extern u8 D_80181840[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80181860[]; +extern u8 D_80181880[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_8018191C[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80181998[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_8019067C; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_801819A4[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_801819AC[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80181A74[])(void); +extern void func_80166618(void *a0); +extern void (*D_80181A84[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80181A94[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80181AA0[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80181A00[]; +extern u8 D_80181A14[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80181AB8[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80181AC0[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80181AC8[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80181AD0[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80181AD8[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80181AE0[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80181AE8[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80181B9C[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80181BA4[])(void); +extern void func_80169F00(void *a0); +extern char D_80181B54[]; +extern char D_80181B14[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80181BDC[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80181BE8[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80181C30[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80181BF0[]; + extern u8 D_80181C00[]; + extern u8 D_80191168[]; + extern u8 D_80191190[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80181BF0, D_80191168) + 3; + func_8001CE28(obj, D_80191168); + } else { + var_s3 = func_80024054(D_80181C00, D_80191190) + 9; + func_8001CE28(obj, D_80191190); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80181CAC[])(void); + +void func_8016B4BC(void *a0) { + D_80181CAC[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801911B8; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801911B8); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80181CA0[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80181CA0; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80181CE4[]; +extern unsigned short D_80181CEC[]; +extern unsigned short D_80181CF4[]; +extern unsigned char D_801911C0[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801911C0 + param_2 * 0x40); + puVar3 = D_80181CE4[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80181CEC[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80181CF4[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801911B8; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801911B8, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80181CFC[])(void); + +void func_8016BBA4(void *a0) { + D_80181CFC[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801912F4; + extern u8 D_801912F5; + extern u8 D_801912F6; + extern M2C_UNK D_801912F8; + extern u8 D_801912F9; + extern u8 D_801912FA; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801912F4) = 0x20; + D_801912F5 = 0x20; + D_801912F6 = 0; + (*(u8 *)&D_801912F8) = 0xc0; + D_801912F9 = 0xc0; + D_801912FA = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801912F4; +extern M2C_UNK D_801912F8; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801912F4, &D_801912F8, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801912F5; + extern u8 D_801912F6; + extern u8 D_801912F9; + extern u8 D_801912FA; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801912F4); + if (*p1 != 0) *p1 -= 4; + if (D_801912F5 != 0) D_801912F5 -= 4; + if (D_801912F6 != 0) D_801912F6 -= 4; + p2 = &(*(u8 *)&D_801912F8); + if (*p2 != 0) *p2 -= 4; + if (D_801912F9 != 0) D_801912F9 -= 4; + if (D_801912FA != 0) D_801912FA -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801912F4), &(*(int *)&D_801912F8), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_80191280; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_80191280); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80181D0C; + extern s32 D_80181D14; + extern s32 D_80181D1C; + extern s32 D_80181D24; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80181D0C, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80181D14, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80181D1C, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80181D24, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80181D2C[])(void); + +void func_8016C14C(void *a0) { + D_80181D2C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801912FC[]; +extern u8 D_80191304[]; +extern u8 D_801912B4[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801912FC, D_80191304, D_801912B4); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_80191310[]; + extern u8 D_801913D0; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_80191310[1] = 0xff; + D_80191310[2] = 0x10; + D_80191310[0] = 0x10; + D_80191310[6] = 0; + D_80191310[5] = 0; + D_80191310[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_80191310, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801913D0, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_80191310); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8016AB6C", func_8016C998); + + +extern void (*D_80181D34[])(void); + +void func_8016CB84(void *a0) { + D_80181D34[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801913D0[]; + + + Blk_8016CF04_8016CF04 *p = &D_801913D0[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80181D50[])(void); + +void func_8016D19C(void *a0) { + D_80181D50[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80181D58[])(void); + +void func_8016D428(void *a0) { + D_80181D58[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80181DC0[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80181DC0[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80181D64; +extern u8 D_80181D70; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80181D64, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80181D70); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80181DF4[])(void); + +void func_8016DEA4(void *a0) { + D_80181DF4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80181DFC[])(void); + +void func_8016DF20(void *a0) { + D_80181DFC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80181E50[])(void); + +void func_8016E5B8(void *a0) { + D_80181E50[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80181E10[4]; + extern s32 D_80181E30; + extern s32 D_80181E38; + extern s32 D_80181E40; + extern s32 D_80181E48; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80181E10[0], pp, &tmp); + RotTransSV(&D_80181E10[1], &prim.v[1], &tmp); + RotTransSV(&D_80181E10[2], &prim.v[2], &tmp); + RotTransSV(&D_80181E10[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80181E30; + prim.f1 = D_80181E38; + prim.f2 = D_80181E40; + prim.f3 = D_80181E48; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80181E90[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80181E90[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80181E84[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80181E84[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80181E74[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80181E74[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80181E84[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80181E84[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80181E84[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80181EA0; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80181EA0; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80181F18[])(void); + +void func_8016F6E0(void *a0) { + D_80181F18[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80181F20[])(void); + +void func_8016F798(void *a0) { + D_80181F20[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80181F28[])(void); + +void func_8016F834(void *a0) { + D_80181F28[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80181F30[])(void); + +void func_8016F8E4(void *a0) { + D_80181F30[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80181F38[])(void); + +void func_8016F9C4(void *a0) { + D_80181F38[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80181F40[])(void); + +void func_8016FA84(void *a0) { + D_80181F40[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80181F4C[])(void); + +void func_8016FB7C(void *a0) { + D_80181F4C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80181F58[])(void); + +void func_8016FC90(void *a0) { + D_80181F58[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80181F64[])(void); + +void func_8016FDB4(void *a0) { + D_80181F64[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80181F74[])(void); + +void func_8016FF30(void *a0) { + D_80181F74[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80181F84[])(void); + +void func_8016FFDC(void *a0) { + D_80181F84[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80181F8C[])(void); + +void func_80170150(void *a0) { + D_80181F8C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80181F94[])(void); + +void func_80170240(void *a0) { + D_80181F94[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80181F9C[])(void); + +void func_801702FC(void *a0) { + D_80181F9C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80181FA4[])(void); + +void func_801703E0(void *a0) { + D_80181FA4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80181FAC[])(void); + +void func_801704B0(void *a0) { + D_80181FAC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80181FB4[])(void); + +void func_80170548(void *a0) { + D_80181FB4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80181FBC[])(void); + +void func_801705F8(void *a0) { + D_80181FBC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80181FC4[])(void); + +void func_801706AC(void *a0) { + D_80181FC4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80181FCC[])(void); + +void func_80170748(void *a0) { + D_80181FCC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80181FD4[])(void); + +void func_80170810(void *a0) { + D_80181FD4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80181FDC[])(void); + +void func_80170AD8(void *a0) { + D_80181FDC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80181FE4[])(void); + +void func_80170BD8(void *a0) { + D_80181FE4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80181FEC[])(void); + +void func_80170C74(void *a0) { + D_80181FEC[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80181FF4[])(void); + +void func_80170D68(void *a0) { + D_80181FF4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80181FFC[])(void); + +void func_80170E34(void *a0) { + D_80181FFC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80182004[])(void); + +void func_80170EFC(void *a0) { + D_80182004[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_8018200C[])(void); + +void func_80170FB0(void *a0) { + D_8018200C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80182014[])(void); + +void func_80171064(void *a0) { + D_80182014[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_8018201C[])(void); + +void func_80171120(void *a0) { + D_8018201C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80182024[])(void); + +void func_801711C0(void *a0) { + D_80182024[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_8018202C[])(void); + +void func_80171260(void *a0) { + D_8018202C[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80182034[])(void); + +void func_801714E4(void *a0) { + D_80182034[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8016AB6C", func_80172C50); + + +extern void (*D_80182078[])(void); + +void func_80172CA0(void *a0) { + D_80182078[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_8018203C; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_8018203C); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC04_009/ov_SC04_009_jr_8015AE2C.c b/src/ov_SC04_009/ov_SC04_009_jr_8015AE2C.c index 6ffddb7e1..f55cf3fc8 100644 --- a/src/ov_SC04_009/ov_SC04_009_jr_8015AE2C.c +++ b/src/ov_SC04_009/ov_SC04_009_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_80181C5C[])(void); void func_8016AB30(void *a0) { D_80181C5C[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80181CD8[])(void); - -void func_8016B4BC(void *a0) { - D_80181CD8[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801973C8; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801973C8); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80181CCC[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80181CCC; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80181D10[]; -extern unsigned short D_80181D18[]; -extern unsigned short D_80181D20[]; -extern unsigned char D_801973D0[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801973D0 + param_2 * 0x40); - puVar3 = D_80181D10[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80181D18[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80181D20[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801973C8; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801973C8, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80181D28[])(void); - -void func_8016BBA4(void *a0) { - D_80181D28[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_80197504; - extern u8 D_80197505; - extern u8 D_80197506; - extern M2C_UNK D_80197508; - extern u8 D_80197509; - extern u8 D_8019750A; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_80197504) = 0x20; - D_80197505 = 0x20; - D_80197506 = 0; - (*(u8 *)&D_80197508) = 0xc0; - D_80197509 = 0xc0; - D_8019750A = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_80197504; -extern M2C_UNK D_80197508; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_80197504, &D_80197508, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_80197505; - extern u8 D_80197506; - extern u8 D_80197509; - extern u8 D_8019750A; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_80197504); - if (*p1 != 0) *p1 -= 4; - if (D_80197505 != 0) D_80197505 -= 4; - if (D_80197506 != 0) D_80197506 -= 4; - p2 = &(*(u8 *)&D_80197508); - if (*p2 != 0) *p2 -= 4; - if (D_80197509 != 0) D_80197509 -= 4; - if (D_8019750A != 0) D_8019750A -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_80197504), &(*(int *)&D_80197508), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_80197490; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_80197490); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80181D38; - extern s32 D_80181D40; - extern s32 D_80181D48; - extern s32 D_80181D50; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80181D38, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80181D40, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80181D48, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80181D50, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80181D58[])(void); - -void func_8016C14C(void *a0) { - D_80181D58[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_8019750C[]; -extern u8 D_80197514[]; -extern u8 D_801974C4[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_8019750C, D_80197514, D_801974C4); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_80197520[]; - extern u8 D_801975E0; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_80197520[1] = 0xff; - D_80197520[2] = 0x10; - D_80197520[0] = 0x10; - D_80197520[6] = 0; - D_80197520[5] = 0; - D_80197520[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_80197520, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801975E0, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_80197520); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8015AE2C", func_8016C998); - - -extern void (*D_80181D60[])(void); - -void func_8016CB84(void *a0) { - D_80181D60[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801975E0[]; - - - Blk_8016CF04_8016CF04 *p = &D_801975E0[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80181D7C[])(void); - -void func_8016D19C(void *a0) { - D_80181D7C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80181D84[])(void); - -void func_8016D428(void *a0) { - D_80181D84[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80181DEC[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80181DEC[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80181D90; -extern u8 D_80181D9C; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80181D90, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80181D9C); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80181E20[])(void); - -void func_8016DEA4(void *a0) { - D_80181E20[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80181E28[])(void); - -void func_8016DF20(void *a0) { - D_80181E28[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80181E7C[])(void); - -void func_8016E5B8(void *a0) { - D_80181E7C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80181E3C[4]; - extern s32 D_80181E5C; - extern s32 D_80181E64; - extern s32 D_80181E6C; - extern s32 D_80181E74; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80181E3C[0], pp, &tmp); - RotTransSV(&D_80181E3C[1], &prim.v[1], &tmp); - RotTransSV(&D_80181E3C[2], &prim.v[2], &tmp); - RotTransSV(&D_80181E3C[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80181E5C; - prim.f1 = D_80181E64; - prim.f2 = D_80181E6C; - prim.f3 = D_80181E74; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80181EBC[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80181EBC[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80181EB0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80181EB0[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80181EA0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80181EA0[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80181EB0[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80181EB0[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80181EB0[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80181ECC; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80181ECC; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80181F44[])(void); - -void func_8016F6E0(void *a0) { - D_80181F44[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80181F4C[])(void); - -void func_8016F798(void *a0) { - D_80181F4C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80181F54[])(void); - -void func_8016F834(void *a0) { - D_80181F54[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80181F5C[])(void); - -void func_8016F8E4(void *a0) { - D_80181F5C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80181F64[])(void); - -void func_8016F9C4(void *a0) { - D_80181F64[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80181F6C[])(void); - -void func_8016FA84(void *a0) { - D_80181F6C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80181F78[])(void); - -void func_8016FB7C(void *a0) { - D_80181F78[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80181F84[])(void); - -void func_8016FC90(void *a0) { - D_80181F84[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80181F90[])(void); - -void func_8016FDB4(void *a0) { - D_80181F90[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80181FA0[])(void); - -void func_8016FF30(void *a0) { - D_80181FA0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80181FB0[])(void); - -void func_8016FFDC(void *a0) { - D_80181FB0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80181FB8[])(void); - -void func_80170150(void *a0) { - D_80181FB8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80181FC0[])(void); - -void func_80170240(void *a0) { - D_80181FC0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80181FC8[])(void); - -void func_801702FC(void *a0) { - D_80181FC8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80181FD0[])(void); - -void func_801703E0(void *a0) { - D_80181FD0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80181FD8[])(void); - -void func_801704B0(void *a0) { - D_80181FD8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80181FE0[])(void); - -void func_80170548(void *a0) { - D_80181FE0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80181FE8[])(void); - -void func_801705F8(void *a0) { - D_80181FE8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80181FF0[])(void); - -void func_801706AC(void *a0) { - D_80181FF0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80181FF8[])(void); - -void func_80170748(void *a0) { - D_80181FF8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80182000[])(void); - -void func_80170810(void *a0) { - D_80182000[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80182008[])(void); - -void func_80170AD8(void *a0) { - D_80182008[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80182010[])(void); - -void func_80170BD8(void *a0) { - D_80182010[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80182018[])(void); - -void func_80170C74(void *a0) { - D_80182018[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80182020[])(void); - -void func_80170D68(void *a0) { - D_80182020[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80182028[])(void); - -void func_80170E34(void *a0) { - D_80182028[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80182030[])(void); - -void func_80170EFC(void *a0) { - D_80182030[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80182038[])(void); - -void func_80170FB0(void *a0) { - D_80182038[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80182040[])(void); - -void func_80171064(void *a0) { - D_80182040[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80182048[])(void); - -void func_80171120(void *a0) { - D_80182048[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80182050[])(void); - -void func_801711C0(void *a0) { - D_80182050[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80182058[])(void); - -void func_80171260(void *a0) { - D_80182058[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80182060[])(void); - -void func_801714E4(void *a0) { - D_80182060[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8015AE2C", func_80172C50); - - -extern void (*D_801820A4[])(void); - -void func_80172CA0(void *a0) { - D_801820A4[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80182068; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80182068); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC04_009/ov_SC04_009_jr_8016AB6C.c b/src/ov_SC04_009/ov_SC04_009_jr_8016AB6C.c new file mode 100644 index 000000000..06994df4b --- /dev/null +++ b/src/ov_SC04_009/ov_SC04_009_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80181028; +extern u8 D_80180F98; +extern u8 D_80180F74; +extern u8 D_80180F50; +extern u8 D_80181004; +extern u8 D_80180FE0; +extern u8 D_80180FBC; +extern u8 D_80180F2C; +extern void func_80145934(void); +extern u8 D_801810B8; +extern u8 D_80181094; +extern u8 D_80181070; +extern u8 D_8018104C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801804B0[]; +extern unsigned char D_801804E0[]; +extern unsigned char D_80180530[]; +extern unsigned char D_80180560[]; +extern unsigned char D_80180590[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801805E0[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801806A8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80180730[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80180738; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_80196F58; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_80196F5C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80180768; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80180810[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80180834[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80180824; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80180848[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80180854[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80180864[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018087C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018086C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80180890[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801808AC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018089C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801808C0[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801808D4[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801808E8; +extern void (*D_80180910[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801808F0; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018095C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80180960[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80180DC4[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80180DD4[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_80196F90; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80180DFC[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80180DDC; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80180DEC; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80180E3C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80180E44[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80180E10; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80180E50[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80180E20; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_80196F98; +extern s32 D_80196FA4; +extern s32 D_80196FA8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80180E8C[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80180E60[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_80196FA0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_801810DC[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80180EFC[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80181180[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_801812D4[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_801810F0; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_801812DC[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80181100; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80181120; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_801812E4[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_8018130C[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80181318[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_8018118C[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_801813BC; +extern void func_8015D380(s32 a0); +extern unsigned char D_801804A0[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_801813D0[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_8018140C[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80181454; +extern u16 D_80181456; +extern u16 D_80181458; +extern s32 D_8018145C; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80181464; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80181170; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_801814E8[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80181598[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_801815C8[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_8018162C; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_80196FB0[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80181650[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_80197008[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80181698[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80181688; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_80196880[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_801816A0[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_801816F4[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_801816BC; +extern s16 D_801816F0; +extern s16 D_801816EE; +extern s16 D_801816EC; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80181700[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_80197068; +extern u8 D_80197069; +extern u8 D_8019706A; +extern u8 D_8019706B; +extern u8 D_8019706C; +extern u8 D_8019706D; +extern u8 D_8019706E; +extern u8 D_8019706F; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80181710[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801970A8; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80181754[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_801817D0[]; +extern s32 D_801817F0[]; +extern u8 D_8018186C[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_8018188C[]; +extern u8 D_801818AC[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80181948[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_801819C4[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_80196890; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_801819D0[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_801819D8[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80181AA0[])(void); +extern void func_80166618(void *a0); +extern void (*D_80181AB0[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80181AC0[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80181ACC[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80181A2C[]; +extern u8 D_80181A40[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80181AE4[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80181AEC[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80181AF4[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80181AFC[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80181B04[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80181B0C[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80181B14[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80181BC8[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80181BD0[])(void); +extern void func_80169F00(void *a0); +extern char D_80181B80[]; +extern char D_80181B40[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80181C08[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80181C14[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80181C5C[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80181C1C[]; + extern u8 D_80181C2C[]; + extern u8 D_80197378[]; + extern u8 D_801973A0[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80181C1C, D_80197378) + 3; + func_8001CE28(obj, D_80197378); + } else { + var_s3 = func_80024054(D_80181C2C, D_801973A0) + 9; + func_8001CE28(obj, D_801973A0); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80181CD8[])(void); + +void func_8016B4BC(void *a0) { + D_80181CD8[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801973C8; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801973C8); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80181CCC[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80181CCC; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80181D10[]; +extern unsigned short D_80181D18[]; +extern unsigned short D_80181D20[]; +extern unsigned char D_801973D0[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801973D0 + param_2 * 0x40); + puVar3 = D_80181D10[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80181D18[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80181D20[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801973C8; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801973C8, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80181D28[])(void); + +void func_8016BBA4(void *a0) { + D_80181D28[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_80197504; + extern u8 D_80197505; + extern u8 D_80197506; + extern M2C_UNK D_80197508; + extern u8 D_80197509; + extern u8 D_8019750A; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_80197504) = 0x20; + D_80197505 = 0x20; + D_80197506 = 0; + (*(u8 *)&D_80197508) = 0xc0; + D_80197509 = 0xc0; + D_8019750A = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_80197504; +extern M2C_UNK D_80197508; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_80197504, &D_80197508, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_80197505; + extern u8 D_80197506; + extern u8 D_80197509; + extern u8 D_8019750A; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_80197504); + if (*p1 != 0) *p1 -= 4; + if (D_80197505 != 0) D_80197505 -= 4; + if (D_80197506 != 0) D_80197506 -= 4; + p2 = &(*(u8 *)&D_80197508); + if (*p2 != 0) *p2 -= 4; + if (D_80197509 != 0) D_80197509 -= 4; + if (D_8019750A != 0) D_8019750A -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_80197504), &(*(int *)&D_80197508), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_80197490; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_80197490); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80181D38; + extern s32 D_80181D40; + extern s32 D_80181D48; + extern s32 D_80181D50; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80181D38, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80181D40, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80181D48, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80181D50, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80181D58[])(void); + +void func_8016C14C(void *a0) { + D_80181D58[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_8019750C[]; +extern u8 D_80197514[]; +extern u8 D_801974C4[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_8019750C, D_80197514, D_801974C4); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_80197520[]; + extern u8 D_801975E0; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_80197520[1] = 0xff; + D_80197520[2] = 0x10; + D_80197520[0] = 0x10; + D_80197520[6] = 0; + D_80197520[5] = 0; + D_80197520[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_80197520, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801975E0, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_80197520); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8016AB6C", func_8016C998); + + +extern void (*D_80181D60[])(void); + +void func_8016CB84(void *a0) { + D_80181D60[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801975E0[]; + + + Blk_8016CF04_8016CF04 *p = &D_801975E0[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80181D7C[])(void); + +void func_8016D19C(void *a0) { + D_80181D7C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80181D84[])(void); + +void func_8016D428(void *a0) { + D_80181D84[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80181DEC[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80181DEC[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80181D90; +extern u8 D_80181D9C; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80181D90, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80181D9C); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80181E20[])(void); + +void func_8016DEA4(void *a0) { + D_80181E20[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80181E28[])(void); + +void func_8016DF20(void *a0) { + D_80181E28[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80181E7C[])(void); + +void func_8016E5B8(void *a0) { + D_80181E7C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80181E3C[4]; + extern s32 D_80181E5C; + extern s32 D_80181E64; + extern s32 D_80181E6C; + extern s32 D_80181E74; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80181E3C[0], pp, &tmp); + RotTransSV(&D_80181E3C[1], &prim.v[1], &tmp); + RotTransSV(&D_80181E3C[2], &prim.v[2], &tmp); + RotTransSV(&D_80181E3C[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80181E5C; + prim.f1 = D_80181E64; + prim.f2 = D_80181E6C; + prim.f3 = D_80181E74; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80181EBC[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80181EBC[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80181EB0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80181EB0[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80181EA0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80181EA0[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80181EB0[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80181EB0[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80181EB0[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80181ECC; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80181ECC; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80181F44[])(void); + +void func_8016F6E0(void *a0) { + D_80181F44[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80181F4C[])(void); + +void func_8016F798(void *a0) { + D_80181F4C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80181F54[])(void); + +void func_8016F834(void *a0) { + D_80181F54[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80181F5C[])(void); + +void func_8016F8E4(void *a0) { + D_80181F5C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80181F64[])(void); + +void func_8016F9C4(void *a0) { + D_80181F64[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80181F6C[])(void); + +void func_8016FA84(void *a0) { + D_80181F6C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80181F78[])(void); + +void func_8016FB7C(void *a0) { + D_80181F78[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80181F84[])(void); + +void func_8016FC90(void *a0) { + D_80181F84[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80181F90[])(void); + +void func_8016FDB4(void *a0) { + D_80181F90[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80181FA0[])(void); + +void func_8016FF30(void *a0) { + D_80181FA0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80181FB0[])(void); + +void func_8016FFDC(void *a0) { + D_80181FB0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80181FB8[])(void); + +void func_80170150(void *a0) { + D_80181FB8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80181FC0[])(void); + +void func_80170240(void *a0) { + D_80181FC0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80181FC8[])(void); + +void func_801702FC(void *a0) { + D_80181FC8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80181FD0[])(void); + +void func_801703E0(void *a0) { + D_80181FD0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80181FD8[])(void); + +void func_801704B0(void *a0) { + D_80181FD8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80181FE0[])(void); + +void func_80170548(void *a0) { + D_80181FE0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80181FE8[])(void); + +void func_801705F8(void *a0) { + D_80181FE8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80181FF0[])(void); + +void func_801706AC(void *a0) { + D_80181FF0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80181FF8[])(void); + +void func_80170748(void *a0) { + D_80181FF8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80182000[])(void); + +void func_80170810(void *a0) { + D_80182000[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80182008[])(void); + +void func_80170AD8(void *a0) { + D_80182008[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80182010[])(void); + +void func_80170BD8(void *a0) { + D_80182010[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80182018[])(void); + +void func_80170C74(void *a0) { + D_80182018[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80182020[])(void); + +void func_80170D68(void *a0) { + D_80182020[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80182028[])(void); + +void func_80170E34(void *a0) { + D_80182028[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80182030[])(void); + +void func_80170EFC(void *a0) { + D_80182030[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80182038[])(void); + +void func_80170FB0(void *a0) { + D_80182038[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80182040[])(void); + +void func_80171064(void *a0) { + D_80182040[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80182048[])(void); + +void func_80171120(void *a0) { + D_80182048[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80182050[])(void); + +void func_801711C0(void *a0) { + D_80182050[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80182058[])(void); + +void func_80171260(void *a0) { + D_80182058[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80182060[])(void); + +void func_801714E4(void *a0) { + D_80182060[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8016AB6C", func_80172C50); + + +extern void (*D_801820A4[])(void); + +void func_80172CA0(void *a0) { + D_801820A4[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80182068; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80182068); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC04_010/ov_SC04_010_jr_8015AE2C.c b/src/ov_SC04_010/ov_SC04_010_jr_8015AE2C.c index 584b3a3d3..a8f1c81f4 100644 --- a/src/ov_SC04_010/ov_SC04_010_jr_8015AE2C.c +++ b/src/ov_SC04_010/ov_SC04_010_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_80181308[])(void); void func_8016AB30(void *a0) { D_80181308[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80181384[])(void); - -void func_8016B4BC(void *a0) { - D_80181384[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_8018E860; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_8018E860); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80181378[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80181378; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_801813BC[]; -extern unsigned short D_801813C4[]; -extern unsigned short D_801813CC[]; -extern unsigned char D_8018E868[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_8018E868 + param_2 * 0x40); - puVar3 = D_801813BC[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_801813C4[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_801813CC[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_8018E860; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_8018E860, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_801813D4[])(void); - -void func_8016BBA4(void *a0) { - D_801813D4[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_8018E99C; - extern u8 D_8018E99D; - extern u8 D_8018E99E; - extern M2C_UNK D_8018E9A0; - extern u8 D_8018E9A1; - extern u8 D_8018E9A2; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_8018E99C) = 0x20; - D_8018E99D = 0x20; - D_8018E99E = 0; - (*(u8 *)&D_8018E9A0) = 0xc0; - D_8018E9A1 = 0xc0; - D_8018E9A2 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_8018E99C; -extern M2C_UNK D_8018E9A0; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_8018E99C, &D_8018E9A0, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_8018E99D; - extern u8 D_8018E99E; - extern u8 D_8018E9A1; - extern u8 D_8018E9A2; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_8018E99C); - if (*p1 != 0) *p1 -= 4; - if (D_8018E99D != 0) D_8018E99D -= 4; - if (D_8018E99E != 0) D_8018E99E -= 4; - p2 = &(*(u8 *)&D_8018E9A0); - if (*p2 != 0) *p2 -= 4; - if (D_8018E9A1 != 0) D_8018E9A1 -= 4; - if (D_8018E9A2 != 0) D_8018E9A2 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_8018E99C), &(*(int *)&D_8018E9A0), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_8018E928; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_8018E928); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_801813E4; - extern s32 D_801813EC; - extern s32 D_801813F4; - extern s32 D_801813FC; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_801813E4, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_801813EC, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_801813F4, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_801813FC, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80181404[])(void); - -void func_8016C14C(void *a0) { - D_80181404[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_8018E9A4[]; -extern u8 D_8018E9AC[]; -extern u8 D_8018E95C[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_8018E9A4, D_8018E9AC, D_8018E95C); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_8018E9B8[]; - extern u8 D_8018EA78; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_8018E9B8[1] = 0xff; - D_8018E9B8[2] = 0x10; - D_8018E9B8[0] = 0x10; - D_8018E9B8[6] = 0; - D_8018E9B8[5] = 0; - D_8018E9B8[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_8018E9B8, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_8018EA78, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_8018E9B8); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8015AE2C", func_8016C998); - - -extern void (*D_8018140C[])(void); - -void func_8016CB84(void *a0) { - D_8018140C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_8018EA78[]; - - - Blk_8016CF04_8016CF04 *p = &D_8018EA78[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80181428[])(void); - -void func_8016D19C(void *a0) { - D_80181428[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80181430[])(void); - -void func_8016D428(void *a0) { - D_80181430[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80181498[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80181498[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_8018143C; -extern u8 D_80181448; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018143C, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80181448); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8015AE2C", func_8016DC20); - - -extern void (*D_801814CC[])(void); - -void func_8016DEA4(void *a0) { - D_801814CC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_801814D4[])(void); - -void func_8016DF20(void *a0) { - D_801814D4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80181528[])(void); - -void func_8016E5B8(void *a0) { - D_80181528[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_801814E8[4]; - extern s32 D_80181508; - extern s32 D_80181510; - extern s32 D_80181518; - extern s32 D_80181520; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_801814E8[0], pp, &tmp); - RotTransSV(&D_801814E8[1], &prim.v[1], &tmp); - RotTransSV(&D_801814E8[2], &prim.v[2], &tmp); - RotTransSV(&D_801814E8[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80181508; - prim.f1 = D_80181510; - prim.f2 = D_80181518; - prim.f3 = D_80181520; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80181568[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80181568[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_8018155C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_8018155C[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_8018154C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_8018154C[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018155C[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_8018155C[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_8018155C[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80181578; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80181578; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_801815F0[])(void); - -void func_8016F6E0(void *a0) { - D_801815F0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_801815F8[])(void); - -void func_8016F798(void *a0) { - D_801815F8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80181600[])(void); - -void func_8016F834(void *a0) { - D_80181600[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80181608[])(void); - -void func_8016F8E4(void *a0) { - D_80181608[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80181610[])(void); - -void func_8016F9C4(void *a0) { - D_80181610[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80181618[])(void); - -void func_8016FA84(void *a0) { - D_80181618[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80181624[])(void); - -void func_8016FB7C(void *a0) { - D_80181624[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80181630[])(void); - -void func_8016FC90(void *a0) { - D_80181630[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_8018163C[])(void); - -void func_8016FDB4(void *a0) { - D_8018163C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_8018164C[])(void); - -void func_8016FF30(void *a0) { - D_8018164C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_8018165C[])(void); - -void func_8016FFDC(void *a0) { - D_8018165C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80181664[])(void); - -void func_80170150(void *a0) { - D_80181664[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_8018166C[])(void); - -void func_80170240(void *a0) { - D_8018166C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80181674[])(void); - -void func_801702FC(void *a0) { - D_80181674[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_8018167C[])(void); - -void func_801703E0(void *a0) { - D_8018167C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80181684[])(void); - -void func_801704B0(void *a0) { - D_80181684[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_8018168C[])(void); - -void func_80170548(void *a0) { - D_8018168C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80181694[])(void); - -void func_801705F8(void *a0) { - D_80181694[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_8018169C[])(void); - -void func_801706AC(void *a0) { - D_8018169C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_801816A4[])(void); - -void func_80170748(void *a0) { - D_801816A4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_801816AC[])(void); - -void func_80170810(void *a0) { - D_801816AC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_801816B4[])(void); - -void func_80170AD8(void *a0) { - D_801816B4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_801816BC[])(void); - -void func_80170BD8(void *a0) { - D_801816BC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_801816C4[])(void); - -void func_80170C74(void *a0) { - D_801816C4[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8015AE2C", func_80170CF0); - - -extern void (*D_801816CC[])(void); - -void func_80170D68(void *a0) { - D_801816CC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_801816D4[])(void); - -void func_80170E34(void *a0) { - D_801816D4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_801816DC[])(void); - -void func_80170EFC(void *a0) { - D_801816DC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_801816E4[])(void); - -void func_80170FB0(void *a0) { - D_801816E4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_801816EC[])(void); - -void func_80171064(void *a0) { - D_801816EC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_801816F4[])(void); - -void func_80171120(void *a0) { - D_801816F4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_801816FC[])(void); - -void func_801711C0(void *a0) { - D_801816FC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80181704[])(void); - -void func_80171260(void *a0) { - D_80181704[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_8018170C[])(void); - -void func_801714E4(void *a0) { - D_8018170C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8015AE2C", func_80172C50); - - -extern void (*D_80181750[])(void); - -void func_80172CA0(void *a0) { - D_80181750[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80181714; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80181714); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC04_010/ov_SC04_010_jr_8016AB6C.c b/src/ov_SC04_010/ov_SC04_010_jr_8016AB6C.c new file mode 100644 index 000000000..24ba9379b --- /dev/null +++ b/src/ov_SC04_010/ov_SC04_010_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801806D4; +extern u8 D_80180644; +extern u8 D_80180620; +extern u8 D_801805FC; +extern u8 D_801806B0; +extern u8 D_8018068C; +extern u8 D_80180668; +extern u8 D_801805D8; +extern void func_80145934(void); +extern u8 D_80180764; +extern u8 D_80180740; +extern u8 D_8018071C; +extern u8 D_801806F8; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8017FB5C[]; +extern unsigned char D_8017FB8C[]; +extern unsigned char D_8017FBDC[]; +extern unsigned char D_8017FC0C[]; +extern unsigned char D_8017FC3C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8017FC8C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8017FD54[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8017FDDC[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8017FDE4; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8018E3F0; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8018E3F4; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8017FE14; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8017FEBC[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8017FEE0[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8017FED0; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8017FEF4[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8017FF00[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8017FF10[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8017FF28[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8017FF18; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8017FF3C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8017FF58[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8017FF48; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8017FF6C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8017FF80[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8017FF94; +extern void (*D_8017FFBC[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8017FF9C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80180008[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018000C[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80180470[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80180480[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_8018E428; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_801804A8[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80180488; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80180498; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801804E8[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801804F0[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_801804BC; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801804FC[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_801804CC; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_8018E430; +extern s32 D_8018E43C; +extern s32 D_8018E440; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80180538[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018050C[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_8018E438; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80180788[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_801805A8[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018082C[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80180980[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018079C; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80180988[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_801807AC; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801807CC; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80180990[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_801809B8[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_801809C4[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80180838[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80180A68; +extern void func_8015D380(s32 a0); +extern unsigned char D_8017FB4C[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80180A7C[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80180AB8[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80180B00; +extern u16 D_80180B02; +extern u16 D_80180B04; +extern s32 D_80180B08; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80180B10; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_8018081C; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80180B94[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80180C44[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80180C74[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80180CD8; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_8018E448[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80180CFC[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_8018E4A0[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80180D44[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80180D34; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_8018DD0C[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80180D4C[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80180DA0[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80180D68; +extern s16 D_80180D9C; +extern s16 D_80180D9A; +extern s16 D_80180D98; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80180DAC[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_8018E500; +extern u8 D_8018E501; +extern u8 D_8018E502; +extern u8 D_8018E503; +extern u8 D_8018E504; +extern u8 D_8018E505; +extern u8 D_8018E506; +extern u8 D_8018E507; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80180DBC[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_8018E540; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80180E00[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80180E7C[]; +extern s32 D_80180E9C[]; +extern u8 D_80180F18[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80180F38[]; +extern u8 D_80180F58[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80180FF4[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80181070[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_8018DD1C; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_8018107C[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80181084[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_8018114C[])(void); +extern void func_80166618(void *a0); +extern void (*D_8018115C[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_8018116C[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80181178[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_801810D8[]; +extern u8 D_801810EC[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80181190[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80181198[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_801811A0[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_801811A8[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_801811B0[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_801811B8[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_801811C0[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80181274[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_8018127C[])(void); +extern void func_80169F00(void *a0); +extern char D_8018122C[]; +extern char D_801811EC[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_801812B4[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_801812C0[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80181308[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_801812C8[]; + extern u8 D_801812D8[]; + extern u8 D_8018E810[]; + extern u8 D_8018E838[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_801812C8, D_8018E810) + 3; + func_8001CE28(obj, D_8018E810); + } else { + var_s3 = func_80024054(D_801812D8, D_8018E838) + 9; + func_8001CE28(obj, D_8018E838); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80181384[])(void); + +void func_8016B4BC(void *a0) { + D_80181384[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_8018E860; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_8018E860); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80181378[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80181378; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_801813BC[]; +extern unsigned short D_801813C4[]; +extern unsigned short D_801813CC[]; +extern unsigned char D_8018E868[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_8018E868 + param_2 * 0x40); + puVar3 = D_801813BC[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_801813C4[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_801813CC[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_8018E860; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_8018E860, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_801813D4[])(void); + +void func_8016BBA4(void *a0) { + D_801813D4[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_8018E99C; + extern u8 D_8018E99D; + extern u8 D_8018E99E; + extern M2C_UNK D_8018E9A0; + extern u8 D_8018E9A1; + extern u8 D_8018E9A2; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_8018E99C) = 0x20; + D_8018E99D = 0x20; + D_8018E99E = 0; + (*(u8 *)&D_8018E9A0) = 0xc0; + D_8018E9A1 = 0xc0; + D_8018E9A2 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_8018E99C; +extern M2C_UNK D_8018E9A0; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_8018E99C, &D_8018E9A0, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_8018E99D; + extern u8 D_8018E99E; + extern u8 D_8018E9A1; + extern u8 D_8018E9A2; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_8018E99C); + if (*p1 != 0) *p1 -= 4; + if (D_8018E99D != 0) D_8018E99D -= 4; + if (D_8018E99E != 0) D_8018E99E -= 4; + p2 = &(*(u8 *)&D_8018E9A0); + if (*p2 != 0) *p2 -= 4; + if (D_8018E9A1 != 0) D_8018E9A1 -= 4; + if (D_8018E9A2 != 0) D_8018E9A2 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_8018E99C), &(*(int *)&D_8018E9A0), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_8018E928; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_8018E928); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_801813E4; + extern s32 D_801813EC; + extern s32 D_801813F4; + extern s32 D_801813FC; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_801813E4, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_801813EC, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_801813F4, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_801813FC, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80181404[])(void); + +void func_8016C14C(void *a0) { + D_80181404[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_8018E9A4[]; +extern u8 D_8018E9AC[]; +extern u8 D_8018E95C[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_8018E9A4, D_8018E9AC, D_8018E95C); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_8018E9B8[]; + extern u8 D_8018EA78; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_8018E9B8[1] = 0xff; + D_8018E9B8[2] = 0x10; + D_8018E9B8[0] = 0x10; + D_8018E9B8[6] = 0; + D_8018E9B8[5] = 0; + D_8018E9B8[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_8018E9B8, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_8018EA78, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_8018E9B8); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8016AB6C", func_8016C998); + + +extern void (*D_8018140C[])(void); + +void func_8016CB84(void *a0) { + D_8018140C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_8018EA78[]; + + + Blk_8016CF04_8016CF04 *p = &D_8018EA78[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80181428[])(void); + +void func_8016D19C(void *a0) { + D_80181428[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80181430[])(void); + +void func_8016D428(void *a0) { + D_80181430[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80181498[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80181498[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_8018143C; +extern u8 D_80181448; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018143C, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80181448); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8016AB6C", func_8016DC20); + + +extern void (*D_801814CC[])(void); + +void func_8016DEA4(void *a0) { + D_801814CC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_801814D4[])(void); + +void func_8016DF20(void *a0) { + D_801814D4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80181528[])(void); + +void func_8016E5B8(void *a0) { + D_80181528[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_801814E8[4]; + extern s32 D_80181508; + extern s32 D_80181510; + extern s32 D_80181518; + extern s32 D_80181520; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_801814E8[0], pp, &tmp); + RotTransSV(&D_801814E8[1], &prim.v[1], &tmp); + RotTransSV(&D_801814E8[2], &prim.v[2], &tmp); + RotTransSV(&D_801814E8[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80181508; + prim.f1 = D_80181510; + prim.f2 = D_80181518; + prim.f3 = D_80181520; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80181568[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80181568[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_8018155C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_8018155C[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_8018154C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_8018154C[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018155C[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_8018155C[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_8018155C[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80181578; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80181578; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_801815F0[])(void); + +void func_8016F6E0(void *a0) { + D_801815F0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_801815F8[])(void); + +void func_8016F798(void *a0) { + D_801815F8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80181600[])(void); + +void func_8016F834(void *a0) { + D_80181600[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80181608[])(void); + +void func_8016F8E4(void *a0) { + D_80181608[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80181610[])(void); + +void func_8016F9C4(void *a0) { + D_80181610[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80181618[])(void); + +void func_8016FA84(void *a0) { + D_80181618[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80181624[])(void); + +void func_8016FB7C(void *a0) { + D_80181624[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80181630[])(void); + +void func_8016FC90(void *a0) { + D_80181630[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_8018163C[])(void); + +void func_8016FDB4(void *a0) { + D_8018163C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_8018164C[])(void); + +void func_8016FF30(void *a0) { + D_8018164C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_8018165C[])(void); + +void func_8016FFDC(void *a0) { + D_8018165C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80181664[])(void); + +void func_80170150(void *a0) { + D_80181664[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_8018166C[])(void); + +void func_80170240(void *a0) { + D_8018166C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80181674[])(void); + +void func_801702FC(void *a0) { + D_80181674[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_8018167C[])(void); + +void func_801703E0(void *a0) { + D_8018167C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80181684[])(void); + +void func_801704B0(void *a0) { + D_80181684[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_8018168C[])(void); + +void func_80170548(void *a0) { + D_8018168C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80181694[])(void); + +void func_801705F8(void *a0) { + D_80181694[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_8018169C[])(void); + +void func_801706AC(void *a0) { + D_8018169C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_801816A4[])(void); + +void func_80170748(void *a0) { + D_801816A4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_801816AC[])(void); + +void func_80170810(void *a0) { + D_801816AC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_801816B4[])(void); + +void func_80170AD8(void *a0) { + D_801816B4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_801816BC[])(void); + +void func_80170BD8(void *a0) { + D_801816BC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_801816C4[])(void); + +void func_80170C74(void *a0) { + D_801816C4[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8016AB6C", func_80170CF0); + + +extern void (*D_801816CC[])(void); + +void func_80170D68(void *a0) { + D_801816CC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_801816D4[])(void); + +void func_80170E34(void *a0) { + D_801816D4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_801816DC[])(void); + +void func_80170EFC(void *a0) { + D_801816DC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_801816E4[])(void); + +void func_80170FB0(void *a0) { + D_801816E4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_801816EC[])(void); + +void func_80171064(void *a0) { + D_801816EC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_801816F4[])(void); + +void func_80171120(void *a0) { + D_801816F4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_801816FC[])(void); + +void func_801711C0(void *a0) { + D_801816FC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80181704[])(void); + +void func_80171260(void *a0) { + D_80181704[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_8018170C[])(void); + +void func_801714E4(void *a0) { + D_8018170C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8016AB6C", func_80172C50); + + +extern void (*D_80181750[])(void); + +void func_80172CA0(void *a0) { + D_80181750[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80181714; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80181714); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC04_011/ov_SC04_011_jr_8015AE2C.c b/src/ov_SC04_011/ov_SC04_011_jr_8015AE2C.c index 51347a9ef..51c3430f6 100644 --- a/src/ov_SC04_011/ov_SC04_011_jr_8015AE2C.c +++ b/src/ov_SC04_011/ov_SC04_011_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_80193598[])(void); void func_8016AB30(void *a0) { D_80193598[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80193614[])(void); - -void func_8016B4BC(void *a0) { - D_80193614[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801EDFC8; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801EDFC8); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80193608[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80193608; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_8019364C[]; -extern unsigned short D_80193654[]; -extern unsigned short D_8019365C[]; -extern unsigned char D_801EDFD0[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801EDFD0 + param_2 * 0x40); - puVar3 = D_8019364C[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80193654[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_8019365C[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801EDFC8; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801EDFC8, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80193664[])(void); - -void func_8016BBA4(void *a0) { - D_80193664[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801EE104; - extern u8 D_801EE105; - extern u8 D_801EE106; - extern M2C_UNK D_801EE108; - extern u8 D_801EE109; - extern u8 D_801EE10A; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801EE104) = 0x20; - D_801EE105 = 0x20; - D_801EE106 = 0; - (*(u8 *)&D_801EE108) = 0xc0; - D_801EE109 = 0xc0; - D_801EE10A = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801EE104; -extern M2C_UNK D_801EE108; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801EE104, &D_801EE108, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801EE105; - extern u8 D_801EE106; - extern u8 D_801EE109; - extern u8 D_801EE10A; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801EE104); - if (*p1 != 0) *p1 -= 4; - if (D_801EE105 != 0) D_801EE105 -= 4; - if (D_801EE106 != 0) D_801EE106 -= 4; - p2 = &(*(u8 *)&D_801EE108); - if (*p2 != 0) *p2 -= 4; - if (D_801EE109 != 0) D_801EE109 -= 4; - if (D_801EE10A != 0) D_801EE10A -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801EE104), &(*(int *)&D_801EE108), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801EE090; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801EE090); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80193674; - extern s32 D_8019367C; - extern s32 D_80193684; - extern s32 D_8019368C; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80193674, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_8019367C, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80193684, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_8019368C, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80193694[])(void); - -void func_8016C14C(void *a0) { - D_80193694[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801EE10C[]; -extern u8 D_801EE114[]; -extern u8 D_801EE0C4[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801EE10C, D_801EE114, D_801EE0C4); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801EE120[]; - extern u8 D_801EE1E0; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801EE120[1] = 0xff; - D_801EE120[2] = 0x10; - D_801EE120[0] = 0x10; - D_801EE120[6] = 0; - D_801EE120[5] = 0; - D_801EE120[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801EE120, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801EE1E0, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801EE120); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8015AE2C", func_8016C998); - - -extern void (*D_8019369C[])(void); - -void func_8016CB84(void *a0) { - D_8019369C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801EE1E0[]; - - - Blk_8016CF04_8016CF04 *p = &D_801EE1E0[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_801936B8[])(void); - -void func_8016D19C(void *a0) { - D_801936B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_801936C0[])(void); - -void func_8016D428(void *a0) { - D_801936C0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80193728[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80193728[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_801936CC; -extern u8 D_801936D8; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801936CC, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801936D8); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8015AE2C", func_8016DC20); - - -extern void (*D_8019375C[])(void); - -void func_8016DEA4(void *a0) { - D_8019375C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80193764[])(void); - -void func_8016DF20(void *a0) { - D_80193764[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_801937B8[])(void); - -void func_8016E5B8(void *a0) { - D_801937B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80193778[4]; - extern s32 D_80193798; - extern s32 D_801937A0; - extern s32 D_801937A8; - extern s32 D_801937B0; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80193778[0], pp, &tmp); - RotTransSV(&D_80193778[1], &prim.v[1], &tmp); - RotTransSV(&D_80193778[2], &prim.v[2], &tmp); - RotTransSV(&D_80193778[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80193798; - prim.f1 = D_801937A0; - prim.f2 = D_801937A8; - prim.f3 = D_801937B0; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_801937F8[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_801937F8[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_801937EC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_801937EC[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_801937DC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_801937DC[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801937EC[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_801937EC[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_801937EC[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80193808; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80193808; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80193880[])(void); - -void func_8016F6E0(void *a0) { - D_80193880[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80193888[])(void); - -void func_8016F798(void *a0) { - D_80193888[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80193890[])(void); - -void func_8016F834(void *a0) { - D_80193890[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80193898[])(void); - -void func_8016F8E4(void *a0) { - D_80193898[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_801938A0[])(void); - -void func_8016F9C4(void *a0) { - D_801938A0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_801938A8[])(void); - -void func_8016FA84(void *a0) { - D_801938A8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_801938B4[])(void); - -void func_8016FB7C(void *a0) { - D_801938B4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_801938C0[])(void); - -void func_8016FC90(void *a0) { - D_801938C0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_801938CC[])(void); - -void func_8016FDB4(void *a0) { - D_801938CC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_801938DC[])(void); - -void func_8016FF30(void *a0) { - D_801938DC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_801938EC[])(void); - -void func_8016FFDC(void *a0) { - D_801938EC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_801938F4[])(void); - -void func_80170150(void *a0) { - D_801938F4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_801938FC[])(void); - -void func_80170240(void *a0) { - D_801938FC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80193904[])(void); - -void func_801702FC(void *a0) { - D_80193904[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_8019390C[])(void); - -void func_801703E0(void *a0) { - D_8019390C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80193914[])(void); - -void func_801704B0(void *a0) { - D_80193914[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_8019391C[])(void); - -void func_80170548(void *a0) { - D_8019391C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80193924[])(void); - -void func_801705F8(void *a0) { - D_80193924[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_8019392C[])(void); - -void func_801706AC(void *a0) { - D_8019392C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80193934[])(void); - -void func_80170748(void *a0) { - D_80193934[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_8019393C[])(void); - -void func_80170810(void *a0) { - D_8019393C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80193944[])(void); - -void func_80170AD8(void *a0) { - D_80193944[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_8019394C[])(void); - -void func_80170BD8(void *a0) { - D_8019394C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80193954[])(void); - -void func_80170C74(void *a0) { - D_80193954[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8015AE2C", func_80170CF0); - - -extern void (*D_8019395C[])(void); - -void func_80170D68(void *a0) { - D_8019395C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80193964[])(void); - -void func_80170E34(void *a0) { - D_80193964[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_8019396C[])(void); - -void func_80170EFC(void *a0) { - D_8019396C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80193974[])(void); - -void func_80170FB0(void *a0) { - D_80193974[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_8019397C[])(void); - -void func_80171064(void *a0) { - D_8019397C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80193984[])(void); - -void func_80171120(void *a0) { - D_80193984[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_8019398C[])(void); - -void func_801711C0(void *a0) { - D_8019398C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80193994[])(void); - -void func_80171260(void *a0) { - D_80193994[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_8019399C[])(void); - -void func_801714E4(void *a0) { - D_8019399C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8015AE2C", func_80172C50); - - -extern void (*D_801939E0[])(void); - -void func_80172CA0(void *a0) { - D_801939E0[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_801939A4; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_801939A4); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC04_011/ov_SC04_011_jr_8016AB6C.c b/src/ov_SC04_011/ov_SC04_011_jr_8016AB6C.c new file mode 100644 index 000000000..0a5ad1a86 --- /dev/null +++ b/src/ov_SC04_011/ov_SC04_011_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80192964; +extern u8 D_801928D4; +extern u8 D_801928B0; +extern u8 D_8019288C; +extern u8 D_80192940; +extern u8 D_8019291C; +extern u8 D_801928F8; +extern u8 D_80192868; +extern void func_80145934(void); +extern u8 D_801929F4; +extern u8 D_801929D0; +extern u8 D_801929AC; +extern u8 D_80192988; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80191DEC[]; +extern unsigned char D_80191E1C[]; +extern unsigned char D_80191E6C[]; +extern unsigned char D_80191E9C[]; +extern unsigned char D_80191ECC[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80191F1C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80191FE4[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8019206C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80192074; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801EDB58; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801EDB5C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801920A4; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8019214C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80192170[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80192160; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80192184[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80192190[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801921A0[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801921B8[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801921A8; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801921CC[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801921E8[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801921D8; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801921FC[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80192210[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80192224; +extern void (*D_8019224C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8019222C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80192298[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8019229C[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80192700[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80192710[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801EDB90; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80192738[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80192718; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80192728; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80192778[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80192780[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8019274C; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8019278C[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8019275C; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801EDB98; +extern s32 D_801EDBA4; +extern s32 D_801EDBA8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801927C8[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8019279C[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801EDBA0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80192A18[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80192838[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80192ABC[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80192C10[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80192A2C; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80192C18[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80192A3C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80192A5C; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80192C20[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80192C48[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80192C54[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80192AC8[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80192CF8; +extern void func_8015D380(s32 a0); +extern unsigned char D_80191DDC[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80192D0C[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80192D48[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80192D90; +extern u16 D_80192D92; +extern u16 D_80192D94; +extern s32 D_80192D98; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80192DA0; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80192AAC; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80192E24[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80192ED4[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80192F04[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80192F68; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801EDBB0[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80192F8C[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801EDC08[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80192FD4[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80192FC4; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801ED2A8[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80192FDC[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80193030[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80192FF8; +extern s16 D_8019302C; +extern s16 D_8019302A; +extern s16 D_80193028; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_8019303C[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801EDC68; +extern u8 D_801EDC69; +extern u8 D_801EDC6A; +extern u8 D_801EDC6B; +extern u8 D_801EDC6C; +extern u8 D_801EDC6D; +extern u8 D_801EDC6E; +extern u8 D_801EDC6F; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_8019304C[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801EDCA8; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80193090[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_8019310C[]; +extern s32 D_8019312C[]; +extern u8 D_801931A8[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_801931C8[]; +extern u8 D_801931E8[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80193284[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80193300[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801ED2B8; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_8019330C[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80193314[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_801933DC[])(void); +extern void func_80166618(void *a0); +extern void (*D_801933EC[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_801933FC[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80193408[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80193368[]; +extern u8 D_8019337C[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80193420[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80193428[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80193430[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80193438[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80193440[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80193448[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80193450[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80193504[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_8019350C[])(void); +extern void func_80169F00(void *a0); +extern char D_801934BC[]; +extern char D_8019347C[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80193544[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80193550[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80193598[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80193558[]; + extern u8 D_80193568[]; + extern u8 D_801EDF78[]; + extern u8 D_801EDFA0[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80193558, D_801EDF78) + 3; + func_8001CE28(obj, D_801EDF78); + } else { + var_s3 = func_80024054(D_80193568, D_801EDFA0) + 9; + func_8001CE28(obj, D_801EDFA0); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80193614[])(void); + +void func_8016B4BC(void *a0) { + D_80193614[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801EDFC8; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801EDFC8); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80193608[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80193608; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_8019364C[]; +extern unsigned short D_80193654[]; +extern unsigned short D_8019365C[]; +extern unsigned char D_801EDFD0[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801EDFD0 + param_2 * 0x40); + puVar3 = D_8019364C[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80193654[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_8019365C[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801EDFC8; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801EDFC8, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80193664[])(void); + +void func_8016BBA4(void *a0) { + D_80193664[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801EE104; + extern u8 D_801EE105; + extern u8 D_801EE106; + extern M2C_UNK D_801EE108; + extern u8 D_801EE109; + extern u8 D_801EE10A; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801EE104) = 0x20; + D_801EE105 = 0x20; + D_801EE106 = 0; + (*(u8 *)&D_801EE108) = 0xc0; + D_801EE109 = 0xc0; + D_801EE10A = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801EE104; +extern M2C_UNK D_801EE108; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801EE104, &D_801EE108, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801EE105; + extern u8 D_801EE106; + extern u8 D_801EE109; + extern u8 D_801EE10A; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801EE104); + if (*p1 != 0) *p1 -= 4; + if (D_801EE105 != 0) D_801EE105 -= 4; + if (D_801EE106 != 0) D_801EE106 -= 4; + p2 = &(*(u8 *)&D_801EE108); + if (*p2 != 0) *p2 -= 4; + if (D_801EE109 != 0) D_801EE109 -= 4; + if (D_801EE10A != 0) D_801EE10A -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801EE104), &(*(int *)&D_801EE108), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801EE090; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801EE090); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80193674; + extern s32 D_8019367C; + extern s32 D_80193684; + extern s32 D_8019368C; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80193674, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_8019367C, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80193684, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_8019368C, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80193694[])(void); + +void func_8016C14C(void *a0) { + D_80193694[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801EE10C[]; +extern u8 D_801EE114[]; +extern u8 D_801EE0C4[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801EE10C, D_801EE114, D_801EE0C4); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801EE120[]; + extern u8 D_801EE1E0; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801EE120[1] = 0xff; + D_801EE120[2] = 0x10; + D_801EE120[0] = 0x10; + D_801EE120[6] = 0; + D_801EE120[5] = 0; + D_801EE120[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801EE120, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801EE1E0, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801EE120); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8016AB6C", func_8016C998); + + +extern void (*D_8019369C[])(void); + +void func_8016CB84(void *a0) { + D_8019369C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801EE1E0[]; + + + Blk_8016CF04_8016CF04 *p = &D_801EE1E0[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_801936B8[])(void); + +void func_8016D19C(void *a0) { + D_801936B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_801936C0[])(void); + +void func_8016D428(void *a0) { + D_801936C0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80193728[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80193728[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_801936CC; +extern u8 D_801936D8; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801936CC, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801936D8); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8016AB6C", func_8016DC20); + + +extern void (*D_8019375C[])(void); + +void func_8016DEA4(void *a0) { + D_8019375C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80193764[])(void); + +void func_8016DF20(void *a0) { + D_80193764[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_801937B8[])(void); + +void func_8016E5B8(void *a0) { + D_801937B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80193778[4]; + extern s32 D_80193798; + extern s32 D_801937A0; + extern s32 D_801937A8; + extern s32 D_801937B0; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80193778[0], pp, &tmp); + RotTransSV(&D_80193778[1], &prim.v[1], &tmp); + RotTransSV(&D_80193778[2], &prim.v[2], &tmp); + RotTransSV(&D_80193778[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80193798; + prim.f1 = D_801937A0; + prim.f2 = D_801937A8; + prim.f3 = D_801937B0; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_801937F8[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_801937F8[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_801937EC[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_801937EC[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_801937DC[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_801937DC[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801937EC[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_801937EC[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_801937EC[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80193808; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80193808; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80193880[])(void); + +void func_8016F6E0(void *a0) { + D_80193880[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80193888[])(void); + +void func_8016F798(void *a0) { + D_80193888[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80193890[])(void); + +void func_8016F834(void *a0) { + D_80193890[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80193898[])(void); + +void func_8016F8E4(void *a0) { + D_80193898[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_801938A0[])(void); + +void func_8016F9C4(void *a0) { + D_801938A0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_801938A8[])(void); + +void func_8016FA84(void *a0) { + D_801938A8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_801938B4[])(void); + +void func_8016FB7C(void *a0) { + D_801938B4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_801938C0[])(void); + +void func_8016FC90(void *a0) { + D_801938C0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_801938CC[])(void); + +void func_8016FDB4(void *a0) { + D_801938CC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_801938DC[])(void); + +void func_8016FF30(void *a0) { + D_801938DC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_801938EC[])(void); + +void func_8016FFDC(void *a0) { + D_801938EC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_801938F4[])(void); + +void func_80170150(void *a0) { + D_801938F4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_801938FC[])(void); + +void func_80170240(void *a0) { + D_801938FC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80193904[])(void); + +void func_801702FC(void *a0) { + D_80193904[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_8019390C[])(void); + +void func_801703E0(void *a0) { + D_8019390C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80193914[])(void); + +void func_801704B0(void *a0) { + D_80193914[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_8019391C[])(void); + +void func_80170548(void *a0) { + D_8019391C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80193924[])(void); + +void func_801705F8(void *a0) { + D_80193924[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_8019392C[])(void); + +void func_801706AC(void *a0) { + D_8019392C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80193934[])(void); + +void func_80170748(void *a0) { + D_80193934[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_8019393C[])(void); + +void func_80170810(void *a0) { + D_8019393C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80193944[])(void); + +void func_80170AD8(void *a0) { + D_80193944[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_8019394C[])(void); + +void func_80170BD8(void *a0) { + D_8019394C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80193954[])(void); + +void func_80170C74(void *a0) { + D_80193954[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8016AB6C", func_80170CF0); + + +extern void (*D_8019395C[])(void); + +void func_80170D68(void *a0) { + D_8019395C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80193964[])(void); + +void func_80170E34(void *a0) { + D_80193964[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_8019396C[])(void); + +void func_80170EFC(void *a0) { + D_8019396C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80193974[])(void); + +void func_80170FB0(void *a0) { + D_80193974[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_8019397C[])(void); + +void func_80171064(void *a0) { + D_8019397C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80193984[])(void); + +void func_80171120(void *a0) { + D_80193984[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_8019398C[])(void); + +void func_801711C0(void *a0) { + D_8019398C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80193994[])(void); + +void func_80171260(void *a0) { + D_80193994[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_8019399C[])(void); + +void func_801714E4(void *a0) { + D_8019399C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8016AB6C", func_80172C50); + + +extern void (*D_801939E0[])(void); + +void func_80172CA0(void *a0) { + D_801939E0[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_801939A4; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_801939A4); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC04_012/ov_SC04_012_jr_8015AE2C.c b/src/ov_SC04_012/ov_SC04_012_jr_8015AE2C.c index 9acc6c75f..8eac7c262 100644 --- a/src/ov_SC04_012/ov_SC04_012_jr_8015AE2C.c +++ b/src/ov_SC04_012/ov_SC04_012_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_8018176C[])(void); void func_8016AB30(void *a0) { D_8018176C[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_801817E8[])(void); - -void func_8016B4BC(void *a0) { - D_801817E8[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_80190F38; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_80190F38); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_801817DC[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_801817DC; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80181820[]; -extern unsigned short D_80181828[]; -extern unsigned short D_80181830[]; -extern unsigned char D_80190F40[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_80190F40 + param_2 * 0x40); - puVar3 = D_80181820[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80181828[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80181830[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_80190F38; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_80190F38, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80181838[])(void); - -void func_8016BBA4(void *a0) { - D_80181838[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_80191074; - extern u8 D_80191075; - extern u8 D_80191076; - extern M2C_UNK D_80191078; - extern u8 D_80191079; - extern u8 D_8019107A; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_80191074) = 0x20; - D_80191075 = 0x20; - D_80191076 = 0; - (*(u8 *)&D_80191078) = 0xc0; - D_80191079 = 0xc0; - D_8019107A = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_80191074; -extern M2C_UNK D_80191078; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_80191074, &D_80191078, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_80191075; - extern u8 D_80191076; - extern u8 D_80191079; - extern u8 D_8019107A; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_80191074); - if (*p1 != 0) *p1 -= 4; - if (D_80191075 != 0) D_80191075 -= 4; - if (D_80191076 != 0) D_80191076 -= 4; - p2 = &(*(u8 *)&D_80191078); - if (*p2 != 0) *p2 -= 4; - if (D_80191079 != 0) D_80191079 -= 4; - if (D_8019107A != 0) D_8019107A -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_80191074), &(*(int *)&D_80191078), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_80191000; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_80191000); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80181848; - extern s32 D_80181850; - extern s32 D_80181858; - extern s32 D_80181860; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80181848, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80181850, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80181858, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80181860, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80181868[])(void); - -void func_8016C14C(void *a0) { - D_80181868[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_8019107C[]; -extern u8 D_80191084[]; -extern u8 D_80191034[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_8019107C, D_80191084, D_80191034); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_80191090[]; - extern u8 D_80191150; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_80191090[1] = 0xff; - D_80191090[2] = 0x10; - D_80191090[0] = 0x10; - D_80191090[6] = 0; - D_80191090[5] = 0; - D_80191090[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_80191090, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_80191150, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_80191090); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8015AE2C", func_8016C998); - - -extern void (*D_80181870[])(void); - -void func_8016CB84(void *a0) { - D_80181870[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_80191150[]; - - - Blk_8016CF04_8016CF04 *p = &D_80191150[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_8018188C[])(void); - -void func_8016D19C(void *a0) { - D_8018188C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80181894[])(void); - -void func_8016D428(void *a0) { - D_80181894[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_801818FC[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_801818FC[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_801818A0; -extern u8 D_801818AC; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801818A0, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801818AC); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80181930[])(void); - -void func_8016DEA4(void *a0) { - D_80181930[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80181938[])(void); - -void func_8016DF20(void *a0) { - D_80181938[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_8018198C[])(void); - -void func_8016E5B8(void *a0) { - D_8018198C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_8018194C[4]; - extern s32 D_8018196C; - extern s32 D_80181974; - extern s32 D_8018197C; - extern s32 D_80181984; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_8018194C[0], pp, &tmp); - RotTransSV(&D_8018194C[1], &prim.v[1], &tmp); - RotTransSV(&D_8018194C[2], &prim.v[2], &tmp); - RotTransSV(&D_8018194C[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_8018196C; - prim.f1 = D_80181974; - prim.f2 = D_8018197C; - prim.f3 = D_80181984; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_801819CC[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_801819CC[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_801819C0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_801819C0[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_801819B0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_801819B0[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801819C0[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_801819C0[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_801819C0[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_801819DC; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_801819DC; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80181A54[])(void); - -void func_8016F6E0(void *a0) { - D_80181A54[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80181A5C[])(void); - -void func_8016F798(void *a0) { - D_80181A5C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80181A64[])(void); - -void func_8016F834(void *a0) { - D_80181A64[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80181A6C[])(void); - -void func_8016F8E4(void *a0) { - D_80181A6C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80181A74[])(void); - -void func_8016F9C4(void *a0) { - D_80181A74[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80181A7C[])(void); - -void func_8016FA84(void *a0) { - D_80181A7C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80181A88[])(void); - -void func_8016FB7C(void *a0) { - D_80181A88[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80181A94[])(void); - -void func_8016FC90(void *a0) { - D_80181A94[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80181AA0[])(void); - -void func_8016FDB4(void *a0) { - D_80181AA0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80181AB0[])(void); - -void func_8016FF30(void *a0) { - D_80181AB0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80181AC0[])(void); - -void func_8016FFDC(void *a0) { - D_80181AC0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80181AC8[])(void); - -void func_80170150(void *a0) { - D_80181AC8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80181AD0[])(void); - -void func_80170240(void *a0) { - D_80181AD0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80181AD8[])(void); - -void func_801702FC(void *a0) { - D_80181AD8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80181AE0[])(void); - -void func_801703E0(void *a0) { - D_80181AE0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80181AE8[])(void); - -void func_801704B0(void *a0) { - D_80181AE8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80181AF0[])(void); - -void func_80170548(void *a0) { - D_80181AF0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80181AF8[])(void); - -void func_801705F8(void *a0) { - D_80181AF8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80181B00[])(void); - -void func_801706AC(void *a0) { - D_80181B00[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80181B08[])(void); - -void func_80170748(void *a0) { - D_80181B08[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80181B10[])(void); - -void func_80170810(void *a0) { - D_80181B10[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80181B18[])(void); - -void func_80170AD8(void *a0) { - D_80181B18[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80181B20[])(void); - -void func_80170BD8(void *a0) { - D_80181B20[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80181B28[])(void); - -void func_80170C74(void *a0) { - D_80181B28[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80181B30[])(void); - -void func_80170D68(void *a0) { - D_80181B30[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80181B38[])(void); - -void func_80170E34(void *a0) { - D_80181B38[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80181B40[])(void); - -void func_80170EFC(void *a0) { - D_80181B40[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80181B48[])(void); - -void func_80170FB0(void *a0) { - D_80181B48[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80181B50[])(void); - -void func_80171064(void *a0) { - D_80181B50[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80181B58[])(void); - -void func_80171120(void *a0) { - D_80181B58[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80181B60[])(void); - -void func_801711C0(void *a0) { - D_80181B60[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80181B68[])(void); - -void func_80171260(void *a0) { - D_80181B68[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80181B70[])(void); - -void func_801714E4(void *a0) { - D_80181B70[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8015AE2C", func_80172C50); - - -extern void (*D_80181BB4[])(void); - -void func_80172CA0(void *a0) { - D_80181BB4[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80181B78; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80181B78); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC04_012/ov_SC04_012_jr_8016AB6C.c b/src/ov_SC04_012/ov_SC04_012_jr_8016AB6C.c new file mode 100644 index 000000000..7fb80f603 --- /dev/null +++ b/src/ov_SC04_012/ov_SC04_012_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80180B38; +extern u8 D_80180AA8; +extern u8 D_80180A84; +extern u8 D_80180A60; +extern u8 D_80180B14; +extern u8 D_80180AF0; +extern u8 D_80180ACC; +extern u8 D_80180A3C; +extern void func_80145934(void); +extern u8 D_80180BC8; +extern u8 D_80180BA4; +extern u8 D_80180B80; +extern u8 D_80180B5C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8017FFC0[]; +extern unsigned char D_8017FFF0[]; +extern unsigned char D_80180040[]; +extern unsigned char D_80180070[]; +extern unsigned char D_801800A0[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801800F0[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801801B8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80180240[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80180248; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_80190AC8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_80190ACC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80180278; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80180320[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80180344[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80180334; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80180358[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80180364[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80180374[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018038C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018037C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801803A0[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801803BC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801803AC; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801803D0[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801803E4[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801803F8; +extern void (*D_80180420[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80180400; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018046C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80180470[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_801808D4[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_801808E4[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_80190B00; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018090C[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801808EC; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_801808FC; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018094C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80180954[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80180920; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80180960[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80180930; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_80190B08; +extern s32 D_80190B14; +extern s32 D_80190B18; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018099C[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80180970[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_80190B10; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80180BEC[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80180A0C[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80180C90[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80180DE4[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80180C00; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80180DEC[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80180C10; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80180C30; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80180DF4[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80180E1C[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80180E28[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80180C9C[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80180ECC; +extern void func_8015D380(s32 a0); +extern unsigned char D_8017FFB0[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80180EE0[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80180F1C[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80180F64; +extern u16 D_80180F66; +extern u16 D_80180F68; +extern s32 D_80180F6C; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80180F74; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80180C80; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80180FF8[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_801810A8[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_801810D8[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_8018113C; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_80190B20[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80181160[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_80190B78[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_801811A8[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80181198; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801903EC[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_801811B0[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80181204[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_801811CC; +extern s16 D_80181200; +extern s16 D_801811FE; +extern s16 D_801811FC; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80181210[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_80190BD8; +extern u8 D_80190BD9; +extern u8 D_80190BDA; +extern u8 D_80190BDB; +extern u8 D_80190BDC; +extern u8 D_80190BDD; +extern u8 D_80190BDE; +extern u8 D_80190BDF; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80181220[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_80190C18; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80181264[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_801812E0[]; +extern s32 D_80181300[]; +extern u8 D_8018137C[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_8018139C[]; +extern u8 D_801813BC[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80181458[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_801814D4[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801903FC; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_801814E0[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_801814E8[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_801815B0[])(void); +extern void func_80166618(void *a0); +extern void (*D_801815C0[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_801815D0[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_801815DC[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_8018153C[]; +extern u8 D_80181550[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_801815F4[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_801815FC[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80181604[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_8018160C[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80181614[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_8018161C[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80181624[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_801816D8[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_801816E0[])(void); +extern void func_80169F00(void *a0); +extern char D_80181690[]; +extern char D_80181650[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80181718[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80181724[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_8018176C[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_8018172C[]; + extern u8 D_8018173C[]; + extern u8 D_80190EE8[]; + extern u8 D_80190F10[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_8018172C, D_80190EE8) + 3; + func_8001CE28(obj, D_80190EE8); + } else { + var_s3 = func_80024054(D_8018173C, D_80190F10) + 9; + func_8001CE28(obj, D_80190F10); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_801817E8[])(void); + +void func_8016B4BC(void *a0) { + D_801817E8[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_80190F38; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_80190F38); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_801817DC[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_801817DC; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80181820[]; +extern unsigned short D_80181828[]; +extern unsigned short D_80181830[]; +extern unsigned char D_80190F40[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_80190F40 + param_2 * 0x40); + puVar3 = D_80181820[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80181828[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80181830[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_80190F38; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_80190F38, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80181838[])(void); + +void func_8016BBA4(void *a0) { + D_80181838[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_80191074; + extern u8 D_80191075; + extern u8 D_80191076; + extern M2C_UNK D_80191078; + extern u8 D_80191079; + extern u8 D_8019107A; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_80191074) = 0x20; + D_80191075 = 0x20; + D_80191076 = 0; + (*(u8 *)&D_80191078) = 0xc0; + D_80191079 = 0xc0; + D_8019107A = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_80191074; +extern M2C_UNK D_80191078; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_80191074, &D_80191078, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_80191075; + extern u8 D_80191076; + extern u8 D_80191079; + extern u8 D_8019107A; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_80191074); + if (*p1 != 0) *p1 -= 4; + if (D_80191075 != 0) D_80191075 -= 4; + if (D_80191076 != 0) D_80191076 -= 4; + p2 = &(*(u8 *)&D_80191078); + if (*p2 != 0) *p2 -= 4; + if (D_80191079 != 0) D_80191079 -= 4; + if (D_8019107A != 0) D_8019107A -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_80191074), &(*(int *)&D_80191078), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_80191000; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_80191000); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80181848; + extern s32 D_80181850; + extern s32 D_80181858; + extern s32 D_80181860; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80181848, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80181850, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80181858, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80181860, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80181868[])(void); + +void func_8016C14C(void *a0) { + D_80181868[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_8019107C[]; +extern u8 D_80191084[]; +extern u8 D_80191034[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_8019107C, D_80191084, D_80191034); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_80191090[]; + extern u8 D_80191150; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_80191090[1] = 0xff; + D_80191090[2] = 0x10; + D_80191090[0] = 0x10; + D_80191090[6] = 0; + D_80191090[5] = 0; + D_80191090[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_80191090, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_80191150, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_80191090); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8016AB6C", func_8016C998); + + +extern void (*D_80181870[])(void); + +void func_8016CB84(void *a0) { + D_80181870[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_80191150[]; + + + Blk_8016CF04_8016CF04 *p = &D_80191150[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_8018188C[])(void); + +void func_8016D19C(void *a0) { + D_8018188C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80181894[])(void); + +void func_8016D428(void *a0) { + D_80181894[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_801818FC[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_801818FC[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_801818A0; +extern u8 D_801818AC; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801818A0, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801818AC); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80181930[])(void); + +void func_8016DEA4(void *a0) { + D_80181930[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80181938[])(void); + +void func_8016DF20(void *a0) { + D_80181938[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_8018198C[])(void); + +void func_8016E5B8(void *a0) { + D_8018198C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_8018194C[4]; + extern s32 D_8018196C; + extern s32 D_80181974; + extern s32 D_8018197C; + extern s32 D_80181984; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_8018194C[0], pp, &tmp); + RotTransSV(&D_8018194C[1], &prim.v[1], &tmp); + RotTransSV(&D_8018194C[2], &prim.v[2], &tmp); + RotTransSV(&D_8018194C[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_8018196C; + prim.f1 = D_80181974; + prim.f2 = D_8018197C; + prim.f3 = D_80181984; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_801819CC[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_801819CC[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_801819C0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_801819C0[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_801819B0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_801819B0[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801819C0[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_801819C0[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_801819C0[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_801819DC; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_801819DC; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80181A54[])(void); + +void func_8016F6E0(void *a0) { + D_80181A54[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80181A5C[])(void); + +void func_8016F798(void *a0) { + D_80181A5C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80181A64[])(void); + +void func_8016F834(void *a0) { + D_80181A64[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80181A6C[])(void); + +void func_8016F8E4(void *a0) { + D_80181A6C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80181A74[])(void); + +void func_8016F9C4(void *a0) { + D_80181A74[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80181A7C[])(void); + +void func_8016FA84(void *a0) { + D_80181A7C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80181A88[])(void); + +void func_8016FB7C(void *a0) { + D_80181A88[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80181A94[])(void); + +void func_8016FC90(void *a0) { + D_80181A94[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80181AA0[])(void); + +void func_8016FDB4(void *a0) { + D_80181AA0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80181AB0[])(void); + +void func_8016FF30(void *a0) { + D_80181AB0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80181AC0[])(void); + +void func_8016FFDC(void *a0) { + D_80181AC0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80181AC8[])(void); + +void func_80170150(void *a0) { + D_80181AC8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80181AD0[])(void); + +void func_80170240(void *a0) { + D_80181AD0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80181AD8[])(void); + +void func_801702FC(void *a0) { + D_80181AD8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80181AE0[])(void); + +void func_801703E0(void *a0) { + D_80181AE0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80181AE8[])(void); + +void func_801704B0(void *a0) { + D_80181AE8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80181AF0[])(void); + +void func_80170548(void *a0) { + D_80181AF0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80181AF8[])(void); + +void func_801705F8(void *a0) { + D_80181AF8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80181B00[])(void); + +void func_801706AC(void *a0) { + D_80181B00[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80181B08[])(void); + +void func_80170748(void *a0) { + D_80181B08[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80181B10[])(void); + +void func_80170810(void *a0) { + D_80181B10[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80181B18[])(void); + +void func_80170AD8(void *a0) { + D_80181B18[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80181B20[])(void); + +void func_80170BD8(void *a0) { + D_80181B20[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80181B28[])(void); + +void func_80170C74(void *a0) { + D_80181B28[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80181B30[])(void); + +void func_80170D68(void *a0) { + D_80181B30[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80181B38[])(void); + +void func_80170E34(void *a0) { + D_80181B38[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80181B40[])(void); + +void func_80170EFC(void *a0) { + D_80181B40[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80181B48[])(void); + +void func_80170FB0(void *a0) { + D_80181B48[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80181B50[])(void); + +void func_80171064(void *a0) { + D_80181B50[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80181B58[])(void); + +void func_80171120(void *a0) { + D_80181B58[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80181B60[])(void); + +void func_801711C0(void *a0) { + D_80181B60[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80181B68[])(void); + +void func_80171260(void *a0) { + D_80181B68[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80181B70[])(void); + +void func_801714E4(void *a0) { + D_80181B70[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8016AB6C", func_80172C50); + + +extern void (*D_80181BB4[])(void); + +void func_80172CA0(void *a0) { + D_80181BB4[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80181B78; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80181B78); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC04_015/ov_SC04_015_jr_8015AE2C.c b/src/ov_SC04_015/ov_SC04_015_jr_8015AE2C.c index dfdeb6954..314cdc6d9 100644 --- a/src/ov_SC04_015/ov_SC04_015_jr_8015AE2C.c +++ b/src/ov_SC04_015/ov_SC04_015_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_801876A4[])(void); void func_8016AB30(void *a0) { D_801876A4[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80187720[])(void); - -void func_8016B4BC(void *a0) { - D_80187720[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801C7C20; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801C7C20); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80187714[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80187714; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80187758[]; -extern unsigned short D_80187760[]; -extern unsigned short D_80187768[]; -extern unsigned char D_801C7C28[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801C7C28 + param_2 * 0x40); - puVar3 = D_80187758[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80187760[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80187768[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801C7C20; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801C7C20, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80187770[])(void); - -void func_8016BBA4(void *a0) { - D_80187770[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801C7D5C; - extern u8 D_801C7D5D; - extern u8 D_801C7D5E; - extern M2C_UNK D_801C7D60; - extern u8 D_801C7D61; - extern u8 D_801C7D62; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801C7D5C) = 0x20; - D_801C7D5D = 0x20; - D_801C7D5E = 0; - (*(u8 *)&D_801C7D60) = 0xc0; - D_801C7D61 = 0xc0; - D_801C7D62 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801C7D5C; -extern M2C_UNK D_801C7D60; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801C7D5C, &D_801C7D60, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801C7D5D; - extern u8 D_801C7D5E; - extern u8 D_801C7D61; - extern u8 D_801C7D62; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801C7D5C); - if (*p1 != 0) *p1 -= 4; - if (D_801C7D5D != 0) D_801C7D5D -= 4; - if (D_801C7D5E != 0) D_801C7D5E -= 4; - p2 = &(*(u8 *)&D_801C7D60); - if (*p2 != 0) *p2 -= 4; - if (D_801C7D61 != 0) D_801C7D61 -= 4; - if (D_801C7D62 != 0) D_801C7D62 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801C7D5C), &(*(int *)&D_801C7D60), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801C7CE8; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801C7CE8); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80187780; - extern s32 D_80187788; - extern s32 D_80187790; - extern s32 D_80187798; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80187780, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80187788, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80187790, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80187798, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_801877A0[])(void); - -void func_8016C14C(void *a0) { - D_801877A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801C7D64[]; -extern u8 D_801C7D6C[]; -extern u8 D_801C7D1C[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801C7D64, D_801C7D6C, D_801C7D1C); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801C7D78[]; - extern u8 D_801C7E38; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801C7D78[1] = 0xff; - D_801C7D78[2] = 0x10; - D_801C7D78[0] = 0x10; - D_801C7D78[6] = 0; - D_801C7D78[5] = 0; - D_801C7D78[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801C7D78, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801C7E38, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801C7D78); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8015AE2C", func_8016C998); - - -extern void (*D_801877A8[])(void); - -void func_8016CB84(void *a0) { - D_801877A8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801C7E38[]; - - - Blk_8016CF04_8016CF04 *p = &D_801C7E38[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_801877C4[])(void); - -void func_8016D19C(void *a0) { - D_801877C4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_801877CC[])(void); - -void func_8016D428(void *a0) { - D_801877CC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80187834[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80187834[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_801877D8; -extern u8 D_801877E4; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801877D8, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801877E4); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80187868[])(void); - -void func_8016DEA4(void *a0) { - D_80187868[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80187870[])(void); - -void func_8016DF20(void *a0) { - D_80187870[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_801878C4[])(void); - -void func_8016E5B8(void *a0) { - D_801878C4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80187884[4]; - extern s32 D_801878A4; - extern s32 D_801878AC; - extern s32 D_801878B4; - extern s32 D_801878BC; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80187884[0], pp, &tmp); - RotTransSV(&D_80187884[1], &prim.v[1], &tmp); - RotTransSV(&D_80187884[2], &prim.v[2], &tmp); - RotTransSV(&D_80187884[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_801878A4; - prim.f1 = D_801878AC; - prim.f2 = D_801878B4; - prim.f3 = D_801878BC; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80187904[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80187904[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_801878F8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_801878F8[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_801878E8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_801878E8[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801878F8[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_801878F8[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_801878F8[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80187914; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80187914; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_8018798C[])(void); - -void func_8016F6E0(void *a0) { - D_8018798C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80187994[])(void); - -void func_8016F798(void *a0) { - D_80187994[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_8018799C[])(void); - -void func_8016F834(void *a0) { - D_8018799C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_801879A4[])(void); - -void func_8016F8E4(void *a0) { - D_801879A4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_801879AC[])(void); - -void func_8016F9C4(void *a0) { - D_801879AC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_801879B4[])(void); - -void func_8016FA84(void *a0) { - D_801879B4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_801879C0[])(void); - -void func_8016FB7C(void *a0) { - D_801879C0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_801879CC[])(void); - -void func_8016FC90(void *a0) { - D_801879CC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_801879D8[])(void); - -void func_8016FDB4(void *a0) { - D_801879D8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_801879E8[])(void); - -void func_8016FF30(void *a0) { - D_801879E8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_801879F8[])(void); - -void func_8016FFDC(void *a0) { - D_801879F8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80187A00[])(void); - -void func_80170150(void *a0) { - D_80187A00[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80187A08[])(void); - -void func_80170240(void *a0) { - D_80187A08[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80187A10[])(void); - -void func_801702FC(void *a0) { - D_80187A10[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80187A18[])(void); - -void func_801703E0(void *a0) { - D_80187A18[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80187A20[])(void); - -void func_801704B0(void *a0) { - D_80187A20[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80187A28[])(void); - -void func_80170548(void *a0) { - D_80187A28[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80187A30[])(void); - -void func_801705F8(void *a0) { - D_80187A30[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80187A38[])(void); - -void func_801706AC(void *a0) { - D_80187A38[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80187A40[])(void); - -void func_80170748(void *a0) { - D_80187A40[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80187A48[])(void); - -void func_80170810(void *a0) { - D_80187A48[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80187A50[])(void); - -void func_80170AD8(void *a0) { - D_80187A50[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80187A58[])(void); - -void func_80170BD8(void *a0) { - D_80187A58[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80187A60[])(void); - -void func_80170C74(void *a0) { - D_80187A60[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80187A68[])(void); - -void func_80170D68(void *a0) { - D_80187A68[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80187A70[])(void); - -void func_80170E34(void *a0) { - D_80187A70[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80187A78[])(void); - -void func_80170EFC(void *a0) { - D_80187A78[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80187A80[])(void); - -void func_80170FB0(void *a0) { - D_80187A80[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80187A88[])(void); - -void func_80171064(void *a0) { - D_80187A88[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80187A90[])(void); - -void func_80171120(void *a0) { - D_80187A90[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80187A98[])(void); - -void func_801711C0(void *a0) { - D_80187A98[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80187AA0[])(void); - -void func_80171260(void *a0) { - D_80187AA0[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80187AA8[])(void); - -void func_801714E4(void *a0) { - D_80187AA8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8015AE2C", func_80172C50); - - -extern void (*D_80187AEC[])(void); - -void func_80172CA0(void *a0) { - D_80187AEC[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80187AB0; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80187AB0); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC04_015/ov_SC04_015_jr_8016AB6C.c b/src/ov_SC04_015/ov_SC04_015_jr_8016AB6C.c new file mode 100644 index 000000000..a50fbb7aa --- /dev/null +++ b/src/ov_SC04_015/ov_SC04_015_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80186A70; +extern u8 D_801869E0; +extern u8 D_801869BC; +extern u8 D_80186998; +extern u8 D_80186A4C; +extern u8 D_80186A28; +extern u8 D_80186A04; +extern u8 D_80186974; +extern void func_80145934(void); +extern u8 D_80186B00; +extern u8 D_80186ADC; +extern u8 D_80186AB8; +extern u8 D_80186A94; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80185EF8[]; +extern unsigned char D_80185F28[]; +extern unsigned char D_80185F78[]; +extern unsigned char D_80185FA8[]; +extern unsigned char D_80185FD8[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80186028[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801860F0[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80186178[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80186180; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801C77B0; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801C77B4; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801861B0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80186258[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018627C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018626C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80186290[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018629C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801862AC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801862C4[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801862B4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801862D8[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801862F4[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801862E4; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80186308[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018631C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80186330; +extern void (*D_80186358[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80186338; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801863A4[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801863A8[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018680C[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018681C[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801C77E8; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80186844[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80186824; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80186834; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80186884[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018688C[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80186858; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80186898[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80186868; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801C77F0; +extern s32 D_801C77FC; +extern s32 D_801C7800; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801868D4[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801868A8[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801C77F8; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80186B24[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80186944[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80186BC8[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80186D1C[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80186B38; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80186D24[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80186B48; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80186B68; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80186D2C[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80186D54[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80186D60[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80186BD4[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80186E04; +extern void func_8015D380(s32 a0); +extern unsigned char D_80185EE8[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80186E18[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80186E54[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80186E9C; +extern u16 D_80186E9E; +extern u16 D_80186EA0; +extern s32 D_80186EA4; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80186EAC; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80186BB8; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80186F30[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80186FE0[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80187010[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80187074; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801C7808[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80187098[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801C7860[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_801870E0[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_801870D0; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801C7084[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_801870E8[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_8018713C[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80187104; +extern s16 D_80187138; +extern s16 D_80187136; +extern s16 D_80187134; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80187148[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801C78C0; +extern u8 D_801C78C1; +extern u8 D_801C78C2; +extern u8 D_801C78C3; +extern u8 D_801C78C4; +extern u8 D_801C78C5; +extern u8 D_801C78C6; +extern u8 D_801C78C7; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80187158[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801C7900; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_8018719C[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80187218[]; +extern s32 D_80187238[]; +extern u8 D_801872B4[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_801872D4[]; +extern u8 D_801872F4[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80187390[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_8018740C[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801C7094; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80187418[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80187420[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_801874E8[])(void); +extern void func_80166618(void *a0); +extern void (*D_801874F8[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80187508[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80187514[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80187474[]; +extern u8 D_80187488[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_8018752C[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80187534[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_8018753C[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80187544[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_8018754C[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80187554[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_8018755C[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80187610[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80187618[])(void); +extern void func_80169F00(void *a0); +extern char D_801875C8[]; +extern char D_80187588[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80187650[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_8018765C[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_801876A4[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80187664[]; + extern u8 D_80187674[]; + extern u8 D_801C7BD0[]; + extern u8 D_801C7BF8[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80187664, D_801C7BD0) + 3; + func_8001CE28(obj, D_801C7BD0); + } else { + var_s3 = func_80024054(D_80187674, D_801C7BF8) + 9; + func_8001CE28(obj, D_801C7BF8); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80187720[])(void); + +void func_8016B4BC(void *a0) { + D_80187720[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801C7C20; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801C7C20); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80187714[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80187714; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80187758[]; +extern unsigned short D_80187760[]; +extern unsigned short D_80187768[]; +extern unsigned char D_801C7C28[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801C7C28 + param_2 * 0x40); + puVar3 = D_80187758[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80187760[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80187768[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801C7C20; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801C7C20, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80187770[])(void); + +void func_8016BBA4(void *a0) { + D_80187770[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801C7D5C; + extern u8 D_801C7D5D; + extern u8 D_801C7D5E; + extern M2C_UNK D_801C7D60; + extern u8 D_801C7D61; + extern u8 D_801C7D62; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801C7D5C) = 0x20; + D_801C7D5D = 0x20; + D_801C7D5E = 0; + (*(u8 *)&D_801C7D60) = 0xc0; + D_801C7D61 = 0xc0; + D_801C7D62 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801C7D5C; +extern M2C_UNK D_801C7D60; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801C7D5C, &D_801C7D60, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801C7D5D; + extern u8 D_801C7D5E; + extern u8 D_801C7D61; + extern u8 D_801C7D62; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801C7D5C); + if (*p1 != 0) *p1 -= 4; + if (D_801C7D5D != 0) D_801C7D5D -= 4; + if (D_801C7D5E != 0) D_801C7D5E -= 4; + p2 = &(*(u8 *)&D_801C7D60); + if (*p2 != 0) *p2 -= 4; + if (D_801C7D61 != 0) D_801C7D61 -= 4; + if (D_801C7D62 != 0) D_801C7D62 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801C7D5C), &(*(int *)&D_801C7D60), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801C7CE8; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801C7CE8); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80187780; + extern s32 D_80187788; + extern s32 D_80187790; + extern s32 D_80187798; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80187780, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80187788, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80187790, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80187798, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_801877A0[])(void); + +void func_8016C14C(void *a0) { + D_801877A0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801C7D64[]; +extern u8 D_801C7D6C[]; +extern u8 D_801C7D1C[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801C7D64, D_801C7D6C, D_801C7D1C); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801C7D78[]; + extern u8 D_801C7E38; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801C7D78[1] = 0xff; + D_801C7D78[2] = 0x10; + D_801C7D78[0] = 0x10; + D_801C7D78[6] = 0; + D_801C7D78[5] = 0; + D_801C7D78[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801C7D78, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801C7E38, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801C7D78); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8016AB6C", func_8016C998); + + +extern void (*D_801877A8[])(void); + +void func_8016CB84(void *a0) { + D_801877A8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801C7E38[]; + + + Blk_8016CF04_8016CF04 *p = &D_801C7E38[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_801877C4[])(void); + +void func_8016D19C(void *a0) { + D_801877C4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_801877CC[])(void); + +void func_8016D428(void *a0) { + D_801877CC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80187834[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80187834[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_801877D8; +extern u8 D_801877E4; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801877D8, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801877E4); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80187868[])(void); + +void func_8016DEA4(void *a0) { + D_80187868[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80187870[])(void); + +void func_8016DF20(void *a0) { + D_80187870[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_801878C4[])(void); + +void func_8016E5B8(void *a0) { + D_801878C4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80187884[4]; + extern s32 D_801878A4; + extern s32 D_801878AC; + extern s32 D_801878B4; + extern s32 D_801878BC; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80187884[0], pp, &tmp); + RotTransSV(&D_80187884[1], &prim.v[1], &tmp); + RotTransSV(&D_80187884[2], &prim.v[2], &tmp); + RotTransSV(&D_80187884[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_801878A4; + prim.f1 = D_801878AC; + prim.f2 = D_801878B4; + prim.f3 = D_801878BC; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80187904[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80187904[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_801878F8[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_801878F8[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_801878E8[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_801878E8[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801878F8[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_801878F8[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_801878F8[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80187914; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80187914; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_8018798C[])(void); + +void func_8016F6E0(void *a0) { + D_8018798C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80187994[])(void); + +void func_8016F798(void *a0) { + D_80187994[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_8018799C[])(void); + +void func_8016F834(void *a0) { + D_8018799C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_801879A4[])(void); + +void func_8016F8E4(void *a0) { + D_801879A4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_801879AC[])(void); + +void func_8016F9C4(void *a0) { + D_801879AC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_801879B4[])(void); + +void func_8016FA84(void *a0) { + D_801879B4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_801879C0[])(void); + +void func_8016FB7C(void *a0) { + D_801879C0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_801879CC[])(void); + +void func_8016FC90(void *a0) { + D_801879CC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_801879D8[])(void); + +void func_8016FDB4(void *a0) { + D_801879D8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_801879E8[])(void); + +void func_8016FF30(void *a0) { + D_801879E8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_801879F8[])(void); + +void func_8016FFDC(void *a0) { + D_801879F8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80187A00[])(void); + +void func_80170150(void *a0) { + D_80187A00[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80187A08[])(void); + +void func_80170240(void *a0) { + D_80187A08[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80187A10[])(void); + +void func_801702FC(void *a0) { + D_80187A10[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80187A18[])(void); + +void func_801703E0(void *a0) { + D_80187A18[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80187A20[])(void); + +void func_801704B0(void *a0) { + D_80187A20[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80187A28[])(void); + +void func_80170548(void *a0) { + D_80187A28[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80187A30[])(void); + +void func_801705F8(void *a0) { + D_80187A30[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80187A38[])(void); + +void func_801706AC(void *a0) { + D_80187A38[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80187A40[])(void); + +void func_80170748(void *a0) { + D_80187A40[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80187A48[])(void); + +void func_80170810(void *a0) { + D_80187A48[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80187A50[])(void); + +void func_80170AD8(void *a0) { + D_80187A50[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80187A58[])(void); + +void func_80170BD8(void *a0) { + D_80187A58[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80187A60[])(void); + +void func_80170C74(void *a0) { + D_80187A60[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80187A68[])(void); + +void func_80170D68(void *a0) { + D_80187A68[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80187A70[])(void); + +void func_80170E34(void *a0) { + D_80187A70[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80187A78[])(void); + +void func_80170EFC(void *a0) { + D_80187A78[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80187A80[])(void); + +void func_80170FB0(void *a0) { + D_80187A80[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80187A88[])(void); + +void func_80171064(void *a0) { + D_80187A88[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80187A90[])(void); + +void func_80171120(void *a0) { + D_80187A90[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80187A98[])(void); + +void func_801711C0(void *a0) { + D_80187A98[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80187AA0[])(void); + +void func_80171260(void *a0) { + D_80187AA0[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80187AA8[])(void); + +void func_801714E4(void *a0) { + D_80187AA8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8016AB6C", func_80172C50); + + +extern void (*D_80187AEC[])(void); + +void func_80172CA0(void *a0) { + D_80187AEC[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80187AB0; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80187AB0); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC04_016/ov_SC04_016_jr_8015AE2C.c b/src/ov_SC04_016/ov_SC04_016_jr_8015AE2C.c index ec8589994..35cecf4d5 100644 --- a/src/ov_SC04_016/ov_SC04_016_jr_8015AE2C.c +++ b/src/ov_SC04_016/ov_SC04_016_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_80183168[])(void); void func_8016AB30(void *a0) { D_80183168[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_801831E4[])(void); - -void func_8016B4BC(void *a0) { - D_801831E4[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801A5DC8; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801A5DC8); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_801831D8[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_801831D8; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_8018321C[]; -extern unsigned short D_80183224[]; -extern unsigned short D_8018322C[]; -extern unsigned char D_801A5DD0[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801A5DD0 + param_2 * 0x40); - puVar3 = D_8018321C[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80183224[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_8018322C[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801A5DC8; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801A5DC8, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80183234[])(void); - -void func_8016BBA4(void *a0) { - D_80183234[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801A5F04; - extern u8 D_801A5F05; - extern u8 D_801A5F06; - extern M2C_UNK D_801A5F08; - extern u8 D_801A5F09; - extern u8 D_801A5F0A; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801A5F04) = 0x20; - D_801A5F05 = 0x20; - D_801A5F06 = 0; - (*(u8 *)&D_801A5F08) = 0xc0; - D_801A5F09 = 0xc0; - D_801A5F0A = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801A5F04; -extern M2C_UNK D_801A5F08; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801A5F04, &D_801A5F08, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801A5F05; - extern u8 D_801A5F06; - extern u8 D_801A5F09; - extern u8 D_801A5F0A; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801A5F04); - if (*p1 != 0) *p1 -= 4; - if (D_801A5F05 != 0) D_801A5F05 -= 4; - if (D_801A5F06 != 0) D_801A5F06 -= 4; - p2 = &(*(u8 *)&D_801A5F08); - if (*p2 != 0) *p2 -= 4; - if (D_801A5F09 != 0) D_801A5F09 -= 4; - if (D_801A5F0A != 0) D_801A5F0A -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801A5F04), &(*(int *)&D_801A5F08), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801A5E90; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801A5E90); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80183244; - extern s32 D_8018324C; - extern s32 D_80183254; - extern s32 D_8018325C; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80183244, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_8018324C, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80183254, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_8018325C, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80183264[])(void); - -void func_8016C14C(void *a0) { - D_80183264[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801A5F0C[]; -extern u8 D_801A5F14[]; -extern u8 D_801A5EC4[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801A5F0C, D_801A5F14, D_801A5EC4); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801A5F20[]; - extern u8 D_801A5FE0; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801A5F20[1] = 0xff; - D_801A5F20[2] = 0x10; - D_801A5F20[0] = 0x10; - D_801A5F20[6] = 0; - D_801A5F20[5] = 0; - D_801A5F20[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801A5F20, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801A5FE0, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801A5F20); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8015AE2C", func_8016C998); - - -extern void (*D_8018326C[])(void); - -void func_8016CB84(void *a0) { - D_8018326C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801A5FE0[]; - - - Blk_8016CF04_8016CF04 *p = &D_801A5FE0[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80183288[])(void); - -void func_8016D19C(void *a0) { - D_80183288[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80183290[])(void); - -void func_8016D428(void *a0) { - D_80183290[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_801832F8[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_801832F8[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_8018329C; -extern u8 D_801832A8; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018329C, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801832A8); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8015AE2C", func_8016DC20); - - -extern void (*D_8018332C[])(void); - -void func_8016DEA4(void *a0) { - D_8018332C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80183334[])(void); - -void func_8016DF20(void *a0) { - D_80183334[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80183388[])(void); - -void func_8016E5B8(void *a0) { - D_80183388[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80183348[4]; - extern s32 D_80183368; - extern s32 D_80183370; - extern s32 D_80183378; - extern s32 D_80183380; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80183348[0], pp, &tmp); - RotTransSV(&D_80183348[1], &prim.v[1], &tmp); - RotTransSV(&D_80183348[2], &prim.v[2], &tmp); - RotTransSV(&D_80183348[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80183368; - prim.f1 = D_80183370; - prim.f2 = D_80183378; - prim.f3 = D_80183380; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_801833C8[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_801833C8[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_801833BC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_801833BC[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_801833AC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_801833AC[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801833BC[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_801833BC[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_801833BC[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_801833D8; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_801833D8; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80183450[])(void); - -void func_8016F6E0(void *a0) { - D_80183450[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80183458[])(void); - -void func_8016F798(void *a0) { - D_80183458[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80183460[])(void); - -void func_8016F834(void *a0) { - D_80183460[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80183468[])(void); - -void func_8016F8E4(void *a0) { - D_80183468[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80183470[])(void); - -void func_8016F9C4(void *a0) { - D_80183470[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80183478[])(void); - -void func_8016FA84(void *a0) { - D_80183478[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80183484[])(void); - -void func_8016FB7C(void *a0) { - D_80183484[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80183490[])(void); - -void func_8016FC90(void *a0) { - D_80183490[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_8018349C[])(void); - -void func_8016FDB4(void *a0) { - D_8018349C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_801834AC[])(void); - -void func_8016FF30(void *a0) { - D_801834AC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_801834BC[])(void); - -void func_8016FFDC(void *a0) { - D_801834BC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_801834C4[])(void); - -void func_80170150(void *a0) { - D_801834C4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_801834CC[])(void); - -void func_80170240(void *a0) { - D_801834CC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_801834D4[])(void); - -void func_801702FC(void *a0) { - D_801834D4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_801834DC[])(void); - -void func_801703E0(void *a0) { - D_801834DC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_801834E4[])(void); - -void func_801704B0(void *a0) { - D_801834E4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_801834EC[])(void); - -void func_80170548(void *a0) { - D_801834EC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_801834F4[])(void); - -void func_801705F8(void *a0) { - D_801834F4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_801834FC[])(void); - -void func_801706AC(void *a0) { - D_801834FC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80183504[])(void); - -void func_80170748(void *a0) { - D_80183504[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_8018350C[])(void); - -void func_80170810(void *a0) { - D_8018350C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80183514[])(void); - -void func_80170AD8(void *a0) { - D_80183514[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_8018351C[])(void); - -void func_80170BD8(void *a0) { - D_8018351C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80183524[])(void); - -void func_80170C74(void *a0) { - D_80183524[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8015AE2C", func_80170CF0); - - -extern void (*D_8018352C[])(void); - -void func_80170D68(void *a0) { - D_8018352C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80183534[])(void); - -void func_80170E34(void *a0) { - D_80183534[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_8018353C[])(void); - -void func_80170EFC(void *a0) { - D_8018353C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80183544[])(void); - -void func_80170FB0(void *a0) { - D_80183544[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_8018354C[])(void); - -void func_80171064(void *a0) { - D_8018354C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80183554[])(void); - -void func_80171120(void *a0) { - D_80183554[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_8018355C[])(void); - -void func_801711C0(void *a0) { - D_8018355C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80183564[])(void); - -void func_80171260(void *a0) { - D_80183564[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_8018356C[])(void); - -void func_801714E4(void *a0) { - D_8018356C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8015AE2C", func_80172C50); - - -extern void (*D_801835B0[])(void); - -void func_80172CA0(void *a0) { - D_801835B0[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80183574; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80183574); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC04_016/ov_SC04_016_jr_8016AB6C.c b/src/ov_SC04_016/ov_SC04_016_jr_8016AB6C.c new file mode 100644 index 000000000..c50a283e8 --- /dev/null +++ b/src/ov_SC04_016/ov_SC04_016_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80182534; +extern u8 D_801824A4; +extern u8 D_80182480; +extern u8 D_8018245C; +extern u8 D_80182510; +extern u8 D_801824EC; +extern u8 D_801824C8; +extern u8 D_80182438; +extern void func_80145934(void); +extern u8 D_801825C4; +extern u8 D_801825A0; +extern u8 D_8018257C; +extern u8 D_80182558; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801819BC[]; +extern unsigned char D_801819EC[]; +extern unsigned char D_80181A3C[]; +extern unsigned char D_80181A6C[]; +extern unsigned char D_80181A9C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80181AEC[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80181BB4[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80181C3C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80181C44; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801A5958; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801A595C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80181C74; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80181D1C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80181D40[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80181D30; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80181D54[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80181D60[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80181D70[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80181D88[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80181D78; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80181D9C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80181DB8[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80181DA8; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80181DCC[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80181DE0[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80181DF4; +extern void (*D_80181E1C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80181DFC; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80181E68[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80181E6C[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_801822D0[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_801822E0[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801A5990; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80182308[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801822E8; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_801822F8; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80182348[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80182350[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018231C; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018235C[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018232C; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801A5998; +extern s32 D_801A59A4; +extern s32 D_801A59A8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80182398[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018236C[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801A59A0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_801825E8[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80182408[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018268C[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_801827E0[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_801825FC; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_801827E8[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018260C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018262C; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_801827F0[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80182818[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80182824[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80182698[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_801828C8; +extern void func_8015D380(s32 a0); +extern unsigned char D_801819AC[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_801828DC[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80182918[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80182960; +extern u16 D_80182962; +extern u16 D_80182964; +extern s32 D_80182968; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80182970; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_8018267C; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_801829F4[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80182AA4[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80182AD4[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80182B38; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801A59B0[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80182B5C[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801A5A08[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80182BA4[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80182B94; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801A523C[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80182BAC[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80182C00[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80182BC8; +extern s16 D_80182BFC; +extern s16 D_80182BFA; +extern s16 D_80182BF8; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80182C0C[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801A5A68; +extern u8 D_801A5A69; +extern u8 D_801A5A6A; +extern u8 D_801A5A6B; +extern u8 D_801A5A6C; +extern u8 D_801A5A6D; +extern u8 D_801A5A6E; +extern u8 D_801A5A6F; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80182C1C[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801A5AA8; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80182C60[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80182CDC[]; +extern s32 D_80182CFC[]; +extern u8 D_80182D78[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80182D98[]; +extern u8 D_80182DB8[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80182E54[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80182ED0[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801A524C; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80182EDC[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80182EE4[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80182FAC[])(void); +extern void func_80166618(void *a0); +extern void (*D_80182FBC[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80182FCC[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80182FD8[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80182F38[]; +extern u8 D_80182F4C[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80182FF0[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80182FF8[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80183000[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80183008[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80183010[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80183018[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80183020[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_801830D4[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_801830DC[])(void); +extern void func_80169F00(void *a0); +extern char D_8018308C[]; +extern char D_8018304C[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80183114[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80183120[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80183168[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80183128[]; + extern u8 D_80183138[]; + extern u8 D_801A5D78[]; + extern u8 D_801A5DA0[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80183128, D_801A5D78) + 3; + func_8001CE28(obj, D_801A5D78); + } else { + var_s3 = func_80024054(D_80183138, D_801A5DA0) + 9; + func_8001CE28(obj, D_801A5DA0); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_801831E4[])(void); + +void func_8016B4BC(void *a0) { + D_801831E4[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801A5DC8; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801A5DC8); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_801831D8[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_801831D8; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_8018321C[]; +extern unsigned short D_80183224[]; +extern unsigned short D_8018322C[]; +extern unsigned char D_801A5DD0[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801A5DD0 + param_2 * 0x40); + puVar3 = D_8018321C[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80183224[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_8018322C[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801A5DC8; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801A5DC8, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80183234[])(void); + +void func_8016BBA4(void *a0) { + D_80183234[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801A5F04; + extern u8 D_801A5F05; + extern u8 D_801A5F06; + extern M2C_UNK D_801A5F08; + extern u8 D_801A5F09; + extern u8 D_801A5F0A; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801A5F04) = 0x20; + D_801A5F05 = 0x20; + D_801A5F06 = 0; + (*(u8 *)&D_801A5F08) = 0xc0; + D_801A5F09 = 0xc0; + D_801A5F0A = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801A5F04; +extern M2C_UNK D_801A5F08; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801A5F04, &D_801A5F08, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801A5F05; + extern u8 D_801A5F06; + extern u8 D_801A5F09; + extern u8 D_801A5F0A; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801A5F04); + if (*p1 != 0) *p1 -= 4; + if (D_801A5F05 != 0) D_801A5F05 -= 4; + if (D_801A5F06 != 0) D_801A5F06 -= 4; + p2 = &(*(u8 *)&D_801A5F08); + if (*p2 != 0) *p2 -= 4; + if (D_801A5F09 != 0) D_801A5F09 -= 4; + if (D_801A5F0A != 0) D_801A5F0A -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801A5F04), &(*(int *)&D_801A5F08), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801A5E90; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801A5E90); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80183244; + extern s32 D_8018324C; + extern s32 D_80183254; + extern s32 D_8018325C; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80183244, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_8018324C, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80183254, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_8018325C, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80183264[])(void); + +void func_8016C14C(void *a0) { + D_80183264[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801A5F0C[]; +extern u8 D_801A5F14[]; +extern u8 D_801A5EC4[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801A5F0C, D_801A5F14, D_801A5EC4); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801A5F20[]; + extern u8 D_801A5FE0; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801A5F20[1] = 0xff; + D_801A5F20[2] = 0x10; + D_801A5F20[0] = 0x10; + D_801A5F20[6] = 0; + D_801A5F20[5] = 0; + D_801A5F20[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801A5F20, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801A5FE0, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801A5F20); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8016AB6C", func_8016C998); + + +extern void (*D_8018326C[])(void); + +void func_8016CB84(void *a0) { + D_8018326C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801A5FE0[]; + + + Blk_8016CF04_8016CF04 *p = &D_801A5FE0[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80183288[])(void); + +void func_8016D19C(void *a0) { + D_80183288[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80183290[])(void); + +void func_8016D428(void *a0) { + D_80183290[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_801832F8[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_801832F8[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_8018329C; +extern u8 D_801832A8; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018329C, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801832A8); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8016AB6C", func_8016DC20); + + +extern void (*D_8018332C[])(void); + +void func_8016DEA4(void *a0) { + D_8018332C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80183334[])(void); + +void func_8016DF20(void *a0) { + D_80183334[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80183388[])(void); + +void func_8016E5B8(void *a0) { + D_80183388[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80183348[4]; + extern s32 D_80183368; + extern s32 D_80183370; + extern s32 D_80183378; + extern s32 D_80183380; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80183348[0], pp, &tmp); + RotTransSV(&D_80183348[1], &prim.v[1], &tmp); + RotTransSV(&D_80183348[2], &prim.v[2], &tmp); + RotTransSV(&D_80183348[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80183368; + prim.f1 = D_80183370; + prim.f2 = D_80183378; + prim.f3 = D_80183380; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_801833C8[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_801833C8[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_801833BC[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_801833BC[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_801833AC[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_801833AC[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801833BC[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_801833BC[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_801833BC[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_801833D8; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_801833D8; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80183450[])(void); + +void func_8016F6E0(void *a0) { + D_80183450[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80183458[])(void); + +void func_8016F798(void *a0) { + D_80183458[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80183460[])(void); + +void func_8016F834(void *a0) { + D_80183460[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80183468[])(void); + +void func_8016F8E4(void *a0) { + D_80183468[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80183470[])(void); + +void func_8016F9C4(void *a0) { + D_80183470[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80183478[])(void); + +void func_8016FA84(void *a0) { + D_80183478[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80183484[])(void); + +void func_8016FB7C(void *a0) { + D_80183484[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80183490[])(void); + +void func_8016FC90(void *a0) { + D_80183490[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_8018349C[])(void); + +void func_8016FDB4(void *a0) { + D_8018349C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_801834AC[])(void); + +void func_8016FF30(void *a0) { + D_801834AC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_801834BC[])(void); + +void func_8016FFDC(void *a0) { + D_801834BC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_801834C4[])(void); + +void func_80170150(void *a0) { + D_801834C4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_801834CC[])(void); + +void func_80170240(void *a0) { + D_801834CC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_801834D4[])(void); + +void func_801702FC(void *a0) { + D_801834D4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_801834DC[])(void); + +void func_801703E0(void *a0) { + D_801834DC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_801834E4[])(void); + +void func_801704B0(void *a0) { + D_801834E4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_801834EC[])(void); + +void func_80170548(void *a0) { + D_801834EC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_801834F4[])(void); + +void func_801705F8(void *a0) { + D_801834F4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_801834FC[])(void); + +void func_801706AC(void *a0) { + D_801834FC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80183504[])(void); + +void func_80170748(void *a0) { + D_80183504[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_8018350C[])(void); + +void func_80170810(void *a0) { + D_8018350C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80183514[])(void); + +void func_80170AD8(void *a0) { + D_80183514[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_8018351C[])(void); + +void func_80170BD8(void *a0) { + D_8018351C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80183524[])(void); + +void func_80170C74(void *a0) { + D_80183524[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8016AB6C", func_80170CF0); + + +extern void (*D_8018352C[])(void); + +void func_80170D68(void *a0) { + D_8018352C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80183534[])(void); + +void func_80170E34(void *a0) { + D_80183534[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_8018353C[])(void); + +void func_80170EFC(void *a0) { + D_8018353C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80183544[])(void); + +void func_80170FB0(void *a0) { + D_80183544[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_8018354C[])(void); + +void func_80171064(void *a0) { + D_8018354C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80183554[])(void); + +void func_80171120(void *a0) { + D_80183554[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_8018355C[])(void); + +void func_801711C0(void *a0) { + D_8018355C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80183564[])(void); + +void func_80171260(void *a0) { + D_80183564[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_8018356C[])(void); + +void func_801714E4(void *a0) { + D_8018356C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8016AB6C", func_80172C50); + + +extern void (*D_801835B0[])(void); + +void func_80172CA0(void *a0) { + D_801835B0[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80183574; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80183574); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC04_018/ov_SC04_018_jr_8015AE2C.c b/src/ov_SC04_018/ov_SC04_018_jr_8015AE2C.c index b071b45c6..de5a16107 100644 --- a/src/ov_SC04_018/ov_SC04_018_jr_8015AE2C.c +++ b/src/ov_SC04_018/ov_SC04_018_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_80190380[])(void); void func_8016AB30(void *a0) { D_80190380[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_801903FC[])(void); - -void func_8016B4BC(void *a0) { - D_801903FC[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801E6018; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801E6018); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_801903F0[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_801903F0; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80190434[]; -extern unsigned short D_8019043C[]; -extern unsigned short D_80190444[]; -extern unsigned char D_801E6020[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801E6020 + param_2 * 0x40); - puVar3 = D_80190434[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_8019043C[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80190444[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801E6018; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801E6018, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_8019044C[])(void); - -void func_8016BBA4(void *a0) { - D_8019044C[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801E6154; - extern u8 D_801E6155; - extern u8 D_801E6156; - extern M2C_UNK D_801E6158; - extern u8 D_801E6159; - extern u8 D_801E615A; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801E6154) = 0x20; - D_801E6155 = 0x20; - D_801E6156 = 0; - (*(u8 *)&D_801E6158) = 0xc0; - D_801E6159 = 0xc0; - D_801E615A = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801E6154; -extern M2C_UNK D_801E6158; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801E6154, &D_801E6158, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801E6155; - extern u8 D_801E6156; - extern u8 D_801E6159; - extern u8 D_801E615A; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801E6154); - if (*p1 != 0) *p1 -= 4; - if (D_801E6155 != 0) D_801E6155 -= 4; - if (D_801E6156 != 0) D_801E6156 -= 4; - p2 = &(*(u8 *)&D_801E6158); - if (*p2 != 0) *p2 -= 4; - if (D_801E6159 != 0) D_801E6159 -= 4; - if (D_801E615A != 0) D_801E615A -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801E6154), &(*(int *)&D_801E6158), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801E60E0; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801E60E0); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_8019045C; - extern s32 D_80190464; - extern s32 D_8019046C; - extern s32 D_80190474; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_8019045C, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80190464, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_8019046C, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80190474, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_8019047C[])(void); - -void func_8016C14C(void *a0) { - D_8019047C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801E615C[]; -extern u8 D_801E6164[]; -extern u8 D_801E6114[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801E615C, D_801E6164, D_801E6114); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801E6170[]; - extern u8 D_801E6230; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801E6170[1] = 0xff; - D_801E6170[2] = 0x10; - D_801E6170[0] = 0x10; - D_801E6170[6] = 0; - D_801E6170[5] = 0; - D_801E6170[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801E6170, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801E6230, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801E6170); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8015AE2C", func_8016C998); - - -extern void (*D_80190484[])(void); - -void func_8016CB84(void *a0) { - D_80190484[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801E6230[]; - - - Blk_8016CF04_8016CF04 *p = &D_801E6230[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_801904A0[])(void); - -void func_8016D19C(void *a0) { - D_801904A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_801904A8[])(void); - -void func_8016D428(void *a0) { - D_801904A8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80190510[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80190510[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_801904B4; -extern u8 D_801904C0; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801904B4, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801904C0); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80190544[])(void); - -void func_8016DEA4(void *a0) { - D_80190544[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_8019054C[])(void); - -void func_8016DF20(void *a0) { - D_8019054C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_801905A0[])(void); - -void func_8016E5B8(void *a0) { - D_801905A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80190560[4]; - extern s32 D_80190580; - extern s32 D_80190588; - extern s32 D_80190590; - extern s32 D_80190598; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80190560[0], pp, &tmp); - RotTransSV(&D_80190560[1], &prim.v[1], &tmp); - RotTransSV(&D_80190560[2], &prim.v[2], &tmp); - RotTransSV(&D_80190560[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80190580; - prim.f1 = D_80190588; - prim.f2 = D_80190590; - prim.f3 = D_80190598; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_801905E0[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_801905E0[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_801905D4[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_801905D4[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_801905C4[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_801905C4[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801905D4[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_801905D4[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_801905D4[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_801905F0; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_801905F0; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80190668[])(void); - -void func_8016F6E0(void *a0) { - D_80190668[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80190670[])(void); - -void func_8016F798(void *a0) { - D_80190670[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80190678[])(void); - -void func_8016F834(void *a0) { - D_80190678[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80190680[])(void); - -void func_8016F8E4(void *a0) { - D_80190680[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80190688[])(void); - -void func_8016F9C4(void *a0) { - D_80190688[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80190690[])(void); - -void func_8016FA84(void *a0) { - D_80190690[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_8019069C[])(void); - -void func_8016FB7C(void *a0) { - D_8019069C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_801906A8[])(void); - -void func_8016FC90(void *a0) { - D_801906A8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_801906B4[])(void); - -void func_8016FDB4(void *a0) { - D_801906B4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_801906C4[])(void); - -void func_8016FF30(void *a0) { - D_801906C4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_801906D4[])(void); - -void func_8016FFDC(void *a0) { - D_801906D4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_801906DC[])(void); - -void func_80170150(void *a0) { - D_801906DC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_801906E4[])(void); - -void func_80170240(void *a0) { - D_801906E4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_801906EC[])(void); - -void func_801702FC(void *a0) { - D_801906EC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_801906F4[])(void); - -void func_801703E0(void *a0) { - D_801906F4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_801906FC[])(void); - -void func_801704B0(void *a0) { - D_801906FC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80190704[])(void); - -void func_80170548(void *a0) { - D_80190704[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_8019070C[])(void); - -void func_801705F8(void *a0) { - D_8019070C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80190714[])(void); - -void func_801706AC(void *a0) { - D_80190714[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_8019071C[])(void); - -void func_80170748(void *a0) { - D_8019071C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80190724[])(void); - -void func_80170810(void *a0) { - D_80190724[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_8019072C[])(void); - -void func_80170AD8(void *a0) { - D_8019072C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80190734[])(void); - -void func_80170BD8(void *a0) { - D_80190734[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_8019073C[])(void); - -void func_80170C74(void *a0) { - D_8019073C[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80190744[])(void); - -void func_80170D68(void *a0) { - D_80190744[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_8019074C[])(void); - -void func_80170E34(void *a0) { - D_8019074C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80190754[])(void); - -void func_80170EFC(void *a0) { - D_80190754[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_8019075C[])(void); - -void func_80170FB0(void *a0) { - D_8019075C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80190764[])(void); - -void func_80171064(void *a0) { - D_80190764[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_8019076C[])(void); - -void func_80171120(void *a0) { - D_8019076C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80190774[])(void); - -void func_801711C0(void *a0) { - D_80190774[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_8019077C[])(void); - -void func_80171260(void *a0) { - D_8019077C[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80190784[])(void); - -void func_801714E4(void *a0) { - D_80190784[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8015AE2C", func_80172C50); - - -extern void (*D_801907C8[])(void); - -void func_80172CA0(void *a0) { - D_801907C8[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_8019078C; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_8019078C); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC04_018/ov_SC04_018_jr_8016AB6C.c b/src/ov_SC04_018/ov_SC04_018_jr_8016AB6C.c new file mode 100644 index 000000000..adaf481bc --- /dev/null +++ b/src/ov_SC04_018/ov_SC04_018_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018F74C; +extern u8 D_8018F6BC; +extern u8 D_8018F698; +extern u8 D_8018F674; +extern u8 D_8018F728; +extern u8 D_8018F704; +extern u8 D_8018F6E0; +extern u8 D_8018F650; +extern void func_80145934(void); +extern u8 D_8018F7DC; +extern u8 D_8018F7B8; +extern u8 D_8018F794; +extern u8 D_8018F770; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018EBD4[]; +extern unsigned char D_8018EC04[]; +extern unsigned char D_8018EC54[]; +extern unsigned char D_8018EC84[]; +extern unsigned char D_8018ECB4[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018ED04[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018EDCC[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018EE54[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018EE5C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801E5BA8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801E5BAC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018EE8C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018EF34[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018EF58[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018EF48; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018EF6C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018EF78[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018EF88[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018EFA0[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018EF90; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018EFB4[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018EFD0[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018EFC0; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018EFE4[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018EFF8[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018F00C; +extern void (*D_8018F034[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018F014; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018F080[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018F084[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018F4E8[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018F4F8[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801E5BE0; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018F520[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018F500; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018F510; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018F560[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018F568[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018F534; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018F574[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018F544; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801E5BE8; +extern s32 D_801E5BF4; +extern s32 D_801E5BF8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018F5B0[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018F584[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801E5BF0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018F800[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018F620[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018F8A4[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018F9F8[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018F814; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018FA00[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018F824; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018F844; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_8018FA08[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_8018FA30[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_8018FA3C[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_8018F8B0[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_8018FAE0; +extern void func_8015D380(s32 a0); +extern unsigned char D_8018EBC4[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_8018FAF4[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_8018FB30[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_8018FB78; +extern u16 D_8018FB7A; +extern u16 D_8018FB7C; +extern s32 D_8018FB80; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_8018FB88; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_8018F894; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_8018FC0C[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_8018FCBC[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_8018FCEC[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_8018FD50; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801E5C00[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_8018FD74[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801E5C58[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_8018FDBC[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_8018FDAC; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801E5054[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_8018FDC4[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_8018FE18[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_8018FDE0; +extern s16 D_8018FE14; +extern s16 D_8018FE12; +extern s16 D_8018FE10; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_8018FE24[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801E5CB8; +extern u8 D_801E5CB9; +extern u8 D_801E5CBA; +extern u8 D_801E5CBB; +extern u8 D_801E5CBC; +extern u8 D_801E5CBD; +extern u8 D_801E5CBE; +extern u8 D_801E5CBF; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_8018FE34[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801E5CF8; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_8018FE78[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_8018FEF4[]; +extern s32 D_8018FF14[]; +extern u8 D_8018FF90[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_8018FFB0[]; +extern u8 D_8018FFD0[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_8019006C[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_801900E8[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801E5064; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_801900F4[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_801900FC[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_801901C4[])(void); +extern void func_80166618(void *a0); +extern void (*D_801901D4[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_801901E4[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_801901F0[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80190150[]; +extern u8 D_80190164[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80190208[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80190210[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80190218[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80190220[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80190228[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80190230[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80190238[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_801902EC[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_801902F4[])(void); +extern void func_80169F00(void *a0); +extern char D_801902A4[]; +extern char D_80190264[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_8019032C[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80190338[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80190380[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80190340[]; + extern u8 D_80190350[]; + extern u8 D_801E5FC8[]; + extern u8 D_801E5FF0[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80190340, D_801E5FC8) + 3; + func_8001CE28(obj, D_801E5FC8); + } else { + var_s3 = func_80024054(D_80190350, D_801E5FF0) + 9; + func_8001CE28(obj, D_801E5FF0); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_801903FC[])(void); + +void func_8016B4BC(void *a0) { + D_801903FC[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801E6018; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801E6018); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_801903F0[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_801903F0; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80190434[]; +extern unsigned short D_8019043C[]; +extern unsigned short D_80190444[]; +extern unsigned char D_801E6020[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801E6020 + param_2 * 0x40); + puVar3 = D_80190434[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_8019043C[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80190444[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801E6018; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801E6018, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_8019044C[])(void); + +void func_8016BBA4(void *a0) { + D_8019044C[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801E6154; + extern u8 D_801E6155; + extern u8 D_801E6156; + extern M2C_UNK D_801E6158; + extern u8 D_801E6159; + extern u8 D_801E615A; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801E6154) = 0x20; + D_801E6155 = 0x20; + D_801E6156 = 0; + (*(u8 *)&D_801E6158) = 0xc0; + D_801E6159 = 0xc0; + D_801E615A = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801E6154; +extern M2C_UNK D_801E6158; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801E6154, &D_801E6158, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801E6155; + extern u8 D_801E6156; + extern u8 D_801E6159; + extern u8 D_801E615A; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801E6154); + if (*p1 != 0) *p1 -= 4; + if (D_801E6155 != 0) D_801E6155 -= 4; + if (D_801E6156 != 0) D_801E6156 -= 4; + p2 = &(*(u8 *)&D_801E6158); + if (*p2 != 0) *p2 -= 4; + if (D_801E6159 != 0) D_801E6159 -= 4; + if (D_801E615A != 0) D_801E615A -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801E6154), &(*(int *)&D_801E6158), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801E60E0; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801E60E0); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_8019045C; + extern s32 D_80190464; + extern s32 D_8019046C; + extern s32 D_80190474; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_8019045C, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80190464, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_8019046C, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80190474, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_8019047C[])(void); + +void func_8016C14C(void *a0) { + D_8019047C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801E615C[]; +extern u8 D_801E6164[]; +extern u8 D_801E6114[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801E615C, D_801E6164, D_801E6114); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801E6170[]; + extern u8 D_801E6230; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801E6170[1] = 0xff; + D_801E6170[2] = 0x10; + D_801E6170[0] = 0x10; + D_801E6170[6] = 0; + D_801E6170[5] = 0; + D_801E6170[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801E6170, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801E6230, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801E6170); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8016AB6C", func_8016C998); + + +extern void (*D_80190484[])(void); + +void func_8016CB84(void *a0) { + D_80190484[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801E6230[]; + + + Blk_8016CF04_8016CF04 *p = &D_801E6230[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_801904A0[])(void); + +void func_8016D19C(void *a0) { + D_801904A0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_801904A8[])(void); + +void func_8016D428(void *a0) { + D_801904A8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80190510[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80190510[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_801904B4; +extern u8 D_801904C0; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801904B4, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801904C0); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80190544[])(void); + +void func_8016DEA4(void *a0) { + D_80190544[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_8019054C[])(void); + +void func_8016DF20(void *a0) { + D_8019054C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_801905A0[])(void); + +void func_8016E5B8(void *a0) { + D_801905A0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80190560[4]; + extern s32 D_80190580; + extern s32 D_80190588; + extern s32 D_80190590; + extern s32 D_80190598; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80190560[0], pp, &tmp); + RotTransSV(&D_80190560[1], &prim.v[1], &tmp); + RotTransSV(&D_80190560[2], &prim.v[2], &tmp); + RotTransSV(&D_80190560[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80190580; + prim.f1 = D_80190588; + prim.f2 = D_80190590; + prim.f3 = D_80190598; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_801905E0[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_801905E0[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_801905D4[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_801905D4[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_801905C4[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_801905C4[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801905D4[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_801905D4[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_801905D4[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_801905F0; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_801905F0; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80190668[])(void); + +void func_8016F6E0(void *a0) { + D_80190668[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80190670[])(void); + +void func_8016F798(void *a0) { + D_80190670[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80190678[])(void); + +void func_8016F834(void *a0) { + D_80190678[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80190680[])(void); + +void func_8016F8E4(void *a0) { + D_80190680[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80190688[])(void); + +void func_8016F9C4(void *a0) { + D_80190688[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80190690[])(void); + +void func_8016FA84(void *a0) { + D_80190690[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_8019069C[])(void); + +void func_8016FB7C(void *a0) { + D_8019069C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_801906A8[])(void); + +void func_8016FC90(void *a0) { + D_801906A8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_801906B4[])(void); + +void func_8016FDB4(void *a0) { + D_801906B4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_801906C4[])(void); + +void func_8016FF30(void *a0) { + D_801906C4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_801906D4[])(void); + +void func_8016FFDC(void *a0) { + D_801906D4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_801906DC[])(void); + +void func_80170150(void *a0) { + D_801906DC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_801906E4[])(void); + +void func_80170240(void *a0) { + D_801906E4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_801906EC[])(void); + +void func_801702FC(void *a0) { + D_801906EC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_801906F4[])(void); + +void func_801703E0(void *a0) { + D_801906F4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_801906FC[])(void); + +void func_801704B0(void *a0) { + D_801906FC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80190704[])(void); + +void func_80170548(void *a0) { + D_80190704[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_8019070C[])(void); + +void func_801705F8(void *a0) { + D_8019070C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80190714[])(void); + +void func_801706AC(void *a0) { + D_80190714[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_8019071C[])(void); + +void func_80170748(void *a0) { + D_8019071C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80190724[])(void); + +void func_80170810(void *a0) { + D_80190724[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_8019072C[])(void); + +void func_80170AD8(void *a0) { + D_8019072C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80190734[])(void); + +void func_80170BD8(void *a0) { + D_80190734[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_8019073C[])(void); + +void func_80170C74(void *a0) { + D_8019073C[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80190744[])(void); + +void func_80170D68(void *a0) { + D_80190744[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_8019074C[])(void); + +void func_80170E34(void *a0) { + D_8019074C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80190754[])(void); + +void func_80170EFC(void *a0) { + D_80190754[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_8019075C[])(void); + +void func_80170FB0(void *a0) { + D_8019075C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80190764[])(void); + +void func_80171064(void *a0) { + D_80190764[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_8019076C[])(void); + +void func_80171120(void *a0) { + D_8019076C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80190774[])(void); + +void func_801711C0(void *a0) { + D_80190774[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_8019077C[])(void); + +void func_80171260(void *a0) { + D_8019077C[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80190784[])(void); + +void func_801714E4(void *a0) { + D_80190784[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8016AB6C", func_80172C50); + + +extern void (*D_801907C8[])(void); + +void func_80172CA0(void *a0) { + D_801907C8[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_8019078C; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_8019078C); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC04_019/ov_SC04_019_jr_8015AE2C.c b/src/ov_SC04_019/ov_SC04_019_jr_8015AE2C.c index be8087ef3..51fd4d01e 100644 --- a/src/ov_SC04_019/ov_SC04_019_jr_8015AE2C.c +++ b/src/ov_SC04_019/ov_SC04_019_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_80190380[])(void); void func_8016AB30(void *a0) { D_80190380[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_801903FC[])(void); - -void func_8016B4BC(void *a0) { - D_801903FC[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801E6018; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801E6018); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_801903F0[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_801903F0; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80190434[]; -extern unsigned short D_8019043C[]; -extern unsigned short D_80190444[]; -extern unsigned char D_801E6020[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801E6020 + param_2 * 0x40); - puVar3 = D_80190434[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_8019043C[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80190444[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801E6018; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801E6018, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_8019044C[])(void); - -void func_8016BBA4(void *a0) { - D_8019044C[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801E6154; - extern u8 D_801E6155; - extern u8 D_801E6156; - extern M2C_UNK D_801E6158; - extern u8 D_801E6159; - extern u8 D_801E615A; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801E6154) = 0x20; - D_801E6155 = 0x20; - D_801E6156 = 0; - (*(u8 *)&D_801E6158) = 0xc0; - D_801E6159 = 0xc0; - D_801E615A = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801E6154; -extern M2C_UNK D_801E6158; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801E6154, &D_801E6158, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801E6155; - extern u8 D_801E6156; - extern u8 D_801E6159; - extern u8 D_801E615A; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801E6154); - if (*p1 != 0) *p1 -= 4; - if (D_801E6155 != 0) D_801E6155 -= 4; - if (D_801E6156 != 0) D_801E6156 -= 4; - p2 = &(*(u8 *)&D_801E6158); - if (*p2 != 0) *p2 -= 4; - if (D_801E6159 != 0) D_801E6159 -= 4; - if (D_801E615A != 0) D_801E615A -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801E6154), &(*(int *)&D_801E6158), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801E60E0; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801E60E0); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_8019045C; - extern s32 D_80190464; - extern s32 D_8019046C; - extern s32 D_80190474; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_8019045C, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80190464, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_8019046C, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80190474, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_8019047C[])(void); - -void func_8016C14C(void *a0) { - D_8019047C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801E615C[]; -extern u8 D_801E6164[]; -extern u8 D_801E6114[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801E615C, D_801E6164, D_801E6114); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801E6170[]; - extern u8 D_801E6230; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801E6170[1] = 0xff; - D_801E6170[2] = 0x10; - D_801E6170[0] = 0x10; - D_801E6170[6] = 0; - D_801E6170[5] = 0; - D_801E6170[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801E6170, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801E6230, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801E6170); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8015AE2C", func_8016C998); - - -extern void (*D_80190484[])(void); - -void func_8016CB84(void *a0) { - D_80190484[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801E6230[]; - - - Blk_8016CF04_8016CF04 *p = &D_801E6230[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_801904A0[])(void); - -void func_8016D19C(void *a0) { - D_801904A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_801904A8[])(void); - -void func_8016D428(void *a0) { - D_801904A8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80190510[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80190510[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_801904B4; -extern u8 D_801904C0; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801904B4, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801904C0); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80190544[])(void); - -void func_8016DEA4(void *a0) { - D_80190544[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_8019054C[])(void); - -void func_8016DF20(void *a0) { - D_8019054C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_801905A0[])(void); - -void func_8016E5B8(void *a0) { - D_801905A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80190560[4]; - extern s32 D_80190580; - extern s32 D_80190588; - extern s32 D_80190590; - extern s32 D_80190598; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80190560[0], pp, &tmp); - RotTransSV(&D_80190560[1], &prim.v[1], &tmp); - RotTransSV(&D_80190560[2], &prim.v[2], &tmp); - RotTransSV(&D_80190560[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80190580; - prim.f1 = D_80190588; - prim.f2 = D_80190590; - prim.f3 = D_80190598; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_801905E0[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_801905E0[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_801905D4[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_801905D4[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_801905C4[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_801905C4[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801905D4[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_801905D4[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_801905D4[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_801905F0; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_801905F0; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80190668[])(void); - -void func_8016F6E0(void *a0) { - D_80190668[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80190670[])(void); - -void func_8016F798(void *a0) { - D_80190670[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80190678[])(void); - -void func_8016F834(void *a0) { - D_80190678[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80190680[])(void); - -void func_8016F8E4(void *a0) { - D_80190680[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80190688[])(void); - -void func_8016F9C4(void *a0) { - D_80190688[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80190690[])(void); - -void func_8016FA84(void *a0) { - D_80190690[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_8019069C[])(void); - -void func_8016FB7C(void *a0) { - D_8019069C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_801906A8[])(void); - -void func_8016FC90(void *a0) { - D_801906A8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_801906B4[])(void); - -void func_8016FDB4(void *a0) { - D_801906B4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_801906C4[])(void); - -void func_8016FF30(void *a0) { - D_801906C4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_801906D4[])(void); - -void func_8016FFDC(void *a0) { - D_801906D4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_801906DC[])(void); - -void func_80170150(void *a0) { - D_801906DC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_801906E4[])(void); - -void func_80170240(void *a0) { - D_801906E4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_801906EC[])(void); - -void func_801702FC(void *a0) { - D_801906EC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_801906F4[])(void); - -void func_801703E0(void *a0) { - D_801906F4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_801906FC[])(void); - -void func_801704B0(void *a0) { - D_801906FC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80190704[])(void); - -void func_80170548(void *a0) { - D_80190704[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_8019070C[])(void); - -void func_801705F8(void *a0) { - D_8019070C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80190714[])(void); - -void func_801706AC(void *a0) { - D_80190714[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_8019071C[])(void); - -void func_80170748(void *a0) { - D_8019071C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80190724[])(void); - -void func_80170810(void *a0) { - D_80190724[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_8019072C[])(void); - -void func_80170AD8(void *a0) { - D_8019072C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80190734[])(void); - -void func_80170BD8(void *a0) { - D_80190734[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_8019073C[])(void); - -void func_80170C74(void *a0) { - D_8019073C[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80190744[])(void); - -void func_80170D68(void *a0) { - D_80190744[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_8019074C[])(void); - -void func_80170E34(void *a0) { - D_8019074C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80190754[])(void); - -void func_80170EFC(void *a0) { - D_80190754[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_8019075C[])(void); - -void func_80170FB0(void *a0) { - D_8019075C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80190764[])(void); - -void func_80171064(void *a0) { - D_80190764[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_8019076C[])(void); - -void func_80171120(void *a0) { - D_8019076C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80190774[])(void); - -void func_801711C0(void *a0) { - D_80190774[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_8019077C[])(void); - -void func_80171260(void *a0) { - D_8019077C[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80190784[])(void); - -void func_801714E4(void *a0) { - D_80190784[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8015AE2C", func_80172C50); - - -extern void (*D_801907C8[])(void); - -void func_80172CA0(void *a0) { - D_801907C8[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_8019078C; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_8019078C); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC04_019/ov_SC04_019_jr_8016AB6C.c b/src/ov_SC04_019/ov_SC04_019_jr_8016AB6C.c new file mode 100644 index 000000000..b4fe94f8b --- /dev/null +++ b/src/ov_SC04_019/ov_SC04_019_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018F74C; +extern u8 D_8018F6BC; +extern u8 D_8018F698; +extern u8 D_8018F674; +extern u8 D_8018F728; +extern u8 D_8018F704; +extern u8 D_8018F6E0; +extern u8 D_8018F650; +extern void func_80145934(void); +extern u8 D_8018F7DC; +extern u8 D_8018F7B8; +extern u8 D_8018F794; +extern u8 D_8018F770; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018EBD4[]; +extern unsigned char D_8018EC04[]; +extern unsigned char D_8018EC54[]; +extern unsigned char D_8018EC84[]; +extern unsigned char D_8018ECB4[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018ED04[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018EDCC[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018EE54[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018EE5C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801E5BA8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801E5BAC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018EE8C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018EF34[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018EF58[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018EF48; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018EF6C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018EF78[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018EF88[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018EFA0[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018EF90; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018EFB4[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018EFD0[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018EFC0; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018EFE4[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018EFF8[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018F00C; +extern void (*D_8018F034[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018F014; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018F080[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018F084[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018F4E8[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018F4F8[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801E5BE0; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018F520[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018F500; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018F510; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018F560[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018F568[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018F534; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018F574[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018F544; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801E5BE8; +extern s32 D_801E5BF4; +extern s32 D_801E5BF8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018F5B0[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018F584[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801E5BF0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018F800[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018F620[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018F8A4[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018F9F8[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018F814; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018FA00[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018F824; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018F844; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_8018FA08[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_8018FA30[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_8018FA3C[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_8018F8B0[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_8018FAE0; +extern void func_8015D380(s32 a0); +extern unsigned char D_8018EBC4[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_8018FAF4[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_8018FB30[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_8018FB78; +extern u16 D_8018FB7A; +extern u16 D_8018FB7C; +extern s32 D_8018FB80; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_8018FB88; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_8018F894; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_8018FC0C[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_8018FCBC[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_8018FCEC[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_8018FD50; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801E5C00[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_8018FD74[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801E5C58[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_8018FDBC[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_8018FDAC; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801E5054[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_8018FDC4[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_8018FE18[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_8018FDE0; +extern s16 D_8018FE14; +extern s16 D_8018FE12; +extern s16 D_8018FE10; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_8018FE24[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801E5CB8; +extern u8 D_801E5CB9; +extern u8 D_801E5CBA; +extern u8 D_801E5CBB; +extern u8 D_801E5CBC; +extern u8 D_801E5CBD; +extern u8 D_801E5CBE; +extern u8 D_801E5CBF; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_8018FE34[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801E5CF8; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_8018FE78[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_8018FEF4[]; +extern s32 D_8018FF14[]; +extern u8 D_8018FF90[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_8018FFB0[]; +extern u8 D_8018FFD0[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_8019006C[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_801900E8[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801E5064; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_801900F4[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_801900FC[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_801901C4[])(void); +extern void func_80166618(void *a0); +extern void (*D_801901D4[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_801901E4[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_801901F0[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80190150[]; +extern u8 D_80190164[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80190208[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80190210[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80190218[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80190220[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80190228[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80190230[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80190238[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_801902EC[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_801902F4[])(void); +extern void func_80169F00(void *a0); +extern char D_801902A4[]; +extern char D_80190264[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_8019032C[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80190338[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80190380[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80190340[]; + extern u8 D_80190350[]; + extern u8 D_801E5FC8[]; + extern u8 D_801E5FF0[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80190340, D_801E5FC8) + 3; + func_8001CE28(obj, D_801E5FC8); + } else { + var_s3 = func_80024054(D_80190350, D_801E5FF0) + 9; + func_8001CE28(obj, D_801E5FF0); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_801903FC[])(void); + +void func_8016B4BC(void *a0) { + D_801903FC[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801E6018; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801E6018); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_801903F0[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_801903F0; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80190434[]; +extern unsigned short D_8019043C[]; +extern unsigned short D_80190444[]; +extern unsigned char D_801E6020[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801E6020 + param_2 * 0x40); + puVar3 = D_80190434[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_8019043C[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80190444[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801E6018; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801E6018, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_8019044C[])(void); + +void func_8016BBA4(void *a0) { + D_8019044C[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801E6154; + extern u8 D_801E6155; + extern u8 D_801E6156; + extern M2C_UNK D_801E6158; + extern u8 D_801E6159; + extern u8 D_801E615A; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801E6154) = 0x20; + D_801E6155 = 0x20; + D_801E6156 = 0; + (*(u8 *)&D_801E6158) = 0xc0; + D_801E6159 = 0xc0; + D_801E615A = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801E6154; +extern M2C_UNK D_801E6158; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801E6154, &D_801E6158, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801E6155; + extern u8 D_801E6156; + extern u8 D_801E6159; + extern u8 D_801E615A; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801E6154); + if (*p1 != 0) *p1 -= 4; + if (D_801E6155 != 0) D_801E6155 -= 4; + if (D_801E6156 != 0) D_801E6156 -= 4; + p2 = &(*(u8 *)&D_801E6158); + if (*p2 != 0) *p2 -= 4; + if (D_801E6159 != 0) D_801E6159 -= 4; + if (D_801E615A != 0) D_801E615A -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801E6154), &(*(int *)&D_801E6158), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801E60E0; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801E60E0); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_8019045C; + extern s32 D_80190464; + extern s32 D_8019046C; + extern s32 D_80190474; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_8019045C, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80190464, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_8019046C, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80190474, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_8019047C[])(void); + +void func_8016C14C(void *a0) { + D_8019047C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801E615C[]; +extern u8 D_801E6164[]; +extern u8 D_801E6114[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801E615C, D_801E6164, D_801E6114); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801E6170[]; + extern u8 D_801E6230; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801E6170[1] = 0xff; + D_801E6170[2] = 0x10; + D_801E6170[0] = 0x10; + D_801E6170[6] = 0; + D_801E6170[5] = 0; + D_801E6170[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801E6170, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801E6230, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801E6170); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8016AB6C", func_8016C998); + + +extern void (*D_80190484[])(void); + +void func_8016CB84(void *a0) { + D_80190484[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801E6230[]; + + + Blk_8016CF04_8016CF04 *p = &D_801E6230[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_801904A0[])(void); + +void func_8016D19C(void *a0) { + D_801904A0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_801904A8[])(void); + +void func_8016D428(void *a0) { + D_801904A8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80190510[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80190510[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_801904B4; +extern u8 D_801904C0; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801904B4, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801904C0); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80190544[])(void); + +void func_8016DEA4(void *a0) { + D_80190544[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_8019054C[])(void); + +void func_8016DF20(void *a0) { + D_8019054C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_801905A0[])(void); + +void func_8016E5B8(void *a0) { + D_801905A0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80190560[4]; + extern s32 D_80190580; + extern s32 D_80190588; + extern s32 D_80190590; + extern s32 D_80190598; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80190560[0], pp, &tmp); + RotTransSV(&D_80190560[1], &prim.v[1], &tmp); + RotTransSV(&D_80190560[2], &prim.v[2], &tmp); + RotTransSV(&D_80190560[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80190580; + prim.f1 = D_80190588; + prim.f2 = D_80190590; + prim.f3 = D_80190598; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_801905E0[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_801905E0[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_801905D4[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_801905D4[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_801905C4[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_801905C4[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801905D4[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_801905D4[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_801905D4[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_801905F0; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_801905F0; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80190668[])(void); + +void func_8016F6E0(void *a0) { + D_80190668[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80190670[])(void); + +void func_8016F798(void *a0) { + D_80190670[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80190678[])(void); + +void func_8016F834(void *a0) { + D_80190678[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80190680[])(void); + +void func_8016F8E4(void *a0) { + D_80190680[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80190688[])(void); + +void func_8016F9C4(void *a0) { + D_80190688[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80190690[])(void); + +void func_8016FA84(void *a0) { + D_80190690[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_8019069C[])(void); + +void func_8016FB7C(void *a0) { + D_8019069C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_801906A8[])(void); + +void func_8016FC90(void *a0) { + D_801906A8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_801906B4[])(void); + +void func_8016FDB4(void *a0) { + D_801906B4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_801906C4[])(void); + +void func_8016FF30(void *a0) { + D_801906C4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_801906D4[])(void); + +void func_8016FFDC(void *a0) { + D_801906D4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_801906DC[])(void); + +void func_80170150(void *a0) { + D_801906DC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_801906E4[])(void); + +void func_80170240(void *a0) { + D_801906E4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_801906EC[])(void); + +void func_801702FC(void *a0) { + D_801906EC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_801906F4[])(void); + +void func_801703E0(void *a0) { + D_801906F4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_801906FC[])(void); + +void func_801704B0(void *a0) { + D_801906FC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80190704[])(void); + +void func_80170548(void *a0) { + D_80190704[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_8019070C[])(void); + +void func_801705F8(void *a0) { + D_8019070C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80190714[])(void); + +void func_801706AC(void *a0) { + D_80190714[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_8019071C[])(void); + +void func_80170748(void *a0) { + D_8019071C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80190724[])(void); + +void func_80170810(void *a0) { + D_80190724[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_8019072C[])(void); + +void func_80170AD8(void *a0) { + D_8019072C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80190734[])(void); + +void func_80170BD8(void *a0) { + D_80190734[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_8019073C[])(void); + +void func_80170C74(void *a0) { + D_8019073C[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80190744[])(void); + +void func_80170D68(void *a0) { + D_80190744[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_8019074C[])(void); + +void func_80170E34(void *a0) { + D_8019074C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80190754[])(void); + +void func_80170EFC(void *a0) { + D_80190754[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_8019075C[])(void); + +void func_80170FB0(void *a0) { + D_8019075C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80190764[])(void); + +void func_80171064(void *a0) { + D_80190764[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_8019076C[])(void); + +void func_80171120(void *a0) { + D_8019076C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80190774[])(void); + +void func_801711C0(void *a0) { + D_80190774[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_8019077C[])(void); + +void func_80171260(void *a0) { + D_8019077C[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80190784[])(void); + +void func_801714E4(void *a0) { + D_80190784[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8016AB6C", func_80172C50); + + +extern void (*D_801907C8[])(void); + +void func_80172CA0(void *a0) { + D_801907C8[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_8019078C; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_8019078C); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC04_020/ov_SC04_020_jr_8015AE2C.c b/src/ov_SC04_020/ov_SC04_020_jr_8015AE2C.c index 69299b79a..0d265beeb 100644 --- a/src/ov_SC04_020/ov_SC04_020_jr_8015AE2C.c +++ b/src/ov_SC04_020/ov_SC04_020_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_801864B8[])(void); void func_8016AB30(void *a0) { D_801864B8[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80186534[])(void); - -void func_8016B4BC(void *a0) { - D_80186534[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801BB628; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801BB628); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80186528[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80186528; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_8018656C[]; -extern unsigned short D_80186574[]; -extern unsigned short D_8018657C[]; -extern unsigned char D_801BB630[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801BB630 + param_2 * 0x40); - puVar3 = D_8018656C[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80186574[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_8018657C[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801BB628; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801BB628, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80186584[])(void); - -void func_8016BBA4(void *a0) { - D_80186584[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801BB764; - extern u8 D_801BB765; - extern u8 D_801BB766; - extern M2C_UNK D_801BB768; - extern u8 D_801BB769; - extern u8 D_801BB76A; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801BB764) = 0x20; - D_801BB765 = 0x20; - D_801BB766 = 0; - (*(u8 *)&D_801BB768) = 0xc0; - D_801BB769 = 0xc0; - D_801BB76A = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801BB764; -extern M2C_UNK D_801BB768; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801BB764, &D_801BB768, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801BB765; - extern u8 D_801BB766; - extern u8 D_801BB769; - extern u8 D_801BB76A; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801BB764); - if (*p1 != 0) *p1 -= 4; - if (D_801BB765 != 0) D_801BB765 -= 4; - if (D_801BB766 != 0) D_801BB766 -= 4; - p2 = &(*(u8 *)&D_801BB768); - if (*p2 != 0) *p2 -= 4; - if (D_801BB769 != 0) D_801BB769 -= 4; - if (D_801BB76A != 0) D_801BB76A -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801BB764), &(*(int *)&D_801BB768), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801BB6F0; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801BB6F0); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80186594; - extern s32 D_8018659C; - extern s32 D_801865A4; - extern s32 D_801865AC; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80186594, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_8018659C, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_801865A4, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_801865AC, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_801865B4[])(void); - -void func_8016C14C(void *a0) { - D_801865B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801BB76C[]; -extern u8 D_801BB774[]; -extern u8 D_801BB724[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801BB76C, D_801BB774, D_801BB724); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801BB780[]; - extern u8 D_801BB840; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801BB780[1] = 0xff; - D_801BB780[2] = 0x10; - D_801BB780[0] = 0x10; - D_801BB780[6] = 0; - D_801BB780[5] = 0; - D_801BB780[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801BB780, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801BB840, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801BB780); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8015AE2C", func_8016C998); - - -extern void (*D_801865BC[])(void); - -void func_8016CB84(void *a0) { - D_801865BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801BB840[]; - - - Blk_8016CF04_8016CF04 *p = &D_801BB840[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_801865D8[])(void); - -void func_8016D19C(void *a0) { - D_801865D8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_801865E0[])(void); - -void func_8016D428(void *a0) { - D_801865E0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80186648[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80186648[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_801865EC; -extern u8 D_801865F8; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801865EC, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801865F8); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8015AE2C", func_8016DC20); - - -extern void (*D_8018667C[])(void); - -void func_8016DEA4(void *a0) { - D_8018667C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80186684[])(void); - -void func_8016DF20(void *a0) { - D_80186684[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_801866D8[])(void); - -void func_8016E5B8(void *a0) { - D_801866D8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80186698[4]; - extern s32 D_801866B8; - extern s32 D_801866C0; - extern s32 D_801866C8; - extern s32 D_801866D0; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80186698[0], pp, &tmp); - RotTransSV(&D_80186698[1], &prim.v[1], &tmp); - RotTransSV(&D_80186698[2], &prim.v[2], &tmp); - RotTransSV(&D_80186698[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_801866B8; - prim.f1 = D_801866C0; - prim.f2 = D_801866C8; - prim.f3 = D_801866D0; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80186718[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80186718[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_8018670C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_8018670C[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_801866FC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_801866FC[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018670C[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_8018670C[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_8018670C[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80186728; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80186728; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_801867A0[])(void); - -void func_8016F6E0(void *a0) { - D_801867A0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_801867A8[])(void); - -void func_8016F798(void *a0) { - D_801867A8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_801867B0[])(void); - -void func_8016F834(void *a0) { - D_801867B0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_801867B8[])(void); - -void func_8016F8E4(void *a0) { - D_801867B8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_801867C0[])(void); - -void func_8016F9C4(void *a0) { - D_801867C0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_801867C8[])(void); - -void func_8016FA84(void *a0) { - D_801867C8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_801867D4[])(void); - -void func_8016FB7C(void *a0) { - D_801867D4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_801867E0[])(void); - -void func_8016FC90(void *a0) { - D_801867E0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_801867EC[])(void); - -void func_8016FDB4(void *a0) { - D_801867EC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_801867FC[])(void); - -void func_8016FF30(void *a0) { - D_801867FC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_8018680C[])(void); - -void func_8016FFDC(void *a0) { - D_8018680C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80186814[])(void); - -void func_80170150(void *a0) { - D_80186814[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_8018681C[])(void); - -void func_80170240(void *a0) { - D_8018681C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80186824[])(void); - -void func_801702FC(void *a0) { - D_80186824[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_8018682C[])(void); - -void func_801703E0(void *a0) { - D_8018682C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80186834[])(void); - -void func_801704B0(void *a0) { - D_80186834[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_8018683C[])(void); - -void func_80170548(void *a0) { - D_8018683C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80186844[])(void); - -void func_801705F8(void *a0) { - D_80186844[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_8018684C[])(void); - -void func_801706AC(void *a0) { - D_8018684C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80186854[])(void); - -void func_80170748(void *a0) { - D_80186854[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_8018685C[])(void); - -void func_80170810(void *a0) { - D_8018685C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80186864[])(void); - -void func_80170AD8(void *a0) { - D_80186864[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_8018686C[])(void); - -void func_80170BD8(void *a0) { - D_8018686C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80186874[])(void); - -void func_80170C74(void *a0) { - D_80186874[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8015AE2C", func_80170CF0); - - -extern void (*D_8018687C[])(void); - -void func_80170D68(void *a0) { - D_8018687C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80186884[])(void); - -void func_80170E34(void *a0) { - D_80186884[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_8018688C[])(void); - -void func_80170EFC(void *a0) { - D_8018688C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80186894[])(void); - -void func_80170FB0(void *a0) { - D_80186894[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_8018689C[])(void); - -void func_80171064(void *a0) { - D_8018689C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_801868A4[])(void); - -void func_80171120(void *a0) { - D_801868A4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_801868AC[])(void); - -void func_801711C0(void *a0) { - D_801868AC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_801868B4[])(void); - -void func_80171260(void *a0) { - D_801868B4[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_801868BC[])(void); - -void func_801714E4(void *a0) { - D_801868BC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8015AE2C", func_80172C50); - - -extern void (*D_80186900[])(void); - -void func_80172CA0(void *a0) { - D_80186900[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_801868C4; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_801868C4); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC04_020/ov_SC04_020_jr_8016AB6C.c b/src/ov_SC04_020/ov_SC04_020_jr_8016AB6C.c new file mode 100644 index 000000000..e231d3169 --- /dev/null +++ b/src/ov_SC04_020/ov_SC04_020_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80185884; +extern u8 D_801857F4; +extern u8 D_801857D0; +extern u8 D_801857AC; +extern u8 D_80185860; +extern u8 D_8018583C; +extern u8 D_80185818; +extern u8 D_80185788; +extern void func_80145934(void); +extern u8 D_80185914; +extern u8 D_801858F0; +extern u8 D_801858CC; +extern u8 D_801858A8; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80184D0C[]; +extern unsigned char D_80184D3C[]; +extern unsigned char D_80184D8C[]; +extern unsigned char D_80184DBC[]; +extern unsigned char D_80184DEC[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80184E3C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80184F04[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80184F8C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80184F94; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801BB1B8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801BB1BC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80184FC4; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018506C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80185090[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80185080; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801850A4[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801850B0[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801850C0[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801850D8[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801850C8; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801850EC[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80185108[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801850F8; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018511C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80185130[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80185144; +extern void (*D_8018516C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018514C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801851B8[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801851BC[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80185620[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80185630[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801BB1F0; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80185658[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80185638; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80185648; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80185698[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801856A0[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018566C; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801856AC[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018567C; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801BB1F8; +extern s32 D_801BB204; +extern s32 D_801BB208; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801856E8[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801856BC[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801BB200; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80185938[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80185758[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_801859DC[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80185B30[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018594C; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80185B38[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018595C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018597C; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80185B40[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80185B68[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80185B74[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_801859E8[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80185C18; +extern void func_8015D380(s32 a0); +extern unsigned char D_80184CFC[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80185C2C[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80185C68[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80185CB0; +extern u16 D_80185CB2; +extern u16 D_80185CB4; +extern s32 D_80185CB8; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80185CC0; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_801859CC; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80185D44[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80185DF4[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80185E24[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80185E88; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801BB210[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80185EAC[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801BB268[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80185EF4[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80185EE4; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801BAA7C[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80185EFC[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80185F50[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80185F18; +extern s16 D_80185F4C; +extern s16 D_80185F4A; +extern s16 D_80185F48; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80185F5C[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801BB2C8; +extern u8 D_801BB2C9; +extern u8 D_801BB2CA; +extern u8 D_801BB2CB; +extern u8 D_801BB2CC; +extern u8 D_801BB2CD; +extern u8 D_801BB2CE; +extern u8 D_801BB2CF; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80185F6C[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801BB308; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80185FB0[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_8018602C[]; +extern s32 D_8018604C[]; +extern u8 D_801860C8[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_801860E8[]; +extern u8 D_80186108[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_801861A4[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80186220[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801BAA8C; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_8018622C[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80186234[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_801862FC[])(void); +extern void func_80166618(void *a0); +extern void (*D_8018630C[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_8018631C[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80186328[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80186288[]; +extern u8 D_8018629C[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80186340[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80186348[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80186350[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80186358[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80186360[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80186368[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80186370[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80186424[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_8018642C[])(void); +extern void func_80169F00(void *a0); +extern char D_801863DC[]; +extern char D_8018639C[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80186464[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80186470[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_801864B8[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80186478[]; + extern u8 D_80186488[]; + extern u8 D_801BB5D8[]; + extern u8 D_801BB600[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80186478, D_801BB5D8) + 3; + func_8001CE28(obj, D_801BB5D8); + } else { + var_s3 = func_80024054(D_80186488, D_801BB600) + 9; + func_8001CE28(obj, D_801BB600); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80186534[])(void); + +void func_8016B4BC(void *a0) { + D_80186534[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801BB628; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801BB628); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80186528[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80186528; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_8018656C[]; +extern unsigned short D_80186574[]; +extern unsigned short D_8018657C[]; +extern unsigned char D_801BB630[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801BB630 + param_2 * 0x40); + puVar3 = D_8018656C[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80186574[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_8018657C[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801BB628; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801BB628, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80186584[])(void); + +void func_8016BBA4(void *a0) { + D_80186584[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801BB764; + extern u8 D_801BB765; + extern u8 D_801BB766; + extern M2C_UNK D_801BB768; + extern u8 D_801BB769; + extern u8 D_801BB76A; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801BB764) = 0x20; + D_801BB765 = 0x20; + D_801BB766 = 0; + (*(u8 *)&D_801BB768) = 0xc0; + D_801BB769 = 0xc0; + D_801BB76A = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801BB764; +extern M2C_UNK D_801BB768; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801BB764, &D_801BB768, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801BB765; + extern u8 D_801BB766; + extern u8 D_801BB769; + extern u8 D_801BB76A; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801BB764); + if (*p1 != 0) *p1 -= 4; + if (D_801BB765 != 0) D_801BB765 -= 4; + if (D_801BB766 != 0) D_801BB766 -= 4; + p2 = &(*(u8 *)&D_801BB768); + if (*p2 != 0) *p2 -= 4; + if (D_801BB769 != 0) D_801BB769 -= 4; + if (D_801BB76A != 0) D_801BB76A -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801BB764), &(*(int *)&D_801BB768), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801BB6F0; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801BB6F0); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80186594; + extern s32 D_8018659C; + extern s32 D_801865A4; + extern s32 D_801865AC; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80186594, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_8018659C, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_801865A4, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_801865AC, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_801865B4[])(void); + +void func_8016C14C(void *a0) { + D_801865B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801BB76C[]; +extern u8 D_801BB774[]; +extern u8 D_801BB724[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801BB76C, D_801BB774, D_801BB724); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801BB780[]; + extern u8 D_801BB840; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801BB780[1] = 0xff; + D_801BB780[2] = 0x10; + D_801BB780[0] = 0x10; + D_801BB780[6] = 0; + D_801BB780[5] = 0; + D_801BB780[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801BB780, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801BB840, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801BB780); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8016AB6C", func_8016C998); + + +extern void (*D_801865BC[])(void); + +void func_8016CB84(void *a0) { + D_801865BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801BB840[]; + + + Blk_8016CF04_8016CF04 *p = &D_801BB840[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_801865D8[])(void); + +void func_8016D19C(void *a0) { + D_801865D8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_801865E0[])(void); + +void func_8016D428(void *a0) { + D_801865E0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80186648[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80186648[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_801865EC; +extern u8 D_801865F8; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801865EC, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801865F8); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8016AB6C", func_8016DC20); + + +extern void (*D_8018667C[])(void); + +void func_8016DEA4(void *a0) { + D_8018667C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80186684[])(void); + +void func_8016DF20(void *a0) { + D_80186684[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_801866D8[])(void); + +void func_8016E5B8(void *a0) { + D_801866D8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80186698[4]; + extern s32 D_801866B8; + extern s32 D_801866C0; + extern s32 D_801866C8; + extern s32 D_801866D0; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80186698[0], pp, &tmp); + RotTransSV(&D_80186698[1], &prim.v[1], &tmp); + RotTransSV(&D_80186698[2], &prim.v[2], &tmp); + RotTransSV(&D_80186698[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_801866B8; + prim.f1 = D_801866C0; + prim.f2 = D_801866C8; + prim.f3 = D_801866D0; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80186718[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80186718[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_8018670C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_8018670C[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_801866FC[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_801866FC[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018670C[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_8018670C[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_8018670C[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80186728; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80186728; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_801867A0[])(void); + +void func_8016F6E0(void *a0) { + D_801867A0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_801867A8[])(void); + +void func_8016F798(void *a0) { + D_801867A8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_801867B0[])(void); + +void func_8016F834(void *a0) { + D_801867B0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_801867B8[])(void); + +void func_8016F8E4(void *a0) { + D_801867B8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_801867C0[])(void); + +void func_8016F9C4(void *a0) { + D_801867C0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_801867C8[])(void); + +void func_8016FA84(void *a0) { + D_801867C8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_801867D4[])(void); + +void func_8016FB7C(void *a0) { + D_801867D4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_801867E0[])(void); + +void func_8016FC90(void *a0) { + D_801867E0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_801867EC[])(void); + +void func_8016FDB4(void *a0) { + D_801867EC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_801867FC[])(void); + +void func_8016FF30(void *a0) { + D_801867FC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_8018680C[])(void); + +void func_8016FFDC(void *a0) { + D_8018680C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80186814[])(void); + +void func_80170150(void *a0) { + D_80186814[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_8018681C[])(void); + +void func_80170240(void *a0) { + D_8018681C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80186824[])(void); + +void func_801702FC(void *a0) { + D_80186824[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_8018682C[])(void); + +void func_801703E0(void *a0) { + D_8018682C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80186834[])(void); + +void func_801704B0(void *a0) { + D_80186834[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_8018683C[])(void); + +void func_80170548(void *a0) { + D_8018683C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80186844[])(void); + +void func_801705F8(void *a0) { + D_80186844[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_8018684C[])(void); + +void func_801706AC(void *a0) { + D_8018684C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80186854[])(void); + +void func_80170748(void *a0) { + D_80186854[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_8018685C[])(void); + +void func_80170810(void *a0) { + D_8018685C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80186864[])(void); + +void func_80170AD8(void *a0) { + D_80186864[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_8018686C[])(void); + +void func_80170BD8(void *a0) { + D_8018686C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80186874[])(void); + +void func_80170C74(void *a0) { + D_80186874[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8016AB6C", func_80170CF0); + + +extern void (*D_8018687C[])(void); + +void func_80170D68(void *a0) { + D_8018687C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80186884[])(void); + +void func_80170E34(void *a0) { + D_80186884[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_8018688C[])(void); + +void func_80170EFC(void *a0) { + D_8018688C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80186894[])(void); + +void func_80170FB0(void *a0) { + D_80186894[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_8018689C[])(void); + +void func_80171064(void *a0) { + D_8018689C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_801868A4[])(void); + +void func_80171120(void *a0) { + D_801868A4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_801868AC[])(void); + +void func_801711C0(void *a0) { + D_801868AC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_801868B4[])(void); + +void func_80171260(void *a0) { + D_801868B4[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_801868BC[])(void); + +void func_801714E4(void *a0) { + D_801868BC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8016AB6C", func_80172C50); + + +extern void (*D_80186900[])(void); + +void func_80172CA0(void *a0) { + D_80186900[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_801868C4; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_801868C4); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC04_021/ov_SC04_021_jr_8015AE2C.c b/src/ov_SC04_021/ov_SC04_021_jr_8015AE2C.c index 92d53eb73..b93267965 100644 --- a/src/ov_SC04_021/ov_SC04_021_jr_8015AE2C.c +++ b/src/ov_SC04_021/ov_SC04_021_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_801823E4[])(void); void func_8016AB30(void *a0) { D_801823E4[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80182460[])(void); - -void func_8016B4BC(void *a0) { - D_80182460[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_8018EC80; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_8018EC80); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80182454[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80182454; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80182498[]; -extern unsigned short D_801824A0[]; -extern unsigned short D_801824A8[]; -extern unsigned char D_8018EC88[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_8018EC88 + param_2 * 0x40); - puVar3 = D_80182498[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_801824A0[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_801824A8[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_8018EC80; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_8018EC80, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_801824B0[])(void); - -void func_8016BBA4(void *a0) { - D_801824B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_8018EDBC; - extern u8 D_8018EDBD; - extern u8 D_8018EDBE; - extern M2C_UNK D_8018EDC0; - extern u8 D_8018EDC1; - extern u8 D_8018EDC2; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_8018EDBC) = 0x20; - D_8018EDBD = 0x20; - D_8018EDBE = 0; - (*(u8 *)&D_8018EDC0) = 0xc0; - D_8018EDC1 = 0xc0; - D_8018EDC2 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_8018EDBC; -extern M2C_UNK D_8018EDC0; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_8018EDBC, &D_8018EDC0, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_8018EDBD; - extern u8 D_8018EDBE; - extern u8 D_8018EDC1; - extern u8 D_8018EDC2; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_8018EDBC); - if (*p1 != 0) *p1 -= 4; - if (D_8018EDBD != 0) D_8018EDBD -= 4; - if (D_8018EDBE != 0) D_8018EDBE -= 4; - p2 = &(*(u8 *)&D_8018EDC0); - if (*p2 != 0) *p2 -= 4; - if (D_8018EDC1 != 0) D_8018EDC1 -= 4; - if (D_8018EDC2 != 0) D_8018EDC2 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_8018EDBC), &(*(int *)&D_8018EDC0), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_8018ED48; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_8018ED48); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_801824C0; - extern s32 D_801824C8; - extern s32 D_801824D0; - extern s32 D_801824D8; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_801824C0, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_801824C8, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_801824D0, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_801824D8, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_801824E0[])(void); - -void func_8016C14C(void *a0) { - D_801824E0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_8018EDC4[]; -extern u8 D_8018EDCC[]; -extern u8 D_8018ED7C[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_8018EDC4, D_8018EDCC, D_8018ED7C); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_8018EDD8[]; - extern u8 D_8018EE98; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_8018EDD8[1] = 0xff; - D_8018EDD8[2] = 0x10; - D_8018EDD8[0] = 0x10; - D_8018EDD8[6] = 0; - D_8018EDD8[5] = 0; - D_8018EDD8[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_8018EDD8, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_8018EE98, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_8018EDD8); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8015AE2C", func_8016C998); - - -extern void (*D_801824E8[])(void); - -void func_8016CB84(void *a0) { - D_801824E8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_8018EE98[]; - - - Blk_8016CF04_8016CF04 *p = &D_8018EE98[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80182504[])(void); - -void func_8016D19C(void *a0) { - D_80182504[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_8018250C[])(void); - -void func_8016D428(void *a0) { - D_8018250C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80182574[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80182574[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80182518; -extern u8 D_80182524; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80182518, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80182524); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8015AE2C", func_8016DC20); - - -extern void (*D_801825A8[])(void); - -void func_8016DEA4(void *a0) { - D_801825A8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_801825B0[])(void); - -void func_8016DF20(void *a0) { - D_801825B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80182604[])(void); - -void func_8016E5B8(void *a0) { - D_80182604[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_801825C4[4]; - extern s32 D_801825E4; - extern s32 D_801825EC; - extern s32 D_801825F4; - extern s32 D_801825FC; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_801825C4[0], pp, &tmp); - RotTransSV(&D_801825C4[1], &prim.v[1], &tmp); - RotTransSV(&D_801825C4[2], &prim.v[2], &tmp); - RotTransSV(&D_801825C4[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_801825E4; - prim.f1 = D_801825EC; - prim.f2 = D_801825F4; - prim.f3 = D_801825FC; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80182644[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80182644[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80182638[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80182638[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80182628[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80182628[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80182638[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80182638[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80182638[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80182654; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80182654; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_801826CC[])(void); - -void func_8016F6E0(void *a0) { - D_801826CC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_801826D4[])(void); - -void func_8016F798(void *a0) { - D_801826D4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_801826DC[])(void); - -void func_8016F834(void *a0) { - D_801826DC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_801826E4[])(void); - -void func_8016F8E4(void *a0) { - D_801826E4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_801826EC[])(void); - -void func_8016F9C4(void *a0) { - D_801826EC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_801826F4[])(void); - -void func_8016FA84(void *a0) { - D_801826F4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80182700[])(void); - -void func_8016FB7C(void *a0) { - D_80182700[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_8018270C[])(void); - -void func_8016FC90(void *a0) { - D_8018270C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80182718[])(void); - -void func_8016FDB4(void *a0) { - D_80182718[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80182728[])(void); - -void func_8016FF30(void *a0) { - D_80182728[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80182738[])(void); - -void func_8016FFDC(void *a0) { - D_80182738[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80182740[])(void); - -void func_80170150(void *a0) { - D_80182740[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80182748[])(void); - -void func_80170240(void *a0) { - D_80182748[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80182750[])(void); - -void func_801702FC(void *a0) { - D_80182750[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80182758[])(void); - -void func_801703E0(void *a0) { - D_80182758[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80182760[])(void); - -void func_801704B0(void *a0) { - D_80182760[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80182768[])(void); - -void func_80170548(void *a0) { - D_80182768[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80182770[])(void); - -void func_801705F8(void *a0) { - D_80182770[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80182778[])(void); - -void func_801706AC(void *a0) { - D_80182778[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80182780[])(void); - -void func_80170748(void *a0) { - D_80182780[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80182788[])(void); - -void func_80170810(void *a0) { - D_80182788[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80182790[])(void); - -void func_80170AD8(void *a0) { - D_80182790[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80182798[])(void); - -void func_80170BD8(void *a0) { - D_80182798[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_801827A0[])(void); - -void func_80170C74(void *a0) { - D_801827A0[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8015AE2C", func_80170CF0); - - -extern void (*D_801827A8[])(void); - -void func_80170D68(void *a0) { - D_801827A8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_801827B0[])(void); - -void func_80170E34(void *a0) { - D_801827B0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_801827B8[])(void); - -void func_80170EFC(void *a0) { - D_801827B8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_801827C0[])(void); - -void func_80170FB0(void *a0) { - D_801827C0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_801827C8[])(void); - -void func_80171064(void *a0) { - D_801827C8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_801827D0[])(void); - -void func_80171120(void *a0) { - D_801827D0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_801827D8[])(void); - -void func_801711C0(void *a0) { - D_801827D8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_801827E0[])(void); - -void func_80171260(void *a0) { - D_801827E0[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_801827E8[])(void); - -void func_801714E4(void *a0) { - D_801827E8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8015AE2C", func_80172C50); - - -extern void (*D_8018282C[])(void); - -void func_80172CA0(void *a0) { - D_8018282C[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_801827F0; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_801827F0); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC04_021/ov_SC04_021_jr_8016AB6C.c b/src/ov_SC04_021/ov_SC04_021_jr_8016AB6C.c new file mode 100644 index 000000000..e1eda2a36 --- /dev/null +++ b/src/ov_SC04_021/ov_SC04_021_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801817B0; +extern u8 D_80181720; +extern u8 D_801816FC; +extern u8 D_801816D8; +extern u8 D_8018178C; +extern u8 D_80181768; +extern u8 D_80181744; +extern u8 D_801816B4; +extern void func_80145934(void); +extern u8 D_80181840; +extern u8 D_8018181C; +extern u8 D_801817F8; +extern u8 D_801817D4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80180C38[]; +extern unsigned char D_80180C68[]; +extern unsigned char D_80180CB8[]; +extern unsigned char D_80180CE8[]; +extern unsigned char D_80180D18[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80180D68[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80180E30[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80180EB8[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80180EC0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8018E810; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8018E814; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80180EF0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80180F98[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80180FBC[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80180FAC; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80180FD0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80180FDC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80180FEC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80181004[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80180FF4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80181018[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80181034[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80181024; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80181048[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018105C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80181070; +extern void (*D_80181098[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80181078; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801810E4[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801810E8[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018154C[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018155C[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_8018E848; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80181584[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80181564; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80181574; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801815C4[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801815CC[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80181598; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801815D8[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_801815A8; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_8018E850; +extern s32 D_8018E85C; +extern s32 D_8018E860; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80181614[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801815E8[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_8018E858; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80181864[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80181684[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80181908[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80181A5C[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80181878; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80181A64[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80181888; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801818A8; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80181A6C[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80181A94[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80181AA0[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80181914[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80181B44; +extern void func_8015D380(s32 a0); +extern unsigned char D_80180C28[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80181B58[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80181B94[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80181BDC; +extern u16 D_80181BDE; +extern u16 D_80181BE0; +extern s32 D_80181BE4; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80181BEC; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_801818F8; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80181C70[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80181D20[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80181D50[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80181DB4; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_8018E868[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80181DD8[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_8018E8C0[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80181E20[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80181E10; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_8018E118[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80181E28[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80181E7C[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80181E44; +extern s16 D_80181E78; +extern s16 D_80181E76; +extern s16 D_80181E74; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80181E88[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_8018E920; +extern u8 D_8018E921; +extern u8 D_8018E922; +extern u8 D_8018E923; +extern u8 D_8018E924; +extern u8 D_8018E925; +extern u8 D_8018E926; +extern u8 D_8018E927; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80181E98[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_8018E960; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80181EDC[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80181F58[]; +extern s32 D_80181F78[]; +extern u8 D_80181FF4[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80182014[]; +extern u8 D_80182034[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_801820D0[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_8018214C[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_8018E128; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80182158[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80182160[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80182228[])(void); +extern void func_80166618(void *a0); +extern void (*D_80182238[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80182248[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80182254[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_801821B4[]; +extern u8 D_801821C8[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_8018226C[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80182274[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_8018227C[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80182284[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_8018228C[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80182294[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_8018229C[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80182350[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80182358[])(void); +extern void func_80169F00(void *a0); +extern char D_80182308[]; +extern char D_801822C8[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80182390[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_8018239C[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_801823E4[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_801823A4[]; + extern u8 D_801823B4[]; + extern u8 D_8018EC30[]; + extern u8 D_8018EC58[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_801823A4, D_8018EC30) + 3; + func_8001CE28(obj, D_8018EC30); + } else { + var_s3 = func_80024054(D_801823B4, D_8018EC58) + 9; + func_8001CE28(obj, D_8018EC58); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80182460[])(void); + +void func_8016B4BC(void *a0) { + D_80182460[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_8018EC80; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_8018EC80); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80182454[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80182454; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80182498[]; +extern unsigned short D_801824A0[]; +extern unsigned short D_801824A8[]; +extern unsigned char D_8018EC88[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_8018EC88 + param_2 * 0x40); + puVar3 = D_80182498[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_801824A0[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_801824A8[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_8018EC80; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_8018EC80, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_801824B0[])(void); + +void func_8016BBA4(void *a0) { + D_801824B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_8018EDBC; + extern u8 D_8018EDBD; + extern u8 D_8018EDBE; + extern M2C_UNK D_8018EDC0; + extern u8 D_8018EDC1; + extern u8 D_8018EDC2; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_8018EDBC) = 0x20; + D_8018EDBD = 0x20; + D_8018EDBE = 0; + (*(u8 *)&D_8018EDC0) = 0xc0; + D_8018EDC1 = 0xc0; + D_8018EDC2 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_8018EDBC; +extern M2C_UNK D_8018EDC0; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_8018EDBC, &D_8018EDC0, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_8018EDBD; + extern u8 D_8018EDBE; + extern u8 D_8018EDC1; + extern u8 D_8018EDC2; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_8018EDBC); + if (*p1 != 0) *p1 -= 4; + if (D_8018EDBD != 0) D_8018EDBD -= 4; + if (D_8018EDBE != 0) D_8018EDBE -= 4; + p2 = &(*(u8 *)&D_8018EDC0); + if (*p2 != 0) *p2 -= 4; + if (D_8018EDC1 != 0) D_8018EDC1 -= 4; + if (D_8018EDC2 != 0) D_8018EDC2 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_8018EDBC), &(*(int *)&D_8018EDC0), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_8018ED48; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_8018ED48); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_801824C0; + extern s32 D_801824C8; + extern s32 D_801824D0; + extern s32 D_801824D8; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_801824C0, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_801824C8, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_801824D0, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_801824D8, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_801824E0[])(void); + +void func_8016C14C(void *a0) { + D_801824E0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_8018EDC4[]; +extern u8 D_8018EDCC[]; +extern u8 D_8018ED7C[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_8018EDC4, D_8018EDCC, D_8018ED7C); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_8018EDD8[]; + extern u8 D_8018EE98; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_8018EDD8[1] = 0xff; + D_8018EDD8[2] = 0x10; + D_8018EDD8[0] = 0x10; + D_8018EDD8[6] = 0; + D_8018EDD8[5] = 0; + D_8018EDD8[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_8018EDD8, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_8018EE98, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_8018EDD8); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8016AB6C", func_8016C998); + + +extern void (*D_801824E8[])(void); + +void func_8016CB84(void *a0) { + D_801824E8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_8018EE98[]; + + + Blk_8016CF04_8016CF04 *p = &D_8018EE98[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80182504[])(void); + +void func_8016D19C(void *a0) { + D_80182504[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_8018250C[])(void); + +void func_8016D428(void *a0) { + D_8018250C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80182574[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80182574[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80182518; +extern u8 D_80182524; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80182518, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80182524); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8016AB6C", func_8016DC20); + + +extern void (*D_801825A8[])(void); + +void func_8016DEA4(void *a0) { + D_801825A8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_801825B0[])(void); + +void func_8016DF20(void *a0) { + D_801825B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80182604[])(void); + +void func_8016E5B8(void *a0) { + D_80182604[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_801825C4[4]; + extern s32 D_801825E4; + extern s32 D_801825EC; + extern s32 D_801825F4; + extern s32 D_801825FC; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_801825C4[0], pp, &tmp); + RotTransSV(&D_801825C4[1], &prim.v[1], &tmp); + RotTransSV(&D_801825C4[2], &prim.v[2], &tmp); + RotTransSV(&D_801825C4[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_801825E4; + prim.f1 = D_801825EC; + prim.f2 = D_801825F4; + prim.f3 = D_801825FC; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80182644[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80182644[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80182638[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80182638[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80182628[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80182628[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80182638[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80182638[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80182638[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80182654; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80182654; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_801826CC[])(void); + +void func_8016F6E0(void *a0) { + D_801826CC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_801826D4[])(void); + +void func_8016F798(void *a0) { + D_801826D4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_801826DC[])(void); + +void func_8016F834(void *a0) { + D_801826DC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_801826E4[])(void); + +void func_8016F8E4(void *a0) { + D_801826E4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_801826EC[])(void); + +void func_8016F9C4(void *a0) { + D_801826EC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_801826F4[])(void); + +void func_8016FA84(void *a0) { + D_801826F4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80182700[])(void); + +void func_8016FB7C(void *a0) { + D_80182700[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_8018270C[])(void); + +void func_8016FC90(void *a0) { + D_8018270C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80182718[])(void); + +void func_8016FDB4(void *a0) { + D_80182718[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80182728[])(void); + +void func_8016FF30(void *a0) { + D_80182728[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80182738[])(void); + +void func_8016FFDC(void *a0) { + D_80182738[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80182740[])(void); + +void func_80170150(void *a0) { + D_80182740[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80182748[])(void); + +void func_80170240(void *a0) { + D_80182748[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80182750[])(void); + +void func_801702FC(void *a0) { + D_80182750[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80182758[])(void); + +void func_801703E0(void *a0) { + D_80182758[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80182760[])(void); + +void func_801704B0(void *a0) { + D_80182760[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80182768[])(void); + +void func_80170548(void *a0) { + D_80182768[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80182770[])(void); + +void func_801705F8(void *a0) { + D_80182770[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80182778[])(void); + +void func_801706AC(void *a0) { + D_80182778[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80182780[])(void); + +void func_80170748(void *a0) { + D_80182780[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80182788[])(void); + +void func_80170810(void *a0) { + D_80182788[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80182790[])(void); + +void func_80170AD8(void *a0) { + D_80182790[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80182798[])(void); + +void func_80170BD8(void *a0) { + D_80182798[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_801827A0[])(void); + +void func_80170C74(void *a0) { + D_801827A0[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8016AB6C", func_80170CF0); + + +extern void (*D_801827A8[])(void); + +void func_80170D68(void *a0) { + D_801827A8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_801827B0[])(void); + +void func_80170E34(void *a0) { + D_801827B0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_801827B8[])(void); + +void func_80170EFC(void *a0) { + D_801827B8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_801827C0[])(void); + +void func_80170FB0(void *a0) { + D_801827C0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_801827C8[])(void); + +void func_80171064(void *a0) { + D_801827C8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_801827D0[])(void); + +void func_80171120(void *a0) { + D_801827D0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_801827D8[])(void); + +void func_801711C0(void *a0) { + D_801827D8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_801827E0[])(void); + +void func_80171260(void *a0) { + D_801827E0[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_801827E8[])(void); + +void func_801714E4(void *a0) { + D_801827E8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8016AB6C", func_80172C50); + + +extern void (*D_8018282C[])(void); + +void func_80172CA0(void *a0) { + D_8018282C[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_801827F0; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_801827F0); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC05_000/ov_SC05_000_jr_8015AE2C.c b/src/ov_SC05_000/ov_SC05_000_jr_8015AE2C.c index 9e26a344c..4745fdfaa 100644 --- a/src/ov_SC05_000/ov_SC05_000_jr_8015AE2C.c +++ b/src/ov_SC05_000/ov_SC05_000_jr_8015AE2C.c @@ -5167,1784 +5167,3 @@ extern void (*D_801813F8[])(void); void func_8016AB30(void *a0) { D_801813F8[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80181474[])(void); - -void func_8016B4BC(void *a0) { - D_80181474[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_80199DB0; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_80199DB0); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80181468[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80181468; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_801814AC[]; -extern unsigned short D_801814B4[]; -extern unsigned short D_801814BC[]; -extern unsigned char D_80199DB8[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_80199DB8 + param_2 * 0x40); - puVar3 = D_801814AC[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_801814B4[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_801814BC[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_80199DB0; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_80199DB0, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_801814C4[])(void); - -void func_8016BBA4(void *a0) { - D_801814C4[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_80199EEC; - extern u8 D_80199EED; - extern u8 D_80199EEE; - extern M2C_UNK D_80199EF0; - extern u8 D_80199EF1; - extern u8 D_80199EF2; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_80199EEC) = 0x20; - D_80199EED = 0x20; - D_80199EEE = 0; - (*(u8 *)&D_80199EF0) = 0xc0; - D_80199EF1 = 0xc0; - D_80199EF2 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_80199EEC; -extern M2C_UNK D_80199EF0; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_80199EEC, &D_80199EF0, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_80199EED; - extern u8 D_80199EEE; - extern u8 D_80199EF1; - extern u8 D_80199EF2; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_80199EEC); - if (*p1 != 0) *p1 -= 4; - if (D_80199EED != 0) D_80199EED -= 4; - if (D_80199EEE != 0) D_80199EEE -= 4; - p2 = &(*(u8 *)&D_80199EF0); - if (*p2 != 0) *p2 -= 4; - if (D_80199EF1 != 0) D_80199EF1 -= 4; - if (D_80199EF2 != 0) D_80199EF2 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_80199EEC), &(*(int *)&D_80199EF0), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_80199E78; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_80199E78); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_801814D4; - extern s32 D_801814DC; - extern s32 D_801814E4; - extern s32 D_801814EC; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_801814D4, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_801814DC, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_801814E4, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_801814EC, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_801814F4[])(void); - -void func_8016C14C(void *a0) { - D_801814F4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_80199EF4[]; -extern u8 D_80199EFC[]; -extern u8 D_80199EAC[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_80199EF4, D_80199EFC, D_80199EAC); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_80199F08[]; - extern u8 D_80199FC8; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_80199F08[1] = 0xff; - D_80199F08[2] = 0x10; - D_80199F08[0] = 0x10; - D_80199F08[6] = 0; - D_80199F08[5] = 0; - D_80199F08[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_80199F08, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_80199FC8, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_80199F08); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8015AE2C", func_8016C998); - - -extern void (*D_801814FC[])(void); - -void func_8016CB84(void *a0) { - D_801814FC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_80199FC8[]; - - - Blk_8016CF04_8016CF04 *p = &D_80199FC8[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80181518[])(void); - -void func_8016D19C(void *a0) { - D_80181518[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80181520[])(void); - -void func_8016D428(void *a0) { - D_80181520[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80181588[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80181588[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_8018152C; -extern u8 D_80181538; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018152C, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80181538); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8015AE2C", func_8016DC20); - - -extern void (*D_801815BC[])(void); - -void func_8016DEA4(void *a0) { - D_801815BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_801815C4[])(void); - -void func_8016DF20(void *a0) { - D_801815C4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80181618[])(void); - -void func_8016E5B8(void *a0) { - D_80181618[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_801815D8[4]; - extern s32 D_801815F8; - extern s32 D_80181600; - extern s32 D_80181608; - extern s32 D_80181610; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_801815D8[0], pp, &tmp); - RotTransSV(&D_801815D8[1], &prim.v[1], &tmp); - RotTransSV(&D_801815D8[2], &prim.v[2], &tmp); - RotTransSV(&D_801815D8[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_801815F8; - prim.f1 = D_80181600; - prim.f2 = D_80181608; - prim.f3 = D_80181610; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80181658[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80181658[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_8018164C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_8018164C[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_8018163C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_8018163C[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018164C[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_8018164C[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_8018164C[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80181668; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80181668; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_801816E0[])(void); - -void func_8016F6E0(void *a0) { - D_801816E0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_801816E8[])(void); - -void func_8016F798(void *a0) { - D_801816E8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_801816F0[])(void); - -void func_8016F834(void *a0) { - D_801816F0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_801816F8[])(void); - -void func_8016F8E4(void *a0) { - D_801816F8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80181700[])(void); - -void func_8016F9C4(void *a0) { - D_80181700[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80181708[])(void); - -void func_8016FA84(void *a0) { - D_80181708[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80181714[])(void); - -void func_8016FB7C(void *a0) { - D_80181714[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80181720[])(void); - -void func_8016FC90(void *a0) { - D_80181720[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_8018172C[])(void); - -void func_8016FDB4(void *a0) { - D_8018172C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_8018173C[])(void); - -void func_8016FF30(void *a0) { - D_8018173C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_8018174C[])(void); - -void func_8016FFDC(void *a0) { - D_8018174C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80181754[])(void); - -void func_80170150(void *a0) { - D_80181754[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_8018175C[])(void); - -void func_80170240(void *a0) { - D_8018175C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80181764[])(void); - -void func_801702FC(void *a0) { - D_80181764[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_8018176C[])(void); - -void func_801703E0(void *a0) { - D_8018176C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80181774[])(void); - -void func_801704B0(void *a0) { - D_80181774[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_8018177C[])(void); - -void func_80170548(void *a0) { - D_8018177C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80181784[])(void); - -void func_801705F8(void *a0) { - D_80181784[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_8018178C[])(void); - -void func_801706AC(void *a0) { - D_8018178C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80181794[])(void); - -void func_80170748(void *a0) { - D_80181794[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_8018179C[])(void); - -void func_80170810(void *a0) { - D_8018179C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_801817A4[])(void); - -void func_80170AD8(void *a0) { - D_801817A4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_801817AC[])(void); - -void func_80170BD8(void *a0) { - D_801817AC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_801817B4[])(void); - -void func_80170C74(void *a0) { - D_801817B4[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8015AE2C", func_80170CF0); - - -extern void (*D_801817BC[])(void); - -void func_80170D68(void *a0) { - D_801817BC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_801817C4[])(void); - -void func_80170E34(void *a0) { - D_801817C4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_801817CC[])(void); - -void func_80170EFC(void *a0) { - D_801817CC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_801817D4[])(void); - -void func_80170FB0(void *a0) { - D_801817D4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_801817DC[])(void); - -void func_80171064(void *a0) { - D_801817DC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_801817E4[])(void); - -void func_80171120(void *a0) { - D_801817E4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_801817EC[])(void); - -void func_801711C0(void *a0) { - D_801817EC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_801817F4[])(void); - -void func_80171260(void *a0) { - D_801817F4[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_801817FC[])(void); - -void func_801714E4(void *a0) { - D_801817FC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8015AE2C", func_80172C50); - - -extern void (*D_80181840[])(void); - -void func_80172CA0(void *a0) { - D_80181840[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80181804; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80181804); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC05_000/ov_SC05_000_jr_8016AB6C.c b/src/ov_SC05_000/ov_SC05_000_jr_8016AB6C.c new file mode 100644 index 000000000..720e0cfe6 --- /dev/null +++ b/src/ov_SC05_000/ov_SC05_000_jr_8016AB6C.c @@ -0,0 +1,3925 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801807C4; +extern u8 D_80180734; +extern u8 D_80180710; +extern u8 D_801806EC; +extern u8 D_801807A0; +extern u8 D_8018077C; +extern u8 D_80180758; +extern u8 D_801806C8; +extern void func_80145934(void); +extern u8 D_80180854; +extern u8 D_80180830; +extern u8 D_8018080C; +extern u8 D_801807E8; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8017FC4C[]; +extern unsigned char D_8017FC7C[]; +extern unsigned char D_8017FCCC[]; +extern unsigned char D_8017FCFC[]; +extern unsigned char D_8017FD2C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8017FD7C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8017FE44[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8017FECC[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8017FED4; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_80199940; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_80199944; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8017FF04; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8017FFAC[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8017FFD0[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8017FFC0; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8017FFE4[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8017FFF0[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80180018[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80180008; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018002C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80180048[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80180038; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018005C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80180070[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80180084; +extern void (*D_801800AC[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018008C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801800F8[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801800FC[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80180560[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80180570[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_80199978; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80180598[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80180578; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80180588; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801805D8[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801805E0[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_801805AC; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801805EC[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_801805BC; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_80199980; +extern s32 D_8019998C; +extern s32 D_80199990; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80180628[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801805FC[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_80199988; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80180878[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80180698[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018091C[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80180A70[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018088C; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80180A78[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018089C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801808BC; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80180A80[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80180AA8[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80180AB4[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80180928[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80180B58; +extern void func_8015D380(s32 a0); +extern unsigned char D_8017FC3C[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80180B6C[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80180BA8[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80180BF0; +extern u16 D_80180BF2; +extern u16 D_80180BF4; +extern s32 D_80180BF8; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80180C00; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_8018090C; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80180C84[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80180D34[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80180D64[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80180DC8; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_80199998[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80180DEC[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801999F0[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80180E34[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80180E24; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_80199268[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80180E3C[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80180E90[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80180E58; +extern s16 D_80180E8C; +extern s16 D_80180E8A; +extern s16 D_80180E88; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80180E9C[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_80199A50; +extern u8 D_80199A51; +extern u8 D_80199A52; +extern u8 D_80199A53; +extern u8 D_80199A54; +extern u8 D_80199A55; +extern u8 D_80199A56; +extern u8 D_80199A57; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80180EAC[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_80199A90; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80180EF0[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80180F6C[]; +extern s32 D_80180F8C[]; +extern u8 D_80181008[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80181028[]; +extern u8 D_80181048[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_801810E4[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80181160[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_80199278; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_8018116C[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80181174[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_8018123C[])(void); +extern void func_80166618(void *a0); +extern void (*D_8018124C[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_8018125C[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80181268[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_801811C8[]; +extern u8 D_801811DC[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80181280[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80181288[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80181290[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80181298[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_801812A0[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_801812A8[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_801812B0[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80181364[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_8018136C[])(void); +extern void func_80169F00(void *a0); +extern char D_8018131C[]; +extern char D_801812DC[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_801813A4[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_801813B0[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_801813F8[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_801813B8[]; + extern u8 D_801813C8[]; + extern u8 D_80199D60[]; + extern u8 D_80199D88[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_801813B8, D_80199D60) + 3; + func_8001CE28(obj, D_80199D60); + } else { + var_s3 = func_80024054(D_801813C8, D_80199D88) + 9; + func_8001CE28(obj, D_80199D88); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80181474[])(void); + +void func_8016B4BC(void *a0) { + D_80181474[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_80199DB0; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_80199DB0); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80181468[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80181468; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_801814AC[]; +extern unsigned short D_801814B4[]; +extern unsigned short D_801814BC[]; +extern unsigned char D_80199DB8[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_80199DB8 + param_2 * 0x40); + puVar3 = D_801814AC[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_801814B4[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_801814BC[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_80199DB0; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_80199DB0, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_801814C4[])(void); + +void func_8016BBA4(void *a0) { + D_801814C4[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_80199EEC; + extern u8 D_80199EED; + extern u8 D_80199EEE; + extern M2C_UNK D_80199EF0; + extern u8 D_80199EF1; + extern u8 D_80199EF2; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_80199EEC) = 0x20; + D_80199EED = 0x20; + D_80199EEE = 0; + (*(u8 *)&D_80199EF0) = 0xc0; + D_80199EF1 = 0xc0; + D_80199EF2 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_80199EEC; +extern M2C_UNK D_80199EF0; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_80199EEC, &D_80199EF0, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_80199EED; + extern u8 D_80199EEE; + extern u8 D_80199EF1; + extern u8 D_80199EF2; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_80199EEC); + if (*p1 != 0) *p1 -= 4; + if (D_80199EED != 0) D_80199EED -= 4; + if (D_80199EEE != 0) D_80199EEE -= 4; + p2 = &(*(u8 *)&D_80199EF0); + if (*p2 != 0) *p2 -= 4; + if (D_80199EF1 != 0) D_80199EF1 -= 4; + if (D_80199EF2 != 0) D_80199EF2 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_80199EEC), &(*(int *)&D_80199EF0), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_80199E78; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_80199E78); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_801814D4; + extern s32 D_801814DC; + extern s32 D_801814E4; + extern s32 D_801814EC; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_801814D4, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_801814DC, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_801814E4, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_801814EC, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_801814F4[])(void); + +void func_8016C14C(void *a0) { + D_801814F4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_80199EF4[]; +extern u8 D_80199EFC[]; +extern u8 D_80199EAC[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_80199EF4, D_80199EFC, D_80199EAC); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_80199F08[]; + extern u8 D_80199FC8; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_80199F08[1] = 0xff; + D_80199F08[2] = 0x10; + D_80199F08[0] = 0x10; + D_80199F08[6] = 0; + D_80199F08[5] = 0; + D_80199F08[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_80199F08, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_80199FC8, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_80199F08); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8016AB6C", func_8016C998); + + +extern void (*D_801814FC[])(void); + +void func_8016CB84(void *a0) { + D_801814FC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_80199FC8[]; + + + Blk_8016CF04_8016CF04 *p = &D_80199FC8[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80181518[])(void); + +void func_8016D19C(void *a0) { + D_80181518[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80181520[])(void); + +void func_8016D428(void *a0) { + D_80181520[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80181588[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80181588[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_8018152C; +extern u8 D_80181538; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018152C, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80181538); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8016AB6C", func_8016DC20); + + +extern void (*D_801815BC[])(void); + +void func_8016DEA4(void *a0) { + D_801815BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_801815C4[])(void); + +void func_8016DF20(void *a0) { + D_801815C4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80181618[])(void); + +void func_8016E5B8(void *a0) { + D_80181618[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_801815D8[4]; + extern s32 D_801815F8; + extern s32 D_80181600; + extern s32 D_80181608; + extern s32 D_80181610; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_801815D8[0], pp, &tmp); + RotTransSV(&D_801815D8[1], &prim.v[1], &tmp); + RotTransSV(&D_801815D8[2], &prim.v[2], &tmp); + RotTransSV(&D_801815D8[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_801815F8; + prim.f1 = D_80181600; + prim.f2 = D_80181608; + prim.f3 = D_80181610; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80181658[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80181658[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_8018164C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_8018164C[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_8018163C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_8018163C[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018164C[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_8018164C[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_8018164C[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80181668; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80181668; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_801816E0[])(void); + +void func_8016F6E0(void *a0) { + D_801816E0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_801816E8[])(void); + +void func_8016F798(void *a0) { + D_801816E8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_801816F0[])(void); + +void func_8016F834(void *a0) { + D_801816F0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_801816F8[])(void); + +void func_8016F8E4(void *a0) { + D_801816F8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80181700[])(void); + +void func_8016F9C4(void *a0) { + D_80181700[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80181708[])(void); + +void func_8016FA84(void *a0) { + D_80181708[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80181714[])(void); + +void func_8016FB7C(void *a0) { + D_80181714[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80181720[])(void); + +void func_8016FC90(void *a0) { + D_80181720[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_8018172C[])(void); + +void func_8016FDB4(void *a0) { + D_8018172C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_8018173C[])(void); + +void func_8016FF30(void *a0) { + D_8018173C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_8018174C[])(void); + +void func_8016FFDC(void *a0) { + D_8018174C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80181754[])(void); + +void func_80170150(void *a0) { + D_80181754[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_8018175C[])(void); + +void func_80170240(void *a0) { + D_8018175C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80181764[])(void); + +void func_801702FC(void *a0) { + D_80181764[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_8018176C[])(void); + +void func_801703E0(void *a0) { + D_8018176C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80181774[])(void); + +void func_801704B0(void *a0) { + D_80181774[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_8018177C[])(void); + +void func_80170548(void *a0) { + D_8018177C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80181784[])(void); + +void func_801705F8(void *a0) { + D_80181784[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_8018178C[])(void); + +void func_801706AC(void *a0) { + D_8018178C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80181794[])(void); + +void func_80170748(void *a0) { + D_80181794[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_8018179C[])(void); + +void func_80170810(void *a0) { + D_8018179C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_801817A4[])(void); + +void func_80170AD8(void *a0) { + D_801817A4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_801817AC[])(void); + +void func_80170BD8(void *a0) { + D_801817AC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_801817B4[])(void); + +void func_80170C74(void *a0) { + D_801817B4[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8016AB6C", func_80170CF0); + + +extern void (*D_801817BC[])(void); + +void func_80170D68(void *a0) { + D_801817BC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_801817C4[])(void); + +void func_80170E34(void *a0) { + D_801817C4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_801817CC[])(void); + +void func_80170EFC(void *a0) { + D_801817CC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_801817D4[])(void); + +void func_80170FB0(void *a0) { + D_801817D4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_801817DC[])(void); + +void func_80171064(void *a0) { + D_801817DC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_801817E4[])(void); + +void func_80171120(void *a0) { + D_801817E4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_801817EC[])(void); + +void func_801711C0(void *a0) { + D_801817EC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_801817F4[])(void); + +void func_80171260(void *a0) { + D_801817F4[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_801817FC[])(void); + +void func_801714E4(void *a0) { + D_801817FC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8016AB6C", func_80172C50); + + +extern void (*D_80181840[])(void); + +void func_80172CA0(void *a0) { + D_80181840[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80181804; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80181804); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC05_001/ov_SC05_001_jr_8015AE2C.c b/src/ov_SC05_001/ov_SC05_001_jr_8015AE2C.c index c39965c75..3e9e5acbb 100644 --- a/src/ov_SC05_001/ov_SC05_001_jr_8015AE2C.c +++ b/src/ov_SC05_001/ov_SC05_001_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_80188BD4[])(void); void func_8016AB30(void *a0) { D_80188BD4[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80188C50[])(void); - -void func_8016B4BC(void *a0) { - D_80188C50[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801B4E70; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801B4E70); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80188C44[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80188C44; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80188C88[]; -extern unsigned short D_80188C90[]; -extern unsigned short D_80188C98[]; -extern unsigned char D_801B4E78[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801B4E78 + param_2 * 0x40); - puVar3 = D_80188C88[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80188C90[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80188C98[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801B4E70; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801B4E70, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80188CA0[])(void); - -void func_8016BBA4(void *a0) { - D_80188CA0[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801B4FAC; - extern u8 D_801B4FAD; - extern u8 D_801B4FAE; - extern M2C_UNK D_801B4FB0; - extern u8 D_801B4FB1; - extern u8 D_801B4FB2; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801B4FAC) = 0x20; - D_801B4FAD = 0x20; - D_801B4FAE = 0; - (*(u8 *)&D_801B4FB0) = 0xc0; - D_801B4FB1 = 0xc0; - D_801B4FB2 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801B4FAC; -extern M2C_UNK D_801B4FB0; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801B4FAC, &D_801B4FB0, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801B4FAD; - extern u8 D_801B4FAE; - extern u8 D_801B4FB1; - extern u8 D_801B4FB2; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801B4FAC); - if (*p1 != 0) *p1 -= 4; - if (D_801B4FAD != 0) D_801B4FAD -= 4; - if (D_801B4FAE != 0) D_801B4FAE -= 4; - p2 = &(*(u8 *)&D_801B4FB0); - if (*p2 != 0) *p2 -= 4; - if (D_801B4FB1 != 0) D_801B4FB1 -= 4; - if (D_801B4FB2 != 0) D_801B4FB2 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801B4FAC), &(*(int *)&D_801B4FB0), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801B4F38; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801B4F38); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80188CB0; - extern s32 D_80188CB8; - extern s32 D_80188CC0; - extern s32 D_80188CC8; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80188CB0, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80188CB8, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80188CC0, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80188CC8, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80188CD0[])(void); - -void func_8016C14C(void *a0) { - D_80188CD0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801B4FB4[]; -extern u8 D_801B4FBC[]; -extern u8 D_801B4F6C[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801B4FB4, D_801B4FBC, D_801B4F6C); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801B4FC8[]; - extern u8 D_801B5088; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801B4FC8[1] = 0xff; - D_801B4FC8[2] = 0x10; - D_801B4FC8[0] = 0x10; - D_801B4FC8[6] = 0; - D_801B4FC8[5] = 0; - D_801B4FC8[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801B4FC8, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801B5088, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801B4FC8); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8015AE2C", func_8016C998); - - -extern void (*D_80188CD8[])(void); - -void func_8016CB84(void *a0) { - D_80188CD8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801B5088[]; - - - Blk_8016CF04_8016CF04 *p = &D_801B5088[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80188CF4[])(void); - -void func_8016D19C(void *a0) { - D_80188CF4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80188CFC[])(void); - -void func_8016D428(void *a0) { - D_80188CFC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80188D64[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80188D64[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80188D08; -extern u8 D_80188D14; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80188D08, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80188D14); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80188D98[])(void); - -void func_8016DEA4(void *a0) { - D_80188D98[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80188DA0[])(void); - -void func_8016DF20(void *a0) { - D_80188DA0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80188DF4[])(void); - -void func_8016E5B8(void *a0) { - D_80188DF4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80188DB4[4]; - extern s32 D_80188DD4; - extern s32 D_80188DDC; - extern s32 D_80188DE4; - extern s32 D_80188DEC; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80188DB4[0], pp, &tmp); - RotTransSV(&D_80188DB4[1], &prim.v[1], &tmp); - RotTransSV(&D_80188DB4[2], &prim.v[2], &tmp); - RotTransSV(&D_80188DB4[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80188DD4; - prim.f1 = D_80188DDC; - prim.f2 = D_80188DE4; - prim.f3 = D_80188DEC; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80188E34[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80188E34[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80188E28[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80188E28[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80188E18[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80188E18[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80188E28[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80188E28[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80188E28[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80188E44; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80188E44; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80188EBC[])(void); - -void func_8016F6E0(void *a0) { - D_80188EBC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80188EC4[])(void); - -void func_8016F798(void *a0) { - D_80188EC4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80188ECC[])(void); - -void func_8016F834(void *a0) { - D_80188ECC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80188ED4[])(void); - -void func_8016F8E4(void *a0) { - D_80188ED4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80188EDC[])(void); - -void func_8016F9C4(void *a0) { - D_80188EDC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80188EE4[])(void); - -void func_8016FA84(void *a0) { - D_80188EE4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80188EF0[])(void); - -void func_8016FB7C(void *a0) { - D_80188EF0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80188EFC[])(void); - -void func_8016FC90(void *a0) { - D_80188EFC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80188F08[])(void); - -void func_8016FDB4(void *a0) { - D_80188F08[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80188F18[])(void); - -void func_8016FF30(void *a0) { - D_80188F18[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80188F28[])(void); - -void func_8016FFDC(void *a0) { - D_80188F28[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80188F30[])(void); - -void func_80170150(void *a0) { - D_80188F30[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80188F38[])(void); - -void func_80170240(void *a0) { - D_80188F38[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80188F40[])(void); - -void func_801702FC(void *a0) { - D_80188F40[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80188F48[])(void); - -void func_801703E0(void *a0) { - D_80188F48[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80188F50[])(void); - -void func_801704B0(void *a0) { - D_80188F50[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80188F58[])(void); - -void func_80170548(void *a0) { - D_80188F58[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80188F60[])(void); - -void func_801705F8(void *a0) { - D_80188F60[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80188F68[])(void); - -void func_801706AC(void *a0) { - D_80188F68[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80188F70[])(void); - -void func_80170748(void *a0) { - D_80188F70[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80188F78[])(void); - -void func_80170810(void *a0) { - D_80188F78[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80188F80[])(void); - -void func_80170AD8(void *a0) { - D_80188F80[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80188F88[])(void); - -void func_80170BD8(void *a0) { - D_80188F88[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80188F90[])(void); - -void func_80170C74(void *a0) { - D_80188F90[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80188F98[])(void); - -void func_80170D68(void *a0) { - D_80188F98[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80188FA0[])(void); - -void func_80170E34(void *a0) { - D_80188FA0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80188FA8[])(void); - -void func_80170EFC(void *a0) { - D_80188FA8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80188FB0[])(void); - -void func_80170FB0(void *a0) { - D_80188FB0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80188FB8[])(void); - -void func_80171064(void *a0) { - D_80188FB8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80188FC0[])(void); - -void func_80171120(void *a0) { - D_80188FC0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80188FC8[])(void); - -void func_801711C0(void *a0) { - D_80188FC8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80188FD0[])(void); - -void func_80171260(void *a0) { - D_80188FD0[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80188FD8[])(void); - -void func_801714E4(void *a0) { - D_80188FD8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8015AE2C", func_80172C50); - - -extern void (*D_8018901C[])(void); - -void func_80172CA0(void *a0) { - D_8018901C[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80188FE0; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80188FE0); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC05_001/ov_SC05_001_jr_8016AB6C.c b/src/ov_SC05_001/ov_SC05_001_jr_8016AB6C.c new file mode 100644 index 000000000..bb1506e37 --- /dev/null +++ b/src/ov_SC05_001/ov_SC05_001_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80187FA0; +extern u8 D_80187F10; +extern u8 D_80187EEC; +extern u8 D_80187EC8; +extern u8 D_80187F7C; +extern u8 D_80187F58; +extern u8 D_80187F34; +extern u8 D_80187EA4; +extern void func_80145934(void); +extern u8 D_80188030; +extern u8 D_8018800C; +extern u8 D_80187FE8; +extern u8 D_80187FC4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80187428[]; +extern unsigned char D_80187458[]; +extern unsigned char D_801874A8[]; +extern unsigned char D_801874D8[]; +extern unsigned char D_80187508[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80187558[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80187620[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801876A8[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801876B0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801B4A00; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801B4A04; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801876E0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80187788[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801877AC[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018779C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801877C0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801877CC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801877DC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801877F4[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801877E4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80187808[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80187824[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80187814; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80187838[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018784C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80187860; +extern void (*D_80187888[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80187868; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801878D4[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801878D8[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80187D3C[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80187D4C[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801B4A38; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80187D74[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80187D54; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80187D64; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80187DB4[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80187DBC[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80187D88; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80187DC8[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80187D98; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801B4A40; +extern s32 D_801B4A4C; +extern s32 D_801B4A50; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80187E04[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80187DD8[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801B4A48; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80188054[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80187E74[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_801880F8[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018824C[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80188068; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80188254[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80188078; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80188098; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_8018825C[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80188284[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80188290[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80188104[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80188334; +extern void func_8015D380(s32 a0); +extern unsigned char D_80187418[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80188348[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80188384[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_801883CC; +extern u16 D_801883CE; +extern u16 D_801883D0; +extern s32 D_801883D4; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_801883DC; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_801880E8; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80188460[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80188510[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80188540[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_801885A4; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801B4A58[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_801885C8[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801B4AB0[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80188610[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80188600; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801B421C[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80188618[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_8018866C[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80188634; +extern s16 D_80188668; +extern s16 D_80188666; +extern s16 D_80188664; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80188678[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801B4B10; +extern u8 D_801B4B11; +extern u8 D_801B4B12; +extern u8 D_801B4B13; +extern u8 D_801B4B14; +extern u8 D_801B4B15; +extern u8 D_801B4B16; +extern u8 D_801B4B17; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80188688[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801B4B50; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_801886CC[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80188748[]; +extern s32 D_80188768[]; +extern u8 D_801887E4[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80188804[]; +extern u8 D_80188824[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_801888C0[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_8018893C[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801B422C; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80188948[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80188950[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80188A18[])(void); +extern void func_80166618(void *a0); +extern void (*D_80188A28[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80188A38[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80188A44[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_801889A4[]; +extern u8 D_801889B8[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80188A5C[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80188A64[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80188A6C[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80188A74[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80188A7C[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80188A84[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80188A8C[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80188B40[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80188B48[])(void); +extern void func_80169F00(void *a0); +extern char D_80188AF8[]; +extern char D_80188AB8[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80188B80[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80188B8C[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80188BD4[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80188B94[]; + extern u8 D_80188BA4[]; + extern u8 D_801B4E20[]; + extern u8 D_801B4E48[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80188B94, D_801B4E20) + 3; + func_8001CE28(obj, D_801B4E20); + } else { + var_s3 = func_80024054(D_80188BA4, D_801B4E48) + 9; + func_8001CE28(obj, D_801B4E48); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80188C50[])(void); + +void func_8016B4BC(void *a0) { + D_80188C50[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801B4E70; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801B4E70); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80188C44[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80188C44; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80188C88[]; +extern unsigned short D_80188C90[]; +extern unsigned short D_80188C98[]; +extern unsigned char D_801B4E78[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801B4E78 + param_2 * 0x40); + puVar3 = D_80188C88[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80188C90[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80188C98[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801B4E70; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801B4E70, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80188CA0[])(void); + +void func_8016BBA4(void *a0) { + D_80188CA0[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801B4FAC; + extern u8 D_801B4FAD; + extern u8 D_801B4FAE; + extern M2C_UNK D_801B4FB0; + extern u8 D_801B4FB1; + extern u8 D_801B4FB2; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801B4FAC) = 0x20; + D_801B4FAD = 0x20; + D_801B4FAE = 0; + (*(u8 *)&D_801B4FB0) = 0xc0; + D_801B4FB1 = 0xc0; + D_801B4FB2 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801B4FAC; +extern M2C_UNK D_801B4FB0; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801B4FAC, &D_801B4FB0, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801B4FAD; + extern u8 D_801B4FAE; + extern u8 D_801B4FB1; + extern u8 D_801B4FB2; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801B4FAC); + if (*p1 != 0) *p1 -= 4; + if (D_801B4FAD != 0) D_801B4FAD -= 4; + if (D_801B4FAE != 0) D_801B4FAE -= 4; + p2 = &(*(u8 *)&D_801B4FB0); + if (*p2 != 0) *p2 -= 4; + if (D_801B4FB1 != 0) D_801B4FB1 -= 4; + if (D_801B4FB2 != 0) D_801B4FB2 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801B4FAC), &(*(int *)&D_801B4FB0), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801B4F38; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801B4F38); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80188CB0; + extern s32 D_80188CB8; + extern s32 D_80188CC0; + extern s32 D_80188CC8; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80188CB0, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80188CB8, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80188CC0, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80188CC8, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80188CD0[])(void); + +void func_8016C14C(void *a0) { + D_80188CD0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801B4FB4[]; +extern u8 D_801B4FBC[]; +extern u8 D_801B4F6C[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801B4FB4, D_801B4FBC, D_801B4F6C); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801B4FC8[]; + extern u8 D_801B5088; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801B4FC8[1] = 0xff; + D_801B4FC8[2] = 0x10; + D_801B4FC8[0] = 0x10; + D_801B4FC8[6] = 0; + D_801B4FC8[5] = 0; + D_801B4FC8[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801B4FC8, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801B5088, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801B4FC8); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8016AB6C", func_8016C998); + + +extern void (*D_80188CD8[])(void); + +void func_8016CB84(void *a0) { + D_80188CD8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801B5088[]; + + + Blk_8016CF04_8016CF04 *p = &D_801B5088[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80188CF4[])(void); + +void func_8016D19C(void *a0) { + D_80188CF4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80188CFC[])(void); + +void func_8016D428(void *a0) { + D_80188CFC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80188D64[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80188D64[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80188D08; +extern u8 D_80188D14; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80188D08, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80188D14); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80188D98[])(void); + +void func_8016DEA4(void *a0) { + D_80188D98[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80188DA0[])(void); + +void func_8016DF20(void *a0) { + D_80188DA0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80188DF4[])(void); + +void func_8016E5B8(void *a0) { + D_80188DF4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80188DB4[4]; + extern s32 D_80188DD4; + extern s32 D_80188DDC; + extern s32 D_80188DE4; + extern s32 D_80188DEC; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80188DB4[0], pp, &tmp); + RotTransSV(&D_80188DB4[1], &prim.v[1], &tmp); + RotTransSV(&D_80188DB4[2], &prim.v[2], &tmp); + RotTransSV(&D_80188DB4[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80188DD4; + prim.f1 = D_80188DDC; + prim.f2 = D_80188DE4; + prim.f3 = D_80188DEC; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80188E34[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80188E34[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80188E28[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80188E28[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80188E18[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80188E18[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80188E28[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80188E28[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80188E28[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80188E44; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80188E44; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80188EBC[])(void); + +void func_8016F6E0(void *a0) { + D_80188EBC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80188EC4[])(void); + +void func_8016F798(void *a0) { + D_80188EC4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80188ECC[])(void); + +void func_8016F834(void *a0) { + D_80188ECC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80188ED4[])(void); + +void func_8016F8E4(void *a0) { + D_80188ED4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80188EDC[])(void); + +void func_8016F9C4(void *a0) { + D_80188EDC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80188EE4[])(void); + +void func_8016FA84(void *a0) { + D_80188EE4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80188EF0[])(void); + +void func_8016FB7C(void *a0) { + D_80188EF0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80188EFC[])(void); + +void func_8016FC90(void *a0) { + D_80188EFC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80188F08[])(void); + +void func_8016FDB4(void *a0) { + D_80188F08[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80188F18[])(void); + +void func_8016FF30(void *a0) { + D_80188F18[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80188F28[])(void); + +void func_8016FFDC(void *a0) { + D_80188F28[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80188F30[])(void); + +void func_80170150(void *a0) { + D_80188F30[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80188F38[])(void); + +void func_80170240(void *a0) { + D_80188F38[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80188F40[])(void); + +void func_801702FC(void *a0) { + D_80188F40[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80188F48[])(void); + +void func_801703E0(void *a0) { + D_80188F48[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80188F50[])(void); + +void func_801704B0(void *a0) { + D_80188F50[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80188F58[])(void); + +void func_80170548(void *a0) { + D_80188F58[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80188F60[])(void); + +void func_801705F8(void *a0) { + D_80188F60[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80188F68[])(void); + +void func_801706AC(void *a0) { + D_80188F68[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80188F70[])(void); + +void func_80170748(void *a0) { + D_80188F70[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80188F78[])(void); + +void func_80170810(void *a0) { + D_80188F78[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80188F80[])(void); + +void func_80170AD8(void *a0) { + D_80188F80[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80188F88[])(void); + +void func_80170BD8(void *a0) { + D_80188F88[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80188F90[])(void); + +void func_80170C74(void *a0) { + D_80188F90[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80188F98[])(void); + +void func_80170D68(void *a0) { + D_80188F98[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80188FA0[])(void); + +void func_80170E34(void *a0) { + D_80188FA0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80188FA8[])(void); + +void func_80170EFC(void *a0) { + D_80188FA8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80188FB0[])(void); + +void func_80170FB0(void *a0) { + D_80188FB0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80188FB8[])(void); + +void func_80171064(void *a0) { + D_80188FB8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80188FC0[])(void); + +void func_80171120(void *a0) { + D_80188FC0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80188FC8[])(void); + +void func_801711C0(void *a0) { + D_80188FC8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80188FD0[])(void); + +void func_80171260(void *a0) { + D_80188FD0[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80188FD8[])(void); + +void func_801714E4(void *a0) { + D_80188FD8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8016AB6C", func_80172C50); + + +extern void (*D_8018901C[])(void); + +void func_80172CA0(void *a0) { + D_8018901C[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80188FE0; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80188FE0); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC05_002/ov_SC05_002_jr_8015AE2C.c b/src/ov_SC05_002/ov_SC05_002_jr_8015AE2C.c index ada5e84dd..90f9a4051 100644 --- a/src/ov_SC05_002/ov_SC05_002_jr_8015AE2C.c +++ b/src/ov_SC05_002/ov_SC05_002_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_80183394[])(void); void func_8016AB30(void *a0) { D_80183394[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80183410[])(void); - -void func_8016B4BC(void *a0) { - D_80183410[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_8019F110; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_8019F110); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80183404[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80183404; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80183448[]; -extern unsigned short D_80183450[]; -extern unsigned short D_80183458[]; -extern unsigned char D_8019F118[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_8019F118 + param_2 * 0x40); - puVar3 = D_80183448[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80183450[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80183458[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_8019F110; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_8019F110, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80183460[])(void); - -void func_8016BBA4(void *a0) { - D_80183460[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_8019F24C; - extern u8 D_8019F24D; - extern u8 D_8019F24E; - extern M2C_UNK D_8019F250; - extern u8 D_8019F251; - extern u8 D_8019F252; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_8019F24C) = 0x20; - D_8019F24D = 0x20; - D_8019F24E = 0; - (*(u8 *)&D_8019F250) = 0xc0; - D_8019F251 = 0xc0; - D_8019F252 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_8019F24C; -extern M2C_UNK D_8019F250; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_8019F24C, &D_8019F250, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_8019F24D; - extern u8 D_8019F24E; - extern u8 D_8019F251; - extern u8 D_8019F252; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_8019F24C); - if (*p1 != 0) *p1 -= 4; - if (D_8019F24D != 0) D_8019F24D -= 4; - if (D_8019F24E != 0) D_8019F24E -= 4; - p2 = &(*(u8 *)&D_8019F250); - if (*p2 != 0) *p2 -= 4; - if (D_8019F251 != 0) D_8019F251 -= 4; - if (D_8019F252 != 0) D_8019F252 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_8019F24C), &(*(int *)&D_8019F250), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_8019F1D8; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_8019F1D8); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80183470; - extern s32 D_80183478; - extern s32 D_80183480; - extern s32 D_80183488; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80183470, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80183478, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80183480, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80183488, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80183490[])(void); - -void func_8016C14C(void *a0) { - D_80183490[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_8019F254[]; -extern u8 D_8019F25C[]; -extern u8 D_8019F20C[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_8019F254, D_8019F25C, D_8019F20C); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_8019F268[]; - extern u8 D_8019F328; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_8019F268[1] = 0xff; - D_8019F268[2] = 0x10; - D_8019F268[0] = 0x10; - D_8019F268[6] = 0; - D_8019F268[5] = 0; - D_8019F268[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_8019F268, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_8019F328, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_8019F268); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8015AE2C", func_8016C998); - - -extern void (*D_80183498[])(void); - -void func_8016CB84(void *a0) { - D_80183498[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_8019F328[]; - - - Blk_8016CF04_8016CF04 *p = &D_8019F328[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_801834B4[])(void); - -void func_8016D19C(void *a0) { - D_801834B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_801834BC[])(void); - -void func_8016D428(void *a0) { - D_801834BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80183524[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80183524[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_801834C8; -extern u8 D_801834D4; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801834C8, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801834D4); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80183558[])(void); - -void func_8016DEA4(void *a0) { - D_80183558[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80183560[])(void); - -void func_8016DF20(void *a0) { - D_80183560[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_801835B4[])(void); - -void func_8016E5B8(void *a0) { - D_801835B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80183574[4]; - extern s32 D_80183594; - extern s32 D_8018359C; - extern s32 D_801835A4; - extern s32 D_801835AC; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80183574[0], pp, &tmp); - RotTransSV(&D_80183574[1], &prim.v[1], &tmp); - RotTransSV(&D_80183574[2], &prim.v[2], &tmp); - RotTransSV(&D_80183574[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80183594; - prim.f1 = D_8018359C; - prim.f2 = D_801835A4; - prim.f3 = D_801835AC; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_801835F4[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_801835F4[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_801835E8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_801835E8[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_801835D8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_801835D8[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801835E8[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_801835E8[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_801835E8[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80183604; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80183604; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_8018367C[])(void); - -void func_8016F6E0(void *a0) { - D_8018367C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80183684[])(void); - -void func_8016F798(void *a0) { - D_80183684[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_8018368C[])(void); - -void func_8016F834(void *a0) { - D_8018368C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80183694[])(void); - -void func_8016F8E4(void *a0) { - D_80183694[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_8018369C[])(void); - -void func_8016F9C4(void *a0) { - D_8018369C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_801836A4[])(void); - -void func_8016FA84(void *a0) { - D_801836A4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_801836B0[])(void); - -void func_8016FB7C(void *a0) { - D_801836B0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_801836BC[])(void); - -void func_8016FC90(void *a0) { - D_801836BC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_801836C8[])(void); - -void func_8016FDB4(void *a0) { - D_801836C8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_801836D8[])(void); - -void func_8016FF30(void *a0) { - D_801836D8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_801836E8[])(void); - -void func_8016FFDC(void *a0) { - D_801836E8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_801836F0[])(void); - -void func_80170150(void *a0) { - D_801836F0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_801836F8[])(void); - -void func_80170240(void *a0) { - D_801836F8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80183700[])(void); - -void func_801702FC(void *a0) { - D_80183700[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80183708[])(void); - -void func_801703E0(void *a0) { - D_80183708[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80183710[])(void); - -void func_801704B0(void *a0) { - D_80183710[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80183718[])(void); - -void func_80170548(void *a0) { - D_80183718[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80183720[])(void); - -void func_801705F8(void *a0) { - D_80183720[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80183728[])(void); - -void func_801706AC(void *a0) { - D_80183728[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80183730[])(void); - -void func_80170748(void *a0) { - D_80183730[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80183738[])(void); - -void func_80170810(void *a0) { - D_80183738[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80183740[])(void); - -void func_80170AD8(void *a0) { - D_80183740[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80183748[])(void); - -void func_80170BD8(void *a0) { - D_80183748[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80183750[])(void); - -void func_80170C74(void *a0) { - D_80183750[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80183758[])(void); - -void func_80170D68(void *a0) { - D_80183758[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80183760[])(void); - -void func_80170E34(void *a0) { - D_80183760[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80183768[])(void); - -void func_80170EFC(void *a0) { - D_80183768[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80183770[])(void); - -void func_80170FB0(void *a0) { - D_80183770[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80183778[])(void); - -void func_80171064(void *a0) { - D_80183778[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80183780[])(void); - -void func_80171120(void *a0) { - D_80183780[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80183788[])(void); - -void func_801711C0(void *a0) { - D_80183788[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80183790[])(void); - -void func_80171260(void *a0) { - D_80183790[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80183798[])(void); - -void func_801714E4(void *a0) { - D_80183798[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8015AE2C", func_80172C50); - - -extern void (*D_801837DC[])(void); - -void func_80172CA0(void *a0) { - D_801837DC[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_801837A0; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_801837A0); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC05_002/ov_SC05_002_jr_8016AB6C.c b/src/ov_SC05_002/ov_SC05_002_jr_8016AB6C.c new file mode 100644 index 000000000..3e0980c17 --- /dev/null +++ b/src/ov_SC05_002/ov_SC05_002_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80182760; +extern u8 D_801826D0; +extern u8 D_801826AC; +extern u8 D_80182688; +extern u8 D_8018273C; +extern u8 D_80182718; +extern u8 D_801826F4; +extern u8 D_80182664; +extern void func_80145934(void); +extern u8 D_801827F0; +extern u8 D_801827CC; +extern u8 D_801827A8; +extern u8 D_80182784; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80181BE8[]; +extern unsigned char D_80181C18[]; +extern unsigned char D_80181C68[]; +extern unsigned char D_80181C98[]; +extern unsigned char D_80181CC8[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80181D18[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80181DE0[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80181E68[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80181E70; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8019ECA0; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019ECA4; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80181EA0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80181F48[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80181F6C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80181F5C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80181F80[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80181F8C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80181F9C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80181FB4[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80181FA4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80181FC8[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80181FE4[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80181FD4; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80181FF8[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018200C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80182020; +extern void (*D_80182048[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80182028; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80182094[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80182098[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_801824FC[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018250C[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_8019ECD8; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80182534[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80182514; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80182524; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80182574[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018257C[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80182548; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80182588[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80182558; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_8019ECE0; +extern s32 D_8019ECEC; +extern s32 D_8019ECF0; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801825C4[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80182598[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_8019ECE8; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80182814[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80182634[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_801828B8[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80182A0C[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80182828; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80182A14[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80182838; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80182858; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80182A1C[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80182A44[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80182A50[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_801828C4[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80182AF4; +extern void func_8015D380(s32 a0); +extern unsigned char D_80181BD8[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80182B08[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80182B44[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80182B8C; +extern u16 D_80182B8E; +extern u16 D_80182B90; +extern s32 D_80182B94; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80182B9C; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_801828A8; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80182C20[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80182CD0[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80182D00[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80182D64; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_8019ECF8[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80182D88[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_8019ED50[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80182DD0[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80182DC0; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_8019E5C8[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80182DD8[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80182E2C[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80182DF4; +extern s16 D_80182E28; +extern s16 D_80182E26; +extern s16 D_80182E24; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80182E38[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_8019EDB0; +extern u8 D_8019EDB1; +extern u8 D_8019EDB2; +extern u8 D_8019EDB3; +extern u8 D_8019EDB4; +extern u8 D_8019EDB5; +extern u8 D_8019EDB6; +extern u8 D_8019EDB7; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80182E48[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_8019EDF0; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80182E8C[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80182F08[]; +extern s32 D_80182F28[]; +extern u8 D_80182FA4[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80182FC4[]; +extern u8 D_80182FE4[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80183080[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_801830FC[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_8019E5D8; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80183108[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80183110[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_801831D8[])(void); +extern void func_80166618(void *a0); +extern void (*D_801831E8[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_801831F8[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80183204[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80183164[]; +extern u8 D_80183178[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_8018321C[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80183224[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_8018322C[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80183234[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_8018323C[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80183244[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_8018324C[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80183300[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80183308[])(void); +extern void func_80169F00(void *a0); +extern char D_801832B8[]; +extern char D_80183278[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80183340[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_8018334C[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80183394[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80183354[]; + extern u8 D_80183364[]; + extern u8 D_8019F0C0[]; + extern u8 D_8019F0E8[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80183354, D_8019F0C0) + 3; + func_8001CE28(obj, D_8019F0C0); + } else { + var_s3 = func_80024054(D_80183364, D_8019F0E8) + 9; + func_8001CE28(obj, D_8019F0E8); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80183410[])(void); + +void func_8016B4BC(void *a0) { + D_80183410[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_8019F110; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_8019F110); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80183404[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80183404; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80183448[]; +extern unsigned short D_80183450[]; +extern unsigned short D_80183458[]; +extern unsigned char D_8019F118[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_8019F118 + param_2 * 0x40); + puVar3 = D_80183448[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80183450[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80183458[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_8019F110; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_8019F110, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80183460[])(void); + +void func_8016BBA4(void *a0) { + D_80183460[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_8019F24C; + extern u8 D_8019F24D; + extern u8 D_8019F24E; + extern M2C_UNK D_8019F250; + extern u8 D_8019F251; + extern u8 D_8019F252; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_8019F24C) = 0x20; + D_8019F24D = 0x20; + D_8019F24E = 0; + (*(u8 *)&D_8019F250) = 0xc0; + D_8019F251 = 0xc0; + D_8019F252 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_8019F24C; +extern M2C_UNK D_8019F250; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_8019F24C, &D_8019F250, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_8019F24D; + extern u8 D_8019F24E; + extern u8 D_8019F251; + extern u8 D_8019F252; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_8019F24C); + if (*p1 != 0) *p1 -= 4; + if (D_8019F24D != 0) D_8019F24D -= 4; + if (D_8019F24E != 0) D_8019F24E -= 4; + p2 = &(*(u8 *)&D_8019F250); + if (*p2 != 0) *p2 -= 4; + if (D_8019F251 != 0) D_8019F251 -= 4; + if (D_8019F252 != 0) D_8019F252 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_8019F24C), &(*(int *)&D_8019F250), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_8019F1D8; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_8019F1D8); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80183470; + extern s32 D_80183478; + extern s32 D_80183480; + extern s32 D_80183488; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80183470, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80183478, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80183480, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80183488, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80183490[])(void); + +void func_8016C14C(void *a0) { + D_80183490[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_8019F254[]; +extern u8 D_8019F25C[]; +extern u8 D_8019F20C[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_8019F254, D_8019F25C, D_8019F20C); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_8019F268[]; + extern u8 D_8019F328; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_8019F268[1] = 0xff; + D_8019F268[2] = 0x10; + D_8019F268[0] = 0x10; + D_8019F268[6] = 0; + D_8019F268[5] = 0; + D_8019F268[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_8019F268, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_8019F328, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_8019F268); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8016AB6C", func_8016C998); + + +extern void (*D_80183498[])(void); + +void func_8016CB84(void *a0) { + D_80183498[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_8019F328[]; + + + Blk_8016CF04_8016CF04 *p = &D_8019F328[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_801834B4[])(void); + +void func_8016D19C(void *a0) { + D_801834B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_801834BC[])(void); + +void func_8016D428(void *a0) { + D_801834BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80183524[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80183524[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_801834C8; +extern u8 D_801834D4; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801834C8, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801834D4); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80183558[])(void); + +void func_8016DEA4(void *a0) { + D_80183558[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80183560[])(void); + +void func_8016DF20(void *a0) { + D_80183560[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_801835B4[])(void); + +void func_8016E5B8(void *a0) { + D_801835B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80183574[4]; + extern s32 D_80183594; + extern s32 D_8018359C; + extern s32 D_801835A4; + extern s32 D_801835AC; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80183574[0], pp, &tmp); + RotTransSV(&D_80183574[1], &prim.v[1], &tmp); + RotTransSV(&D_80183574[2], &prim.v[2], &tmp); + RotTransSV(&D_80183574[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80183594; + prim.f1 = D_8018359C; + prim.f2 = D_801835A4; + prim.f3 = D_801835AC; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_801835F4[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_801835F4[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_801835E8[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_801835E8[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_801835D8[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_801835D8[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801835E8[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_801835E8[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_801835E8[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80183604; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80183604; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_8018367C[])(void); + +void func_8016F6E0(void *a0) { + D_8018367C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80183684[])(void); + +void func_8016F798(void *a0) { + D_80183684[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_8018368C[])(void); + +void func_8016F834(void *a0) { + D_8018368C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80183694[])(void); + +void func_8016F8E4(void *a0) { + D_80183694[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_8018369C[])(void); + +void func_8016F9C4(void *a0) { + D_8018369C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_801836A4[])(void); + +void func_8016FA84(void *a0) { + D_801836A4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_801836B0[])(void); + +void func_8016FB7C(void *a0) { + D_801836B0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_801836BC[])(void); + +void func_8016FC90(void *a0) { + D_801836BC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_801836C8[])(void); + +void func_8016FDB4(void *a0) { + D_801836C8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_801836D8[])(void); + +void func_8016FF30(void *a0) { + D_801836D8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_801836E8[])(void); + +void func_8016FFDC(void *a0) { + D_801836E8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_801836F0[])(void); + +void func_80170150(void *a0) { + D_801836F0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_801836F8[])(void); + +void func_80170240(void *a0) { + D_801836F8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80183700[])(void); + +void func_801702FC(void *a0) { + D_80183700[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80183708[])(void); + +void func_801703E0(void *a0) { + D_80183708[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80183710[])(void); + +void func_801704B0(void *a0) { + D_80183710[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80183718[])(void); + +void func_80170548(void *a0) { + D_80183718[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80183720[])(void); + +void func_801705F8(void *a0) { + D_80183720[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80183728[])(void); + +void func_801706AC(void *a0) { + D_80183728[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80183730[])(void); + +void func_80170748(void *a0) { + D_80183730[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80183738[])(void); + +void func_80170810(void *a0) { + D_80183738[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80183740[])(void); + +void func_80170AD8(void *a0) { + D_80183740[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80183748[])(void); + +void func_80170BD8(void *a0) { + D_80183748[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80183750[])(void); + +void func_80170C74(void *a0) { + D_80183750[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80183758[])(void); + +void func_80170D68(void *a0) { + D_80183758[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80183760[])(void); + +void func_80170E34(void *a0) { + D_80183760[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80183768[])(void); + +void func_80170EFC(void *a0) { + D_80183768[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80183770[])(void); + +void func_80170FB0(void *a0) { + D_80183770[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80183778[])(void); + +void func_80171064(void *a0) { + D_80183778[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80183780[])(void); + +void func_80171120(void *a0) { + D_80183780[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80183788[])(void); + +void func_801711C0(void *a0) { + D_80183788[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80183790[])(void); + +void func_80171260(void *a0) { + D_80183790[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80183798[])(void); + +void func_801714E4(void *a0) { + D_80183798[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8016AB6C", func_80172C50); + + +extern void (*D_801837DC[])(void); + +void func_80172CA0(void *a0) { + D_801837DC[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_801837A0; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_801837A0); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC05_003/ov_SC05_003_jr_8015AE2C.c b/src/ov_SC05_003/ov_SC05_003_jr_8015AE2C.c index cb0402c75..4728ec2c1 100644 --- a/src/ov_SC05_003/ov_SC05_003_jr_8015AE2C.c +++ b/src/ov_SC05_003/ov_SC05_003_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_801856CC[])(void); void func_8016AB30(void *a0) { D_801856CC[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80185748[])(void); - -void func_8016B4BC(void *a0) { - D_80185748[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801ABC20; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801ABC20); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_8018573C[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_8018573C; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80185780[]; -extern unsigned short D_80185788[]; -extern unsigned short D_80185790[]; -extern unsigned char D_801ABC28[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801ABC28 + param_2 * 0x40); - puVar3 = D_80185780[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80185788[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80185790[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801ABC20; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801ABC20, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80185798[])(void); - -void func_8016BBA4(void *a0) { - D_80185798[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801ABD5C; - extern u8 D_801ABD5D; - extern u8 D_801ABD5E; - extern M2C_UNK D_801ABD60; - extern u8 D_801ABD61; - extern u8 D_801ABD62; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801ABD5C) = 0x20; - D_801ABD5D = 0x20; - D_801ABD5E = 0; - (*(u8 *)&D_801ABD60) = 0xc0; - D_801ABD61 = 0xc0; - D_801ABD62 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801ABD5C; -extern M2C_UNK D_801ABD60; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801ABD5C, &D_801ABD60, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801ABD5D; - extern u8 D_801ABD5E; - extern u8 D_801ABD61; - extern u8 D_801ABD62; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801ABD5C); - if (*p1 != 0) *p1 -= 4; - if (D_801ABD5D != 0) D_801ABD5D -= 4; - if (D_801ABD5E != 0) D_801ABD5E -= 4; - p2 = &(*(u8 *)&D_801ABD60); - if (*p2 != 0) *p2 -= 4; - if (D_801ABD61 != 0) D_801ABD61 -= 4; - if (D_801ABD62 != 0) D_801ABD62 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801ABD5C), &(*(int *)&D_801ABD60), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801ABCE8; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801ABCE8); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_801857A8; - extern s32 D_801857B0; - extern s32 D_801857B8; - extern s32 D_801857C0; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_801857A8, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_801857B0, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_801857B8, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_801857C0, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_801857C8[])(void); - -void func_8016C14C(void *a0) { - D_801857C8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801ABD64[]; -extern u8 D_801ABD6C[]; -extern u8 D_801ABD1C[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801ABD64, D_801ABD6C, D_801ABD1C); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801ABD78[]; - extern u8 D_801ABE38; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801ABD78[1] = 0xff; - D_801ABD78[2] = 0x10; - D_801ABD78[0] = 0x10; - D_801ABD78[6] = 0; - D_801ABD78[5] = 0; - D_801ABD78[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801ABD78, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801ABE38, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801ABD78); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8015AE2C", func_8016C998); - - -extern void (*D_801857D0[])(void); - -void func_8016CB84(void *a0) { - D_801857D0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801ABE38[]; - - - Blk_8016CF04_8016CF04 *p = &D_801ABE38[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_801857EC[])(void); - -void func_8016D19C(void *a0) { - D_801857EC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_801857F4[])(void); - -void func_8016D428(void *a0) { - D_801857F4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_8018585C[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_8018585C[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80185800; -extern u8 D_8018580C; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80185800, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018580C); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80185890[])(void); - -void func_8016DEA4(void *a0) { - D_80185890[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80185898[])(void); - -void func_8016DF20(void *a0) { - D_80185898[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_801858EC[])(void); - -void func_8016E5B8(void *a0) { - D_801858EC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_801858AC[4]; - extern s32 D_801858CC; - extern s32 D_801858D4; - extern s32 D_801858DC; - extern s32 D_801858E4; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_801858AC[0], pp, &tmp); - RotTransSV(&D_801858AC[1], &prim.v[1], &tmp); - RotTransSV(&D_801858AC[2], &prim.v[2], &tmp); - RotTransSV(&D_801858AC[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_801858CC; - prim.f1 = D_801858D4; - prim.f2 = D_801858DC; - prim.f3 = D_801858E4; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_8018592C[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_8018592C[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80185920[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80185920[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80185910[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80185910[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80185920[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80185920[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80185920[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_8018593C; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_8018593C; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_801859B4[])(void); - -void func_8016F6E0(void *a0) { - D_801859B4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_801859BC[])(void); - -void func_8016F798(void *a0) { - D_801859BC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_801859C4[])(void); - -void func_8016F834(void *a0) { - D_801859C4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_801859CC[])(void); - -void func_8016F8E4(void *a0) { - D_801859CC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_801859D4[])(void); - -void func_8016F9C4(void *a0) { - D_801859D4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_801859DC[])(void); - -void func_8016FA84(void *a0) { - D_801859DC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_801859E8[])(void); - -void func_8016FB7C(void *a0) { - D_801859E8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_801859F4[])(void); - -void func_8016FC90(void *a0) { - D_801859F4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80185A00[])(void); - -void func_8016FDB4(void *a0) { - D_80185A00[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80185A10[])(void); - -void func_8016FF30(void *a0) { - D_80185A10[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80185A20[])(void); - -void func_8016FFDC(void *a0) { - D_80185A20[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80185A28[])(void); - -void func_80170150(void *a0) { - D_80185A28[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80185A30[])(void); - -void func_80170240(void *a0) { - D_80185A30[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80185A38[])(void); - -void func_801702FC(void *a0) { - D_80185A38[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80185A40[])(void); - -void func_801703E0(void *a0) { - D_80185A40[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80185A48[])(void); - -void func_801704B0(void *a0) { - D_80185A48[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80185A50[])(void); - -void func_80170548(void *a0) { - D_80185A50[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80185A58[])(void); - -void func_801705F8(void *a0) { - D_80185A58[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80185A60[])(void); - -void func_801706AC(void *a0) { - D_80185A60[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80185A68[])(void); - -void func_80170748(void *a0) { - D_80185A68[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80185A70[])(void); - -void func_80170810(void *a0) { - D_80185A70[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80185A78[])(void); - -void func_80170AD8(void *a0) { - D_80185A78[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80185A80[])(void); - -void func_80170BD8(void *a0) { - D_80185A80[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80185A88[])(void); - -void func_80170C74(void *a0) { - D_80185A88[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80185A90[])(void); - -void func_80170D68(void *a0) { - D_80185A90[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80185A98[])(void); - -void func_80170E34(void *a0) { - D_80185A98[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80185AA0[])(void); - -void func_80170EFC(void *a0) { - D_80185AA0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80185AA8[])(void); - -void func_80170FB0(void *a0) { - D_80185AA8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80185AB0[])(void); - -void func_80171064(void *a0) { - D_80185AB0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80185AB8[])(void); - -void func_80171120(void *a0) { - D_80185AB8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80185AC0[])(void); - -void func_801711C0(void *a0) { - D_80185AC0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80185AC8[])(void); - -void func_80171260(void *a0) { - D_80185AC8[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80185AD0[])(void); - -void func_801714E4(void *a0) { - D_80185AD0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8015AE2C", func_80172C50); - - -extern void (*D_80185B14[])(void); - -void func_80172CA0(void *a0) { - D_80185B14[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80185AD8; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80185AD8); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC05_003/ov_SC05_003_jr_8016AB6C.c b/src/ov_SC05_003/ov_SC05_003_jr_8016AB6C.c new file mode 100644 index 000000000..b32a022b0 --- /dev/null +++ b/src/ov_SC05_003/ov_SC05_003_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80184A98; +extern u8 D_80184A08; +extern u8 D_801849E4; +extern u8 D_801849C0; +extern u8 D_80184A74; +extern u8 D_80184A50; +extern u8 D_80184A2C; +extern u8 D_8018499C; +extern void func_80145934(void); +extern u8 D_80184B28; +extern u8 D_80184B04; +extern u8 D_80184AE0; +extern u8 D_80184ABC; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80183F20[]; +extern unsigned char D_80183F50[]; +extern unsigned char D_80183FA0[]; +extern unsigned char D_80183FD0[]; +extern unsigned char D_80184000[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80184050[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80184118[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801841A0[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801841A8; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801AB7B0; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801AB7B4; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801841D8; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80184280[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801842A4[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80184294; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801842B8[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801842C4[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801842D4[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801842EC[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801842DC; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80184300[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018431C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018430C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80184330[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80184344[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80184358; +extern void (*D_80184380[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80184360; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801843CC[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801843D0[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80184834[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80184844[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801AB7E8; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018486C[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018484C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018485C; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801848AC[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801848B4[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80184880; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801848C0[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80184890; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801AB7F0; +extern s32 D_801AB7FC; +extern s32 D_801AB800; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801848FC[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801848D0[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801AB7F8; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80184B4C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018496C[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80184BF0[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80184D44[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80184B60; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80184D4C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80184B70; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80184B90; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80184D54[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80184D7C[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80184D88[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80184BFC[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80184E2C; +extern void func_8015D380(s32 a0); +extern unsigned char D_80183F10[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80184E40[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80184E7C[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80184EC4; +extern u16 D_80184EC6; +extern u16 D_80184EC8; +extern s32 D_80184ECC; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80184ED4; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80184BE0; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80184F58[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80185008[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80185038[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_8018509C; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801AB808[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_801850C0[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801AB860[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80185108[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_801850F8; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801AB0C4[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80185110[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80185164[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_8018512C; +extern s16 D_80185160; +extern s16 D_8018515E; +extern s16 D_8018515C; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80185170[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801AB8C0; +extern u8 D_801AB8C1; +extern u8 D_801AB8C2; +extern u8 D_801AB8C3; +extern u8 D_801AB8C4; +extern u8 D_801AB8C5; +extern u8 D_801AB8C6; +extern u8 D_801AB8C7; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80185180[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801AB900; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_801851C4[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80185240[]; +extern s32 D_80185260[]; +extern u8 D_801852DC[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_801852FC[]; +extern u8 D_8018531C[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_801853B8[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80185434[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801AB0D4; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80185440[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80185448[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80185510[])(void); +extern void func_80166618(void *a0); +extern void (*D_80185520[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80185530[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_8018553C[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_8018549C[]; +extern u8 D_801854B0[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80185554[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_8018555C[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80185564[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_8018556C[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80185574[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_8018557C[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80185584[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80185638[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80185640[])(void); +extern void func_80169F00(void *a0); +extern char D_801855F0[]; +extern char D_801855B0[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80185678[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80185684[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_801856CC[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_8018568C[]; + extern u8 D_8018569C[]; + extern u8 D_801ABBD0[]; + extern u8 D_801ABBF8[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_8018568C, D_801ABBD0) + 3; + func_8001CE28(obj, D_801ABBD0); + } else { + var_s3 = func_80024054(D_8018569C, D_801ABBF8) + 9; + func_8001CE28(obj, D_801ABBF8); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80185748[])(void); + +void func_8016B4BC(void *a0) { + D_80185748[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801ABC20; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801ABC20); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_8018573C[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_8018573C; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80185780[]; +extern unsigned short D_80185788[]; +extern unsigned short D_80185790[]; +extern unsigned char D_801ABC28[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801ABC28 + param_2 * 0x40); + puVar3 = D_80185780[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80185788[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80185790[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801ABC20; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801ABC20, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80185798[])(void); + +void func_8016BBA4(void *a0) { + D_80185798[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801ABD5C; + extern u8 D_801ABD5D; + extern u8 D_801ABD5E; + extern M2C_UNK D_801ABD60; + extern u8 D_801ABD61; + extern u8 D_801ABD62; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801ABD5C) = 0x20; + D_801ABD5D = 0x20; + D_801ABD5E = 0; + (*(u8 *)&D_801ABD60) = 0xc0; + D_801ABD61 = 0xc0; + D_801ABD62 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801ABD5C; +extern M2C_UNK D_801ABD60; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801ABD5C, &D_801ABD60, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801ABD5D; + extern u8 D_801ABD5E; + extern u8 D_801ABD61; + extern u8 D_801ABD62; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801ABD5C); + if (*p1 != 0) *p1 -= 4; + if (D_801ABD5D != 0) D_801ABD5D -= 4; + if (D_801ABD5E != 0) D_801ABD5E -= 4; + p2 = &(*(u8 *)&D_801ABD60); + if (*p2 != 0) *p2 -= 4; + if (D_801ABD61 != 0) D_801ABD61 -= 4; + if (D_801ABD62 != 0) D_801ABD62 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801ABD5C), &(*(int *)&D_801ABD60), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801ABCE8; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801ABCE8); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_801857A8; + extern s32 D_801857B0; + extern s32 D_801857B8; + extern s32 D_801857C0; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_801857A8, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_801857B0, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_801857B8, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_801857C0, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_801857C8[])(void); + +void func_8016C14C(void *a0) { + D_801857C8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801ABD64[]; +extern u8 D_801ABD6C[]; +extern u8 D_801ABD1C[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801ABD64, D_801ABD6C, D_801ABD1C); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801ABD78[]; + extern u8 D_801ABE38; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801ABD78[1] = 0xff; + D_801ABD78[2] = 0x10; + D_801ABD78[0] = 0x10; + D_801ABD78[6] = 0; + D_801ABD78[5] = 0; + D_801ABD78[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801ABD78, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801ABE38, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801ABD78); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8016AB6C", func_8016C998); + + +extern void (*D_801857D0[])(void); + +void func_8016CB84(void *a0) { + D_801857D0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801ABE38[]; + + + Blk_8016CF04_8016CF04 *p = &D_801ABE38[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_801857EC[])(void); + +void func_8016D19C(void *a0) { + D_801857EC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_801857F4[])(void); + +void func_8016D428(void *a0) { + D_801857F4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018585C[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_8018585C[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80185800; +extern u8 D_8018580C; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80185800, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018580C); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80185890[])(void); + +void func_8016DEA4(void *a0) { + D_80185890[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80185898[])(void); + +void func_8016DF20(void *a0) { + D_80185898[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_801858EC[])(void); + +void func_8016E5B8(void *a0) { + D_801858EC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_801858AC[4]; + extern s32 D_801858CC; + extern s32 D_801858D4; + extern s32 D_801858DC; + extern s32 D_801858E4; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_801858AC[0], pp, &tmp); + RotTransSV(&D_801858AC[1], &prim.v[1], &tmp); + RotTransSV(&D_801858AC[2], &prim.v[2], &tmp); + RotTransSV(&D_801858AC[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_801858CC; + prim.f1 = D_801858D4; + prim.f2 = D_801858DC; + prim.f3 = D_801858E4; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_8018592C[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_8018592C[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80185920[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80185920[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80185910[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80185910[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80185920[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80185920[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80185920[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_8018593C; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_8018593C; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_801859B4[])(void); + +void func_8016F6E0(void *a0) { + D_801859B4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_801859BC[])(void); + +void func_8016F798(void *a0) { + D_801859BC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_801859C4[])(void); + +void func_8016F834(void *a0) { + D_801859C4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_801859CC[])(void); + +void func_8016F8E4(void *a0) { + D_801859CC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_801859D4[])(void); + +void func_8016F9C4(void *a0) { + D_801859D4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_801859DC[])(void); + +void func_8016FA84(void *a0) { + D_801859DC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_801859E8[])(void); + +void func_8016FB7C(void *a0) { + D_801859E8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_801859F4[])(void); + +void func_8016FC90(void *a0) { + D_801859F4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80185A00[])(void); + +void func_8016FDB4(void *a0) { + D_80185A00[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80185A10[])(void); + +void func_8016FF30(void *a0) { + D_80185A10[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80185A20[])(void); + +void func_8016FFDC(void *a0) { + D_80185A20[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80185A28[])(void); + +void func_80170150(void *a0) { + D_80185A28[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80185A30[])(void); + +void func_80170240(void *a0) { + D_80185A30[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80185A38[])(void); + +void func_801702FC(void *a0) { + D_80185A38[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80185A40[])(void); + +void func_801703E0(void *a0) { + D_80185A40[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80185A48[])(void); + +void func_801704B0(void *a0) { + D_80185A48[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80185A50[])(void); + +void func_80170548(void *a0) { + D_80185A50[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80185A58[])(void); + +void func_801705F8(void *a0) { + D_80185A58[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80185A60[])(void); + +void func_801706AC(void *a0) { + D_80185A60[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80185A68[])(void); + +void func_80170748(void *a0) { + D_80185A68[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80185A70[])(void); + +void func_80170810(void *a0) { + D_80185A70[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80185A78[])(void); + +void func_80170AD8(void *a0) { + D_80185A78[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80185A80[])(void); + +void func_80170BD8(void *a0) { + D_80185A80[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80185A88[])(void); + +void func_80170C74(void *a0) { + D_80185A88[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80185A90[])(void); + +void func_80170D68(void *a0) { + D_80185A90[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80185A98[])(void); + +void func_80170E34(void *a0) { + D_80185A98[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80185AA0[])(void); + +void func_80170EFC(void *a0) { + D_80185AA0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80185AA8[])(void); + +void func_80170FB0(void *a0) { + D_80185AA8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80185AB0[])(void); + +void func_80171064(void *a0) { + D_80185AB0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80185AB8[])(void); + +void func_80171120(void *a0) { + D_80185AB8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80185AC0[])(void); + +void func_801711C0(void *a0) { + D_80185AC0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80185AC8[])(void); + +void func_80171260(void *a0) { + D_80185AC8[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80185AD0[])(void); + +void func_801714E4(void *a0) { + D_80185AD0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8016AB6C", func_80172C50); + + +extern void (*D_80185B14[])(void); + +void func_80172CA0(void *a0) { + D_80185B14[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80185AD8; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80185AD8); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC05_004/ov_SC05_004_jr_8015AE2C.c b/src/ov_SC05_004/ov_SC05_004_jr_8015AE2C.c index 780188271..245c09cd0 100644 --- a/src/ov_SC05_004/ov_SC05_004_jr_8015AE2C.c +++ b/src/ov_SC05_004/ov_SC05_004_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_801847D8[])(void); void func_8016AB30(void *a0) { D_801847D8[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80184854[])(void); - -void func_8016B4BC(void *a0) { - D_80184854[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_8019E298; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_8019E298); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80184848[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80184848; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_8018488C[]; -extern unsigned short D_80184894[]; -extern unsigned short D_8018489C[]; -extern unsigned char D_8019E2A0[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_8019E2A0 + param_2 * 0x40); - puVar3 = D_8018488C[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80184894[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_8018489C[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_8019E298; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_8019E298, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_801848A4[])(void); - -void func_8016BBA4(void *a0) { - D_801848A4[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_8019E3D4; - extern u8 D_8019E3D5; - extern u8 D_8019E3D6; - extern M2C_UNK D_8019E3D8; - extern u8 D_8019E3D9; - extern u8 D_8019E3DA; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_8019E3D4) = 0x20; - D_8019E3D5 = 0x20; - D_8019E3D6 = 0; - (*(u8 *)&D_8019E3D8) = 0xc0; - D_8019E3D9 = 0xc0; - D_8019E3DA = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_8019E3D4; -extern M2C_UNK D_8019E3D8; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_8019E3D4, &D_8019E3D8, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_8019E3D5; - extern u8 D_8019E3D6; - extern u8 D_8019E3D9; - extern u8 D_8019E3DA; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_8019E3D4); - if (*p1 != 0) *p1 -= 4; - if (D_8019E3D5 != 0) D_8019E3D5 -= 4; - if (D_8019E3D6 != 0) D_8019E3D6 -= 4; - p2 = &(*(u8 *)&D_8019E3D8); - if (*p2 != 0) *p2 -= 4; - if (D_8019E3D9 != 0) D_8019E3D9 -= 4; - if (D_8019E3DA != 0) D_8019E3DA -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_8019E3D4), &(*(int *)&D_8019E3D8), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_8019E360; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_8019E360); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_801848B4; - extern s32 D_801848BC; - extern s32 D_801848C4; - extern s32 D_801848CC; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_801848B4, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_801848BC, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_801848C4, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_801848CC, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_801848D4[])(void); - -void func_8016C14C(void *a0) { - D_801848D4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_8019E3DC[]; -extern u8 D_8019E3E4[]; -extern u8 D_8019E394[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_8019E3DC, D_8019E3E4, D_8019E394); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_8019E3F0[]; - extern u8 D_8019E4B0; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_8019E3F0[1] = 0xff; - D_8019E3F0[2] = 0x10; - D_8019E3F0[0] = 0x10; - D_8019E3F0[6] = 0; - D_8019E3F0[5] = 0; - D_8019E3F0[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_8019E3F0, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_8019E4B0, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_8019E3F0); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8015AE2C", func_8016C998); - - -extern void (*D_801848DC[])(void); - -void func_8016CB84(void *a0) { - D_801848DC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_8019E4B0[]; - - - Blk_8016CF04_8016CF04 *p = &D_8019E4B0[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_801848F8[])(void); - -void func_8016D19C(void *a0) { - D_801848F8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80184900[])(void); - -void func_8016D428(void *a0) { - D_80184900[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80184968[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80184968[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_8018490C; -extern u8 D_80184918; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018490C, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80184918); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8015AE2C", func_8016DC20); - - -extern void (*D_8018499C[])(void); - -void func_8016DEA4(void *a0) { - D_8018499C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_801849A4[])(void); - -void func_8016DF20(void *a0) { - D_801849A4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_801849F8[])(void); - -void func_8016E5B8(void *a0) { - D_801849F8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_801849B8[4]; - extern s32 D_801849D8; - extern s32 D_801849E0; - extern s32 D_801849E8; - extern s32 D_801849F0; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_801849B8[0], pp, &tmp); - RotTransSV(&D_801849B8[1], &prim.v[1], &tmp); - RotTransSV(&D_801849B8[2], &prim.v[2], &tmp); - RotTransSV(&D_801849B8[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_801849D8; - prim.f1 = D_801849E0; - prim.f2 = D_801849E8; - prim.f3 = D_801849F0; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80184A38[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80184A38[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80184A2C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80184A2C[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80184A1C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80184A1C[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80184A2C[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80184A2C[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80184A2C[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80184A48; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80184A48; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80184AC0[])(void); - -void func_8016F6E0(void *a0) { - D_80184AC0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80184AC8[])(void); - -void func_8016F798(void *a0) { - D_80184AC8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80184AD0[])(void); - -void func_8016F834(void *a0) { - D_80184AD0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80184AD8[])(void); - -void func_8016F8E4(void *a0) { - D_80184AD8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80184AE0[])(void); - -void func_8016F9C4(void *a0) { - D_80184AE0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80184AE8[])(void); - -void func_8016FA84(void *a0) { - D_80184AE8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80184AF4[])(void); - -void func_8016FB7C(void *a0) { - D_80184AF4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80184B00[])(void); - -void func_8016FC90(void *a0) { - D_80184B00[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80184B0C[])(void); - -void func_8016FDB4(void *a0) { - D_80184B0C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80184B1C[])(void); - -void func_8016FF30(void *a0) { - D_80184B1C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80184B2C[])(void); - -void func_8016FFDC(void *a0) { - D_80184B2C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80184B34[])(void); - -void func_80170150(void *a0) { - D_80184B34[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80184B3C[])(void); - -void func_80170240(void *a0) { - D_80184B3C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80184B44[])(void); - -void func_801702FC(void *a0) { - D_80184B44[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80184B4C[])(void); - -void func_801703E0(void *a0) { - D_80184B4C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80184B54[])(void); - -void func_801704B0(void *a0) { - D_80184B54[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80184B5C[])(void); - -void func_80170548(void *a0) { - D_80184B5C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80184B64[])(void); - -void func_801705F8(void *a0) { - D_80184B64[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80184B6C[])(void); - -void func_801706AC(void *a0) { - D_80184B6C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80184B74[])(void); - -void func_80170748(void *a0) { - D_80184B74[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80184B7C[])(void); - -void func_80170810(void *a0) { - D_80184B7C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80184B84[])(void); - -void func_80170AD8(void *a0) { - D_80184B84[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80184B8C[])(void); - -void func_80170BD8(void *a0) { - D_80184B8C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80184B94[])(void); - -void func_80170C74(void *a0) { - D_80184B94[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80184B9C[])(void); - -void func_80170D68(void *a0) { - D_80184B9C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80184BA4[])(void); - -void func_80170E34(void *a0) { - D_80184BA4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80184BAC[])(void); - -void func_80170EFC(void *a0) { - D_80184BAC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80184BB4[])(void); - -void func_80170FB0(void *a0) { - D_80184BB4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80184BBC[])(void); - -void func_80171064(void *a0) { - D_80184BBC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80184BC4[])(void); - -void func_80171120(void *a0) { - D_80184BC4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80184BCC[])(void); - -void func_801711C0(void *a0) { - D_80184BCC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80184BD4[])(void); - -void func_80171260(void *a0) { - D_80184BD4[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80184BDC[])(void); - -void func_801714E4(void *a0) { - D_80184BDC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8015AE2C", func_80172C50); - - -extern void (*D_80184C20[])(void); - -void func_80172CA0(void *a0) { - D_80184C20[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80184BE4; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80184BE4); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC05_004/ov_SC05_004_jr_8016AB6C.c b/src/ov_SC05_004/ov_SC05_004_jr_8016AB6C.c new file mode 100644 index 000000000..8a11332f2 --- /dev/null +++ b/src/ov_SC05_004/ov_SC05_004_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80183BA4; +extern u8 D_80183B14; +extern u8 D_80183AF0; +extern u8 D_80183ACC; +extern u8 D_80183B80; +extern u8 D_80183B5C; +extern u8 D_80183B38; +extern u8 D_80183AA8; +extern void func_80145934(void); +extern u8 D_80183C34; +extern u8 D_80183C10; +extern u8 D_80183BEC; +extern u8 D_80183BC8; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018302C[]; +extern unsigned char D_8018305C[]; +extern unsigned char D_801830AC[]; +extern unsigned char D_801830DC[]; +extern unsigned char D_8018310C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018315C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80183224[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801832AC[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801832B4; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8019DE28; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019DE2C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801832E4; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018338C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801833B0[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801833A0; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801833C4[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801833D0[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801833E0[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801833F8[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801833E8; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018340C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80183428[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80183418; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018343C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80183450[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80183464; +extern void (*D_8018348C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018346C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801834D8[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801834DC[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80183940[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80183950[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_8019DE60; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80183978[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80183958; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80183968; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801839B8[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801839C0[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018398C; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801839CC[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018399C; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_8019DE68; +extern s32 D_8019DE74; +extern s32 D_8019DE78; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80183A08[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801839DC[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_8019DE70; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80183C58[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80183A78[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80183CFC[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80183E50[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80183C6C; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80183E58[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80183C7C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80183C9C; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80183E60[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80183E88[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80183E94[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80183D08[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80183F38; +extern void func_8015D380(s32 a0); +extern unsigned char D_8018301C[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80183F4C[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80183F88[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80183FD0; +extern u16 D_80183FD2; +extern u16 D_80183FD4; +extern s32 D_80183FD8; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80183FE0; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80183CEC; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80184064[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80184114[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80184144[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_801841A8; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_8019DE80[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_801841CC[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_8019DED8[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80184214[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80184204; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_8019D6B8[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_8018421C[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80184270[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80184238; +extern s16 D_8018426C; +extern s16 D_8018426A; +extern s16 D_80184268; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_8018427C[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_8019DF38; +extern u8 D_8019DF39; +extern u8 D_8019DF3A; +extern u8 D_8019DF3B; +extern u8 D_8019DF3C; +extern u8 D_8019DF3D; +extern u8 D_8019DF3E; +extern u8 D_8019DF3F; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_8018428C[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_8019DF78; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_801842D0[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_8018434C[]; +extern s32 D_8018436C[]; +extern u8 D_801843E8[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80184408[]; +extern u8 D_80184428[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_801844C4[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80184540[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_8019D6C8; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_8018454C[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80184554[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_8018461C[])(void); +extern void func_80166618(void *a0); +extern void (*D_8018462C[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_8018463C[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80184648[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_801845A8[]; +extern u8 D_801845BC[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80184660[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80184668[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80184670[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80184678[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80184680[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80184688[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80184690[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80184744[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_8018474C[])(void); +extern void func_80169F00(void *a0); +extern char D_801846FC[]; +extern char D_801846BC[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80184784[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80184790[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_801847D8[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80184798[]; + extern u8 D_801847A8[]; + extern u8 D_8019E248[]; + extern u8 D_8019E270[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80184798, D_8019E248) + 3; + func_8001CE28(obj, D_8019E248); + } else { + var_s3 = func_80024054(D_801847A8, D_8019E270) + 9; + func_8001CE28(obj, D_8019E270); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80184854[])(void); + +void func_8016B4BC(void *a0) { + D_80184854[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_8019E298; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_8019E298); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80184848[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80184848; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_8018488C[]; +extern unsigned short D_80184894[]; +extern unsigned short D_8018489C[]; +extern unsigned char D_8019E2A0[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_8019E2A0 + param_2 * 0x40); + puVar3 = D_8018488C[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80184894[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_8018489C[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_8019E298; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_8019E298, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_801848A4[])(void); + +void func_8016BBA4(void *a0) { + D_801848A4[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_8019E3D4; + extern u8 D_8019E3D5; + extern u8 D_8019E3D6; + extern M2C_UNK D_8019E3D8; + extern u8 D_8019E3D9; + extern u8 D_8019E3DA; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_8019E3D4) = 0x20; + D_8019E3D5 = 0x20; + D_8019E3D6 = 0; + (*(u8 *)&D_8019E3D8) = 0xc0; + D_8019E3D9 = 0xc0; + D_8019E3DA = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_8019E3D4; +extern M2C_UNK D_8019E3D8; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_8019E3D4, &D_8019E3D8, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_8019E3D5; + extern u8 D_8019E3D6; + extern u8 D_8019E3D9; + extern u8 D_8019E3DA; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_8019E3D4); + if (*p1 != 0) *p1 -= 4; + if (D_8019E3D5 != 0) D_8019E3D5 -= 4; + if (D_8019E3D6 != 0) D_8019E3D6 -= 4; + p2 = &(*(u8 *)&D_8019E3D8); + if (*p2 != 0) *p2 -= 4; + if (D_8019E3D9 != 0) D_8019E3D9 -= 4; + if (D_8019E3DA != 0) D_8019E3DA -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_8019E3D4), &(*(int *)&D_8019E3D8), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_8019E360; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_8019E360); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_801848B4; + extern s32 D_801848BC; + extern s32 D_801848C4; + extern s32 D_801848CC; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_801848B4, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_801848BC, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_801848C4, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_801848CC, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_801848D4[])(void); + +void func_8016C14C(void *a0) { + D_801848D4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_8019E3DC[]; +extern u8 D_8019E3E4[]; +extern u8 D_8019E394[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_8019E3DC, D_8019E3E4, D_8019E394); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_8019E3F0[]; + extern u8 D_8019E4B0; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_8019E3F0[1] = 0xff; + D_8019E3F0[2] = 0x10; + D_8019E3F0[0] = 0x10; + D_8019E3F0[6] = 0; + D_8019E3F0[5] = 0; + D_8019E3F0[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_8019E3F0, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_8019E4B0, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_8019E3F0); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8016AB6C", func_8016C998); + + +extern void (*D_801848DC[])(void); + +void func_8016CB84(void *a0) { + D_801848DC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_8019E4B0[]; + + + Blk_8016CF04_8016CF04 *p = &D_8019E4B0[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_801848F8[])(void); + +void func_8016D19C(void *a0) { + D_801848F8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80184900[])(void); + +void func_8016D428(void *a0) { + D_80184900[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80184968[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80184968[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_8018490C; +extern u8 D_80184918; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018490C, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80184918); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8016AB6C", func_8016DC20); + + +extern void (*D_8018499C[])(void); + +void func_8016DEA4(void *a0) { + D_8018499C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_801849A4[])(void); + +void func_8016DF20(void *a0) { + D_801849A4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_801849F8[])(void); + +void func_8016E5B8(void *a0) { + D_801849F8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_801849B8[4]; + extern s32 D_801849D8; + extern s32 D_801849E0; + extern s32 D_801849E8; + extern s32 D_801849F0; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_801849B8[0], pp, &tmp); + RotTransSV(&D_801849B8[1], &prim.v[1], &tmp); + RotTransSV(&D_801849B8[2], &prim.v[2], &tmp); + RotTransSV(&D_801849B8[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_801849D8; + prim.f1 = D_801849E0; + prim.f2 = D_801849E8; + prim.f3 = D_801849F0; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80184A38[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80184A38[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80184A2C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80184A2C[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80184A1C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80184A1C[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80184A2C[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80184A2C[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80184A2C[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80184A48; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80184A48; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80184AC0[])(void); + +void func_8016F6E0(void *a0) { + D_80184AC0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80184AC8[])(void); + +void func_8016F798(void *a0) { + D_80184AC8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80184AD0[])(void); + +void func_8016F834(void *a0) { + D_80184AD0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80184AD8[])(void); + +void func_8016F8E4(void *a0) { + D_80184AD8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80184AE0[])(void); + +void func_8016F9C4(void *a0) { + D_80184AE0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80184AE8[])(void); + +void func_8016FA84(void *a0) { + D_80184AE8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80184AF4[])(void); + +void func_8016FB7C(void *a0) { + D_80184AF4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80184B00[])(void); + +void func_8016FC90(void *a0) { + D_80184B00[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80184B0C[])(void); + +void func_8016FDB4(void *a0) { + D_80184B0C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80184B1C[])(void); + +void func_8016FF30(void *a0) { + D_80184B1C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80184B2C[])(void); + +void func_8016FFDC(void *a0) { + D_80184B2C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80184B34[])(void); + +void func_80170150(void *a0) { + D_80184B34[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80184B3C[])(void); + +void func_80170240(void *a0) { + D_80184B3C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80184B44[])(void); + +void func_801702FC(void *a0) { + D_80184B44[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80184B4C[])(void); + +void func_801703E0(void *a0) { + D_80184B4C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80184B54[])(void); + +void func_801704B0(void *a0) { + D_80184B54[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80184B5C[])(void); + +void func_80170548(void *a0) { + D_80184B5C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80184B64[])(void); + +void func_801705F8(void *a0) { + D_80184B64[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80184B6C[])(void); + +void func_801706AC(void *a0) { + D_80184B6C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80184B74[])(void); + +void func_80170748(void *a0) { + D_80184B74[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80184B7C[])(void); + +void func_80170810(void *a0) { + D_80184B7C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80184B84[])(void); + +void func_80170AD8(void *a0) { + D_80184B84[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80184B8C[])(void); + +void func_80170BD8(void *a0) { + D_80184B8C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80184B94[])(void); + +void func_80170C74(void *a0) { + D_80184B94[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80184B9C[])(void); + +void func_80170D68(void *a0) { + D_80184B9C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80184BA4[])(void); + +void func_80170E34(void *a0) { + D_80184BA4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80184BAC[])(void); + +void func_80170EFC(void *a0) { + D_80184BAC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80184BB4[])(void); + +void func_80170FB0(void *a0) { + D_80184BB4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80184BBC[])(void); + +void func_80171064(void *a0) { + D_80184BBC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80184BC4[])(void); + +void func_80171120(void *a0) { + D_80184BC4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80184BCC[])(void); + +void func_801711C0(void *a0) { + D_80184BCC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80184BD4[])(void); + +void func_80171260(void *a0) { + D_80184BD4[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80184BDC[])(void); + +void func_801714E4(void *a0) { + D_80184BDC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8016AB6C", func_80172C50); + + +extern void (*D_80184C20[])(void); + +void func_80172CA0(void *a0) { + D_80184C20[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80184BE4; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80184BE4); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC05_005/ov_SC05_005_jr_8015AE2C.c b/src/ov_SC05_005/ov_SC05_005_jr_8015AE2C.c index c712ac057..175978c25 100644 --- a/src/ov_SC05_005/ov_SC05_005_jr_8015AE2C.c +++ b/src/ov_SC05_005/ov_SC05_005_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_801855AC[])(void); void func_8016AB30(void *a0) { D_801855AC[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80185628[])(void); - -void func_8016B4BC(void *a0) { - D_80185628[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801B0F00; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801B0F00); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_8018561C[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_8018561C; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80185660[]; -extern unsigned short D_80185668[]; -extern unsigned short D_80185670[]; -extern unsigned char D_801B0F08[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801B0F08 + param_2 * 0x40); - puVar3 = D_80185660[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80185668[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80185670[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801B0F00; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801B0F00, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80185678[])(void); - -void func_8016BBA4(void *a0) { - D_80185678[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801B103C; - extern u8 D_801B103D; - extern u8 D_801B103E; - extern M2C_UNK D_801B1040; - extern u8 D_801B1041; - extern u8 D_801B1042; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801B103C) = 0x20; - D_801B103D = 0x20; - D_801B103E = 0; - (*(u8 *)&D_801B1040) = 0xc0; - D_801B1041 = 0xc0; - D_801B1042 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801B103C; -extern M2C_UNK D_801B1040; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801B103C, &D_801B1040, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801B103D; - extern u8 D_801B103E; - extern u8 D_801B1041; - extern u8 D_801B1042; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801B103C); - if (*p1 != 0) *p1 -= 4; - if (D_801B103D != 0) D_801B103D -= 4; - if (D_801B103E != 0) D_801B103E -= 4; - p2 = &(*(u8 *)&D_801B1040); - if (*p2 != 0) *p2 -= 4; - if (D_801B1041 != 0) D_801B1041 -= 4; - if (D_801B1042 != 0) D_801B1042 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801B103C), &(*(int *)&D_801B1040), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801B0FC8; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801B0FC8); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80185688; - extern s32 D_80185690; - extern s32 D_80185698; - extern s32 D_801856A0; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80185688, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80185690, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80185698, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_801856A0, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_801856A8[])(void); - -void func_8016C14C(void *a0) { - D_801856A8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801B1044[]; -extern u8 D_801B104C[]; -extern u8 D_801B0FFC[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801B1044, D_801B104C, D_801B0FFC); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801B1058[]; - extern u8 D_801B1118; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801B1058[1] = 0xff; - D_801B1058[2] = 0x10; - D_801B1058[0] = 0x10; - D_801B1058[6] = 0; - D_801B1058[5] = 0; - D_801B1058[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801B1058, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801B1118, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801B1058); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8015AE2C", func_8016C998); - - -extern void (*D_801856B0[])(void); - -void func_8016CB84(void *a0) { - D_801856B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801B1118[]; - - - Blk_8016CF04_8016CF04 *p = &D_801B1118[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_801856CC[])(void); - -void func_8016D19C(void *a0) { - D_801856CC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_801856D4[])(void); - -void func_8016D428(void *a0) { - D_801856D4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_8018573C[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_8018573C[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_801856E0; -extern u8 D_801856EC; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801856E0, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801856EC); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80185770[])(void); - -void func_8016DEA4(void *a0) { - D_80185770[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80185778[])(void); - -void func_8016DF20(void *a0) { - D_80185778[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_801857CC[])(void); - -void func_8016E5B8(void *a0) { - D_801857CC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_8018578C[4]; - extern s32 D_801857AC; - extern s32 D_801857B4; - extern s32 D_801857BC; - extern s32 D_801857C4; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_8018578C[0], pp, &tmp); - RotTransSV(&D_8018578C[1], &prim.v[1], &tmp); - RotTransSV(&D_8018578C[2], &prim.v[2], &tmp); - RotTransSV(&D_8018578C[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_801857AC; - prim.f1 = D_801857B4; - prim.f2 = D_801857BC; - prim.f3 = D_801857C4; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_8018580C[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_8018580C[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80185800[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80185800[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_801857F0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_801857F0[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80185800[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80185800[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80185800[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_8018581C; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_8018581C; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80185894[])(void); - -void func_8016F6E0(void *a0) { - D_80185894[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_8018589C[])(void); - -void func_8016F798(void *a0) { - D_8018589C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_801858A4[])(void); - -void func_8016F834(void *a0) { - D_801858A4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_801858AC[])(void); - -void func_8016F8E4(void *a0) { - D_801858AC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_801858B4[])(void); - -void func_8016F9C4(void *a0) { - D_801858B4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_801858BC[])(void); - -void func_8016FA84(void *a0) { - D_801858BC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_801858C8[])(void); - -void func_8016FB7C(void *a0) { - D_801858C8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_801858D4[])(void); - -void func_8016FC90(void *a0) { - D_801858D4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_801858E0[])(void); - -void func_8016FDB4(void *a0) { - D_801858E0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_801858F0[])(void); - -void func_8016FF30(void *a0) { - D_801858F0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80185900[])(void); - -void func_8016FFDC(void *a0) { - D_80185900[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80185908[])(void); - -void func_80170150(void *a0) { - D_80185908[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80185910[])(void); - -void func_80170240(void *a0) { - D_80185910[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80185918[])(void); - -void func_801702FC(void *a0) { - D_80185918[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80185920[])(void); - -void func_801703E0(void *a0) { - D_80185920[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80185928[])(void); - -void func_801704B0(void *a0) { - D_80185928[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80185930[])(void); - -void func_80170548(void *a0) { - D_80185930[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80185938[])(void); - -void func_801705F8(void *a0) { - D_80185938[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80185940[])(void); - -void func_801706AC(void *a0) { - D_80185940[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80185948[])(void); - -void func_80170748(void *a0) { - D_80185948[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80185950[])(void); - -void func_80170810(void *a0) { - D_80185950[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80185958[])(void); - -void func_80170AD8(void *a0) { - D_80185958[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80185960[])(void); - -void func_80170BD8(void *a0) { - D_80185960[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80185968[])(void); - -void func_80170C74(void *a0) { - D_80185968[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80185970[])(void); - -void func_80170D68(void *a0) { - D_80185970[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80185978[])(void); - -void func_80170E34(void *a0) { - D_80185978[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80185980[])(void); - -void func_80170EFC(void *a0) { - D_80185980[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80185988[])(void); - -void func_80170FB0(void *a0) { - D_80185988[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80185990[])(void); - -void func_80171064(void *a0) { - D_80185990[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80185998[])(void); - -void func_80171120(void *a0) { - D_80185998[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_801859A0[])(void); - -void func_801711C0(void *a0) { - D_801859A0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_801859A8[])(void); - -void func_80171260(void *a0) { - D_801859A8[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_801859B0[])(void); - -void func_801714E4(void *a0) { - D_801859B0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8015AE2C", func_80172C50); - - -extern void (*D_801859F4[])(void); - -void func_80172CA0(void *a0) { - D_801859F4[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_801859B8; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_801859B8); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC05_005/ov_SC05_005_jr_8016AB6C.c b/src/ov_SC05_005/ov_SC05_005_jr_8016AB6C.c new file mode 100644 index 000000000..dfab70f3f --- /dev/null +++ b/src/ov_SC05_005/ov_SC05_005_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80184978; +extern u8 D_801848E8; +extern u8 D_801848C4; +extern u8 D_801848A0; +extern u8 D_80184954; +extern u8 D_80184930; +extern u8 D_8018490C; +extern u8 D_8018487C; +extern void func_80145934(void); +extern u8 D_80184A08; +extern u8 D_801849E4; +extern u8 D_801849C0; +extern u8 D_8018499C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80183E00[]; +extern unsigned char D_80183E30[]; +extern unsigned char D_80183E80[]; +extern unsigned char D_80183EB0[]; +extern unsigned char D_80183EE0[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80183F30[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80183FF8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80184080[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80184088; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801B0A90; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801B0A94; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801840B8; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80184160[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80184184[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80184174; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80184198[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801841A4[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801841B4[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801841CC[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801841BC; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801841E0[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801841FC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801841EC; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80184210[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80184224[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80184238; +extern void (*D_80184260[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80184240; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801842AC[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801842B0[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80184714[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80184724[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801B0AC8; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018474C[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018472C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018473C; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018478C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80184794[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80184760; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801847A0[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80184770; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801B0AD0; +extern s32 D_801B0ADC; +extern s32 D_801B0AE0; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801847DC[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801847B0[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801B0AD8; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80184A2C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018484C[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80184AD0[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80184C24[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80184A40; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80184C2C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80184A50; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80184A70; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80184C34[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80184C5C[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80184C68[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80184ADC[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80184D0C; +extern void func_8015D380(s32 a0); +extern unsigned char D_80183DF0[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80184D20[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80184D5C[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80184DA4; +extern u16 D_80184DA6; +extern u16 D_80184DA8; +extern s32 D_80184DAC; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80184DB4; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80184AC0; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80184E38[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80184EE8[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80184F18[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80184F7C; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801B0AE8[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80184FA0[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801B0B40[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80184FE8[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80184FD8; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801B03A0[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80184FF0[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80185044[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_8018500C; +extern s16 D_80185040; +extern s16 D_8018503E; +extern s16 D_8018503C; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80185050[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801B0BA0; +extern u8 D_801B0BA1; +extern u8 D_801B0BA2; +extern u8 D_801B0BA3; +extern u8 D_801B0BA4; +extern u8 D_801B0BA5; +extern u8 D_801B0BA6; +extern u8 D_801B0BA7; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80185060[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801B0BE0; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_801850A4[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80185120[]; +extern s32 D_80185140[]; +extern u8 D_801851BC[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_801851DC[]; +extern u8 D_801851FC[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80185298[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80185314[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801B03B0; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80185320[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80185328[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_801853F0[])(void); +extern void func_80166618(void *a0); +extern void (*D_80185400[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80185410[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_8018541C[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_8018537C[]; +extern u8 D_80185390[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80185434[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_8018543C[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80185444[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_8018544C[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80185454[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_8018545C[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80185464[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80185518[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80185520[])(void); +extern void func_80169F00(void *a0); +extern char D_801854D0[]; +extern char D_80185490[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80185558[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80185564[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_801855AC[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_8018556C[]; + extern u8 D_8018557C[]; + extern u8 D_801B0EB0[]; + extern u8 D_801B0ED8[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_8018556C, D_801B0EB0) + 3; + func_8001CE28(obj, D_801B0EB0); + } else { + var_s3 = func_80024054(D_8018557C, D_801B0ED8) + 9; + func_8001CE28(obj, D_801B0ED8); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80185628[])(void); + +void func_8016B4BC(void *a0) { + D_80185628[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801B0F00; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801B0F00); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_8018561C[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_8018561C; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80185660[]; +extern unsigned short D_80185668[]; +extern unsigned short D_80185670[]; +extern unsigned char D_801B0F08[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801B0F08 + param_2 * 0x40); + puVar3 = D_80185660[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80185668[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80185670[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801B0F00; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801B0F00, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80185678[])(void); + +void func_8016BBA4(void *a0) { + D_80185678[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801B103C; + extern u8 D_801B103D; + extern u8 D_801B103E; + extern M2C_UNK D_801B1040; + extern u8 D_801B1041; + extern u8 D_801B1042; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801B103C) = 0x20; + D_801B103D = 0x20; + D_801B103E = 0; + (*(u8 *)&D_801B1040) = 0xc0; + D_801B1041 = 0xc0; + D_801B1042 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801B103C; +extern M2C_UNK D_801B1040; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801B103C, &D_801B1040, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801B103D; + extern u8 D_801B103E; + extern u8 D_801B1041; + extern u8 D_801B1042; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801B103C); + if (*p1 != 0) *p1 -= 4; + if (D_801B103D != 0) D_801B103D -= 4; + if (D_801B103E != 0) D_801B103E -= 4; + p2 = &(*(u8 *)&D_801B1040); + if (*p2 != 0) *p2 -= 4; + if (D_801B1041 != 0) D_801B1041 -= 4; + if (D_801B1042 != 0) D_801B1042 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801B103C), &(*(int *)&D_801B1040), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801B0FC8; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801B0FC8); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80185688; + extern s32 D_80185690; + extern s32 D_80185698; + extern s32 D_801856A0; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80185688, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80185690, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80185698, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_801856A0, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_801856A8[])(void); + +void func_8016C14C(void *a0) { + D_801856A8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801B1044[]; +extern u8 D_801B104C[]; +extern u8 D_801B0FFC[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801B1044, D_801B104C, D_801B0FFC); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801B1058[]; + extern u8 D_801B1118; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801B1058[1] = 0xff; + D_801B1058[2] = 0x10; + D_801B1058[0] = 0x10; + D_801B1058[6] = 0; + D_801B1058[5] = 0; + D_801B1058[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801B1058, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801B1118, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801B1058); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8016AB6C", func_8016C998); + + +extern void (*D_801856B0[])(void); + +void func_8016CB84(void *a0) { + D_801856B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801B1118[]; + + + Blk_8016CF04_8016CF04 *p = &D_801B1118[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_801856CC[])(void); + +void func_8016D19C(void *a0) { + D_801856CC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_801856D4[])(void); + +void func_8016D428(void *a0) { + D_801856D4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018573C[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_8018573C[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_801856E0; +extern u8 D_801856EC; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801856E0, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801856EC); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80185770[])(void); + +void func_8016DEA4(void *a0) { + D_80185770[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80185778[])(void); + +void func_8016DF20(void *a0) { + D_80185778[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_801857CC[])(void); + +void func_8016E5B8(void *a0) { + D_801857CC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_8018578C[4]; + extern s32 D_801857AC; + extern s32 D_801857B4; + extern s32 D_801857BC; + extern s32 D_801857C4; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_8018578C[0], pp, &tmp); + RotTransSV(&D_8018578C[1], &prim.v[1], &tmp); + RotTransSV(&D_8018578C[2], &prim.v[2], &tmp); + RotTransSV(&D_8018578C[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_801857AC; + prim.f1 = D_801857B4; + prim.f2 = D_801857BC; + prim.f3 = D_801857C4; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_8018580C[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_8018580C[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80185800[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80185800[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_801857F0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_801857F0[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80185800[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80185800[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80185800[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_8018581C; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_8018581C; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80185894[])(void); + +void func_8016F6E0(void *a0) { + D_80185894[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_8018589C[])(void); + +void func_8016F798(void *a0) { + D_8018589C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_801858A4[])(void); + +void func_8016F834(void *a0) { + D_801858A4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_801858AC[])(void); + +void func_8016F8E4(void *a0) { + D_801858AC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_801858B4[])(void); + +void func_8016F9C4(void *a0) { + D_801858B4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_801858BC[])(void); + +void func_8016FA84(void *a0) { + D_801858BC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_801858C8[])(void); + +void func_8016FB7C(void *a0) { + D_801858C8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_801858D4[])(void); + +void func_8016FC90(void *a0) { + D_801858D4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_801858E0[])(void); + +void func_8016FDB4(void *a0) { + D_801858E0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_801858F0[])(void); + +void func_8016FF30(void *a0) { + D_801858F0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80185900[])(void); + +void func_8016FFDC(void *a0) { + D_80185900[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80185908[])(void); + +void func_80170150(void *a0) { + D_80185908[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80185910[])(void); + +void func_80170240(void *a0) { + D_80185910[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80185918[])(void); + +void func_801702FC(void *a0) { + D_80185918[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80185920[])(void); + +void func_801703E0(void *a0) { + D_80185920[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80185928[])(void); + +void func_801704B0(void *a0) { + D_80185928[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80185930[])(void); + +void func_80170548(void *a0) { + D_80185930[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80185938[])(void); + +void func_801705F8(void *a0) { + D_80185938[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80185940[])(void); + +void func_801706AC(void *a0) { + D_80185940[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80185948[])(void); + +void func_80170748(void *a0) { + D_80185948[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80185950[])(void); + +void func_80170810(void *a0) { + D_80185950[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80185958[])(void); + +void func_80170AD8(void *a0) { + D_80185958[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80185960[])(void); + +void func_80170BD8(void *a0) { + D_80185960[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80185968[])(void); + +void func_80170C74(void *a0) { + D_80185968[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80185970[])(void); + +void func_80170D68(void *a0) { + D_80185970[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80185978[])(void); + +void func_80170E34(void *a0) { + D_80185978[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80185980[])(void); + +void func_80170EFC(void *a0) { + D_80185980[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80185988[])(void); + +void func_80170FB0(void *a0) { + D_80185988[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80185990[])(void); + +void func_80171064(void *a0) { + D_80185990[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80185998[])(void); + +void func_80171120(void *a0) { + D_80185998[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_801859A0[])(void); + +void func_801711C0(void *a0) { + D_801859A0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_801859A8[])(void); + +void func_80171260(void *a0) { + D_801859A8[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_801859B0[])(void); + +void func_801714E4(void *a0) { + D_801859B0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8016AB6C", func_80172C50); + + +extern void (*D_801859F4[])(void); + +void func_80172CA0(void *a0) { + D_801859F4[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_801859B8; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_801859B8); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC05_006/ov_SC05_006_jr_8015AE2C.c b/src/ov_SC05_006/ov_SC05_006_jr_8015AE2C.c index a31cc871f..a1d5a6b3e 100644 --- a/src/ov_SC05_006/ov_SC05_006_jr_8015AE2C.c +++ b/src/ov_SC05_006/ov_SC05_006_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_801825CC[])(void); void func_8016AB30(void *a0) { D_801825CC[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80182648[])(void); - -void func_8016B4BC(void *a0) { - D_80182648[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_8018F038; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_8018F038); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_8018263C[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_8018263C; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80182680[]; -extern unsigned short D_80182688[]; -extern unsigned short D_80182690[]; -extern unsigned char D_8018F040[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_8018F040 + param_2 * 0x40); - puVar3 = D_80182680[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80182688[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80182690[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_8018F038; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_8018F038, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80182698[])(void); - -void func_8016BBA4(void *a0) { - D_80182698[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_8018F174; - extern u8 D_8018F175; - extern u8 D_8018F176; - extern M2C_UNK D_8018F178; - extern u8 D_8018F179; - extern u8 D_8018F17A; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_8018F174) = 0x20; - D_8018F175 = 0x20; - D_8018F176 = 0; - (*(u8 *)&D_8018F178) = 0xc0; - D_8018F179 = 0xc0; - D_8018F17A = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_8018F174; -extern M2C_UNK D_8018F178; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_8018F174, &D_8018F178, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_8018F175; - extern u8 D_8018F176; - extern u8 D_8018F179; - extern u8 D_8018F17A; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_8018F174); - if (*p1 != 0) *p1 -= 4; - if (D_8018F175 != 0) D_8018F175 -= 4; - if (D_8018F176 != 0) D_8018F176 -= 4; - p2 = &(*(u8 *)&D_8018F178); - if (*p2 != 0) *p2 -= 4; - if (D_8018F179 != 0) D_8018F179 -= 4; - if (D_8018F17A != 0) D_8018F17A -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_8018F174), &(*(int *)&D_8018F178), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_8018F100; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_8018F100); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_801826A8; - extern s32 D_801826B0; - extern s32 D_801826B8; - extern s32 D_801826C0; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_801826A8, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_801826B0, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_801826B8, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_801826C0, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_801826C8[])(void); - -void func_8016C14C(void *a0) { - D_801826C8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_8018F17C[]; -extern u8 D_8018F184[]; -extern u8 D_8018F134[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_8018F17C, D_8018F184, D_8018F134); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_8018F190[]; - extern u8 D_8018F250; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_8018F190[1] = 0xff; - D_8018F190[2] = 0x10; - D_8018F190[0] = 0x10; - D_8018F190[6] = 0; - D_8018F190[5] = 0; - D_8018F190[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_8018F190, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_8018F250, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_8018F190); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8015AE2C", func_8016C998); - - -extern void (*D_801826D0[])(void); - -void func_8016CB84(void *a0) { - D_801826D0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_8018F250[]; - - - Blk_8016CF04_8016CF04 *p = &D_8018F250[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_801826EC[])(void); - -void func_8016D19C(void *a0) { - D_801826EC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_801826F4[])(void); - -void func_8016D428(void *a0) { - D_801826F4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_8018275C[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_8018275C[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80182700; -extern u8 D_8018270C; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80182700, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018270C); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80182790[])(void); - -void func_8016DEA4(void *a0) { - D_80182790[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80182798[])(void); - -void func_8016DF20(void *a0) { - D_80182798[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_801827EC[])(void); - -void func_8016E5B8(void *a0) { - D_801827EC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_801827AC[4]; - extern s32 D_801827CC; - extern s32 D_801827D4; - extern s32 D_801827DC; - extern s32 D_801827E4; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_801827AC[0], pp, &tmp); - RotTransSV(&D_801827AC[1], &prim.v[1], &tmp); - RotTransSV(&D_801827AC[2], &prim.v[2], &tmp); - RotTransSV(&D_801827AC[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_801827CC; - prim.f1 = D_801827D4; - prim.f2 = D_801827DC; - prim.f3 = D_801827E4; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_8018282C[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_8018282C[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80182820[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80182820[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80182810[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80182810[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80182820[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80182820[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80182820[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_8018283C; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_8018283C; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_801828B4[])(void); - -void func_8016F6E0(void *a0) { - D_801828B4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_801828BC[])(void); - -void func_8016F798(void *a0) { - D_801828BC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_801828C4[])(void); - -void func_8016F834(void *a0) { - D_801828C4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_801828CC[])(void); - -void func_8016F8E4(void *a0) { - D_801828CC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_801828D4[])(void); - -void func_8016F9C4(void *a0) { - D_801828D4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_801828DC[])(void); - -void func_8016FA84(void *a0) { - D_801828DC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_801828E8[])(void); - -void func_8016FB7C(void *a0) { - D_801828E8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_801828F4[])(void); - -void func_8016FC90(void *a0) { - D_801828F4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80182900[])(void); - -void func_8016FDB4(void *a0) { - D_80182900[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80182910[])(void); - -void func_8016FF30(void *a0) { - D_80182910[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80182920[])(void); - -void func_8016FFDC(void *a0) { - D_80182920[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80182928[])(void); - -void func_80170150(void *a0) { - D_80182928[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80182930[])(void); - -void func_80170240(void *a0) { - D_80182930[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80182938[])(void); - -void func_801702FC(void *a0) { - D_80182938[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80182940[])(void); - -void func_801703E0(void *a0) { - D_80182940[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80182948[])(void); - -void func_801704B0(void *a0) { - D_80182948[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80182950[])(void); - -void func_80170548(void *a0) { - D_80182950[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80182958[])(void); - -void func_801705F8(void *a0) { - D_80182958[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80182960[])(void); - -void func_801706AC(void *a0) { - D_80182960[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80182968[])(void); - -void func_80170748(void *a0) { - D_80182968[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80182970[])(void); - -void func_80170810(void *a0) { - D_80182970[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80182978[])(void); - -void func_80170AD8(void *a0) { - D_80182978[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80182980[])(void); - -void func_80170BD8(void *a0) { - D_80182980[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80182988[])(void); - -void func_80170C74(void *a0) { - D_80182988[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80182990[])(void); - -void func_80170D68(void *a0) { - D_80182990[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80182998[])(void); - -void func_80170E34(void *a0) { - D_80182998[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_801829A0[])(void); - -void func_80170EFC(void *a0) { - D_801829A0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_801829A8[])(void); - -void func_80170FB0(void *a0) { - D_801829A8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_801829B0[])(void); - -void func_80171064(void *a0) { - D_801829B0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_801829B8[])(void); - -void func_80171120(void *a0) { - D_801829B8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_801829C0[])(void); - -void func_801711C0(void *a0) { - D_801829C0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_801829C8[])(void); - -void func_80171260(void *a0) { - D_801829C8[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_801829D0[])(void); - -void func_801714E4(void *a0) { - D_801829D0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8015AE2C", func_80172C50); - - -extern void (*D_80182A14[])(void); - -void func_80172CA0(void *a0) { - D_80182A14[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_801829D8; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_801829D8); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC05_006/ov_SC05_006_jr_8016AB6C.c b/src/ov_SC05_006/ov_SC05_006_jr_8016AB6C.c new file mode 100644 index 000000000..daf1c8fb6 --- /dev/null +++ b/src/ov_SC05_006/ov_SC05_006_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80181998; +extern u8 D_80181908; +extern u8 D_801818E4; +extern u8 D_801818C0; +extern u8 D_80181974; +extern u8 D_80181950; +extern u8 D_8018192C; +extern u8 D_8018189C; +extern void func_80145934(void); +extern u8 D_80181A28; +extern u8 D_80181A04; +extern u8 D_801819E0; +extern u8 D_801819BC; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80180E20[]; +extern unsigned char D_80180E50[]; +extern unsigned char D_80180EA0[]; +extern unsigned char D_80180ED0[]; +extern unsigned char D_80180F00[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80180F50[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80181018[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801810A0[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801810A8; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8018EBC8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8018EBCC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801810D8; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80181180[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801811A4[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80181194; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801811B8[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801811C4[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801811D4[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801811EC[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801811DC; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80181200[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018121C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018120C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80181230[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80181244[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80181258; +extern void (*D_80181280[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80181260; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801812CC[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801812D0[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80181734[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80181744[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_8018EC00; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018176C[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018174C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018175C; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801817AC[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801817B4[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80181780; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801817C0[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80181790; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_8018EC08; +extern s32 D_8018EC14; +extern s32 D_8018EC18; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801817FC[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801817D0[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_8018EC10; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80181A4C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018186C[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80181AF0[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80181C44[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80181A60; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80181C4C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80181A70; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80181A90; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80181C54[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80181C7C[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80181C88[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80181AFC[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80181D2C; +extern void func_8015D380(s32 a0); +extern unsigned char D_80180E10[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80181D40[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80181D7C[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80181DC4; +extern u16 D_80181DC6; +extern u16 D_80181DC8; +extern s32 D_80181DCC; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80181DD4; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80181AE0; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80181E58[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80181F08[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80181F38[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80181F9C; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_8018EC20[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80181FC0[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_8018EC78[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80182008[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80181FF8; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_8018E4F0[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80182010[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80182064[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_8018202C; +extern s16 D_80182060; +extern s16 D_8018205E; +extern s16 D_8018205C; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80182070[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_8018ECD8; +extern u8 D_8018ECD9; +extern u8 D_8018ECDA; +extern u8 D_8018ECDB; +extern u8 D_8018ECDC; +extern u8 D_8018ECDD; +extern u8 D_8018ECDE; +extern u8 D_8018ECDF; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80182080[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_8018ED18; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_801820C4[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80182140[]; +extern s32 D_80182160[]; +extern u8 D_801821DC[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_801821FC[]; +extern u8 D_8018221C[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_801822B8[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80182334[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_8018E500; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80182340[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80182348[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80182410[])(void); +extern void func_80166618(void *a0); +extern void (*D_80182420[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80182430[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_8018243C[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_8018239C[]; +extern u8 D_801823B0[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80182454[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_8018245C[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80182464[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_8018246C[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80182474[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_8018247C[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80182484[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80182538[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80182540[])(void); +extern void func_80169F00(void *a0); +extern char D_801824F0[]; +extern char D_801824B0[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80182578[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80182584[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_801825CC[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_8018258C[]; + extern u8 D_8018259C[]; + extern u8 D_8018EFE8[]; + extern u8 D_8018F010[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_8018258C, D_8018EFE8) + 3; + func_8001CE28(obj, D_8018EFE8); + } else { + var_s3 = func_80024054(D_8018259C, D_8018F010) + 9; + func_8001CE28(obj, D_8018F010); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80182648[])(void); + +void func_8016B4BC(void *a0) { + D_80182648[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_8018F038; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_8018F038); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_8018263C[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_8018263C; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80182680[]; +extern unsigned short D_80182688[]; +extern unsigned short D_80182690[]; +extern unsigned char D_8018F040[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_8018F040 + param_2 * 0x40); + puVar3 = D_80182680[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80182688[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80182690[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_8018F038; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_8018F038, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80182698[])(void); + +void func_8016BBA4(void *a0) { + D_80182698[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_8018F174; + extern u8 D_8018F175; + extern u8 D_8018F176; + extern M2C_UNK D_8018F178; + extern u8 D_8018F179; + extern u8 D_8018F17A; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_8018F174) = 0x20; + D_8018F175 = 0x20; + D_8018F176 = 0; + (*(u8 *)&D_8018F178) = 0xc0; + D_8018F179 = 0xc0; + D_8018F17A = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_8018F174; +extern M2C_UNK D_8018F178; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_8018F174, &D_8018F178, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_8018F175; + extern u8 D_8018F176; + extern u8 D_8018F179; + extern u8 D_8018F17A; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_8018F174); + if (*p1 != 0) *p1 -= 4; + if (D_8018F175 != 0) D_8018F175 -= 4; + if (D_8018F176 != 0) D_8018F176 -= 4; + p2 = &(*(u8 *)&D_8018F178); + if (*p2 != 0) *p2 -= 4; + if (D_8018F179 != 0) D_8018F179 -= 4; + if (D_8018F17A != 0) D_8018F17A -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_8018F174), &(*(int *)&D_8018F178), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_8018F100; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_8018F100); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_801826A8; + extern s32 D_801826B0; + extern s32 D_801826B8; + extern s32 D_801826C0; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_801826A8, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_801826B0, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_801826B8, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_801826C0, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_801826C8[])(void); + +void func_8016C14C(void *a0) { + D_801826C8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_8018F17C[]; +extern u8 D_8018F184[]; +extern u8 D_8018F134[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_8018F17C, D_8018F184, D_8018F134); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_8018F190[]; + extern u8 D_8018F250; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_8018F190[1] = 0xff; + D_8018F190[2] = 0x10; + D_8018F190[0] = 0x10; + D_8018F190[6] = 0; + D_8018F190[5] = 0; + D_8018F190[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_8018F190, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_8018F250, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_8018F190); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8016AB6C", func_8016C998); + + +extern void (*D_801826D0[])(void); + +void func_8016CB84(void *a0) { + D_801826D0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_8018F250[]; + + + Blk_8016CF04_8016CF04 *p = &D_8018F250[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_801826EC[])(void); + +void func_8016D19C(void *a0) { + D_801826EC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_801826F4[])(void); + +void func_8016D428(void *a0) { + D_801826F4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018275C[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_8018275C[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80182700; +extern u8 D_8018270C; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80182700, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018270C); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80182790[])(void); + +void func_8016DEA4(void *a0) { + D_80182790[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80182798[])(void); + +void func_8016DF20(void *a0) { + D_80182798[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_801827EC[])(void); + +void func_8016E5B8(void *a0) { + D_801827EC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_801827AC[4]; + extern s32 D_801827CC; + extern s32 D_801827D4; + extern s32 D_801827DC; + extern s32 D_801827E4; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_801827AC[0], pp, &tmp); + RotTransSV(&D_801827AC[1], &prim.v[1], &tmp); + RotTransSV(&D_801827AC[2], &prim.v[2], &tmp); + RotTransSV(&D_801827AC[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_801827CC; + prim.f1 = D_801827D4; + prim.f2 = D_801827DC; + prim.f3 = D_801827E4; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_8018282C[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_8018282C[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80182820[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80182820[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80182810[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80182810[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80182820[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80182820[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80182820[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_8018283C; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_8018283C; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_801828B4[])(void); + +void func_8016F6E0(void *a0) { + D_801828B4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_801828BC[])(void); + +void func_8016F798(void *a0) { + D_801828BC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_801828C4[])(void); + +void func_8016F834(void *a0) { + D_801828C4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_801828CC[])(void); + +void func_8016F8E4(void *a0) { + D_801828CC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_801828D4[])(void); + +void func_8016F9C4(void *a0) { + D_801828D4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_801828DC[])(void); + +void func_8016FA84(void *a0) { + D_801828DC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_801828E8[])(void); + +void func_8016FB7C(void *a0) { + D_801828E8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_801828F4[])(void); + +void func_8016FC90(void *a0) { + D_801828F4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80182900[])(void); + +void func_8016FDB4(void *a0) { + D_80182900[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80182910[])(void); + +void func_8016FF30(void *a0) { + D_80182910[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80182920[])(void); + +void func_8016FFDC(void *a0) { + D_80182920[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80182928[])(void); + +void func_80170150(void *a0) { + D_80182928[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80182930[])(void); + +void func_80170240(void *a0) { + D_80182930[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80182938[])(void); + +void func_801702FC(void *a0) { + D_80182938[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80182940[])(void); + +void func_801703E0(void *a0) { + D_80182940[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80182948[])(void); + +void func_801704B0(void *a0) { + D_80182948[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80182950[])(void); + +void func_80170548(void *a0) { + D_80182950[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80182958[])(void); + +void func_801705F8(void *a0) { + D_80182958[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80182960[])(void); + +void func_801706AC(void *a0) { + D_80182960[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80182968[])(void); + +void func_80170748(void *a0) { + D_80182968[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80182970[])(void); + +void func_80170810(void *a0) { + D_80182970[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80182978[])(void); + +void func_80170AD8(void *a0) { + D_80182978[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80182980[])(void); + +void func_80170BD8(void *a0) { + D_80182980[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80182988[])(void); + +void func_80170C74(void *a0) { + D_80182988[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80182990[])(void); + +void func_80170D68(void *a0) { + D_80182990[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80182998[])(void); + +void func_80170E34(void *a0) { + D_80182998[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_801829A0[])(void); + +void func_80170EFC(void *a0) { + D_801829A0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_801829A8[])(void); + +void func_80170FB0(void *a0) { + D_801829A8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_801829B0[])(void); + +void func_80171064(void *a0) { + D_801829B0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_801829B8[])(void); + +void func_80171120(void *a0) { + D_801829B8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_801829C0[])(void); + +void func_801711C0(void *a0) { + D_801829C0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_801829C8[])(void); + +void func_80171260(void *a0) { + D_801829C8[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_801829D0[])(void); + +void func_801714E4(void *a0) { + D_801829D0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8016AB6C", func_80172C50); + + +extern void (*D_80182A14[])(void); + +void func_80172CA0(void *a0) { + D_80182A14[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_801829D8; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_801829D8); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC05_007/ov_SC05_007_jr_8015AE2C.c b/src/ov_SC05_007/ov_SC05_007_jr_8015AE2C.c index ad52d9ede..c76fd86a0 100644 --- a/src/ov_SC05_007/ov_SC05_007_jr_8015AE2C.c +++ b/src/ov_SC05_007/ov_SC05_007_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_80183BC8[])(void); void func_8016AB30(void *a0) { D_80183BC8[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80183C44[])(void); - -void func_8016B4BC(void *a0) { - D_80183C44[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_8019C018; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_8019C018); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80183C38[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80183C38; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80183C7C[]; -extern unsigned short D_80183C84[]; -extern unsigned short D_80183C8C[]; -extern unsigned char D_8019C020[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_8019C020 + param_2 * 0x40); - puVar3 = D_80183C7C[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80183C84[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80183C8C[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_8019C018; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_8019C018, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80183C94[])(void); - -void func_8016BBA4(void *a0) { - D_80183C94[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_8019C154; - extern u8 D_8019C155; - extern u8 D_8019C156; - extern M2C_UNK D_8019C158; - extern u8 D_8019C159; - extern u8 D_8019C15A; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_8019C154) = 0x20; - D_8019C155 = 0x20; - D_8019C156 = 0; - (*(u8 *)&D_8019C158) = 0xc0; - D_8019C159 = 0xc0; - D_8019C15A = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_8019C154; -extern M2C_UNK D_8019C158; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_8019C154, &D_8019C158, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_8019C155; - extern u8 D_8019C156; - extern u8 D_8019C159; - extern u8 D_8019C15A; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_8019C154); - if (*p1 != 0) *p1 -= 4; - if (D_8019C155 != 0) D_8019C155 -= 4; - if (D_8019C156 != 0) D_8019C156 -= 4; - p2 = &(*(u8 *)&D_8019C158); - if (*p2 != 0) *p2 -= 4; - if (D_8019C159 != 0) D_8019C159 -= 4; - if (D_8019C15A != 0) D_8019C15A -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_8019C154), &(*(int *)&D_8019C158), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_8019C0E0; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_8019C0E0); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80183CA4; - extern s32 D_80183CAC; - extern s32 D_80183CB4; - extern s32 D_80183CBC; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80183CA4, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80183CAC, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80183CB4, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80183CBC, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80183CC4[])(void); - -void func_8016C14C(void *a0) { - D_80183CC4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_8019C15C[]; -extern u8 D_8019C164[]; -extern u8 D_8019C114[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_8019C15C, D_8019C164, D_8019C114); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_8019C170[]; - extern u8 D_8019C230; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_8019C170[1] = 0xff; - D_8019C170[2] = 0x10; - D_8019C170[0] = 0x10; - D_8019C170[6] = 0; - D_8019C170[5] = 0; - D_8019C170[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_8019C170, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_8019C230, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_8019C170); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8015AE2C", func_8016C998); - - -extern void (*D_80183CCC[])(void); - -void func_8016CB84(void *a0) { - D_80183CCC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_8019C230[]; - - - Blk_8016CF04_8016CF04 *p = &D_8019C230[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80183CE8[])(void); - -void func_8016D19C(void *a0) { - D_80183CE8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80183CF0[])(void); - -void func_8016D428(void *a0) { - D_80183CF0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80183D58[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80183D58[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80183CFC; -extern u8 D_80183D08; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80183CFC, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80183D08); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80183D8C[])(void); - -void func_8016DEA4(void *a0) { - D_80183D8C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80183D94[])(void); - -void func_8016DF20(void *a0) { - D_80183D94[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80183DE8[])(void); - -void func_8016E5B8(void *a0) { - D_80183DE8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80183DA8[4]; - extern s32 D_80183DC8; - extern s32 D_80183DD0; - extern s32 D_80183DD8; - extern s32 D_80183DE0; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80183DA8[0], pp, &tmp); - RotTransSV(&D_80183DA8[1], &prim.v[1], &tmp); - RotTransSV(&D_80183DA8[2], &prim.v[2], &tmp); - RotTransSV(&D_80183DA8[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80183DC8; - prim.f1 = D_80183DD0; - prim.f2 = D_80183DD8; - prim.f3 = D_80183DE0; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80183E28[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80183E28[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80183E1C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80183E1C[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80183E0C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80183E0C[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80183E1C[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80183E1C[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80183E1C[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80183E38; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80183E38; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80183EB0[])(void); - -void func_8016F6E0(void *a0) { - D_80183EB0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80183EB8[])(void); - -void func_8016F798(void *a0) { - D_80183EB8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80183EC0[])(void); - -void func_8016F834(void *a0) { - D_80183EC0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80183EC8[])(void); - -void func_8016F8E4(void *a0) { - D_80183EC8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80183ED0[])(void); - -void func_8016F9C4(void *a0) { - D_80183ED0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80183ED8[])(void); - -void func_8016FA84(void *a0) { - D_80183ED8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80183EE4[])(void); - -void func_8016FB7C(void *a0) { - D_80183EE4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80183EF0[])(void); - -void func_8016FC90(void *a0) { - D_80183EF0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80183EFC[])(void); - -void func_8016FDB4(void *a0) { - D_80183EFC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80183F0C[])(void); - -void func_8016FF30(void *a0) { - D_80183F0C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80183F1C[])(void); - -void func_8016FFDC(void *a0) { - D_80183F1C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80183F24[])(void); - -void func_80170150(void *a0) { - D_80183F24[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80183F2C[])(void); - -void func_80170240(void *a0) { - D_80183F2C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80183F34[])(void); - -void func_801702FC(void *a0) { - D_80183F34[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80183F3C[])(void); - -void func_801703E0(void *a0) { - D_80183F3C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80183F44[])(void); - -void func_801704B0(void *a0) { - D_80183F44[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80183F4C[])(void); - -void func_80170548(void *a0) { - D_80183F4C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80183F54[])(void); - -void func_801705F8(void *a0) { - D_80183F54[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80183F5C[])(void); - -void func_801706AC(void *a0) { - D_80183F5C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80183F64[])(void); - -void func_80170748(void *a0) { - D_80183F64[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80183F6C[])(void); - -void func_80170810(void *a0) { - D_80183F6C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80183F74[])(void); - -void func_80170AD8(void *a0) { - D_80183F74[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80183F7C[])(void); - -void func_80170BD8(void *a0) { - D_80183F7C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80183F84[])(void); - -void func_80170C74(void *a0) { - D_80183F84[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80183F8C[])(void); - -void func_80170D68(void *a0) { - D_80183F8C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80183F94[])(void); - -void func_80170E34(void *a0) { - D_80183F94[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80183F9C[])(void); - -void func_80170EFC(void *a0) { - D_80183F9C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80183FA4[])(void); - -void func_80170FB0(void *a0) { - D_80183FA4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80183FAC[])(void); - -void func_80171064(void *a0) { - D_80183FAC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80183FB4[])(void); - -void func_80171120(void *a0) { - D_80183FB4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80183FBC[])(void); - -void func_801711C0(void *a0) { - D_80183FBC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80183FC4[])(void); - -void func_80171260(void *a0) { - D_80183FC4[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80183FCC[])(void); - -void func_801714E4(void *a0) { - D_80183FCC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8015AE2C", func_80172C50); - - -extern void (*D_80184010[])(void); - -void func_80172CA0(void *a0) { - D_80184010[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80183FD4; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80183FD4); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC05_007/ov_SC05_007_jr_8016AB6C.c b/src/ov_SC05_007/ov_SC05_007_jr_8016AB6C.c new file mode 100644 index 000000000..15ab40986 --- /dev/null +++ b/src/ov_SC05_007/ov_SC05_007_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80182F94; +extern u8 D_80182F04; +extern u8 D_80182EE0; +extern u8 D_80182EBC; +extern u8 D_80182F70; +extern u8 D_80182F4C; +extern u8 D_80182F28; +extern u8 D_80182E98; +extern void func_80145934(void); +extern u8 D_80183024; +extern u8 D_80183000; +extern u8 D_80182FDC; +extern u8 D_80182FB8; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018241C[]; +extern unsigned char D_8018244C[]; +extern unsigned char D_8018249C[]; +extern unsigned char D_801824CC[]; +extern unsigned char D_801824FC[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018254C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80182614[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018269C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801826A4; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8019BBA8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019BBAC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801826D4; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018277C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801827A0[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80182790; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801827B4[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801827C0[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801827D0[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801827E8[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801827D8; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801827FC[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80182818[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80182808; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018282C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80182840[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80182854; +extern void (*D_8018287C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018285C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801828C8[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801828CC[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80182D30[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80182D40[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_8019BBE0; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80182D68[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80182D48; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80182D58; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80182DA8[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80182DB0[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80182D7C; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80182DBC[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80182D8C; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_8019BBE8; +extern s32 D_8019BBF4; +extern s32 D_8019BBF8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80182DF8[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80182DCC[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_8019BBF0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80183048[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80182E68[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_801830EC[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80183240[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018305C; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80183248[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018306C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018308C; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80183250[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80183278[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80183284[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_801830F8[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80183328; +extern void func_8015D380(s32 a0); +extern unsigned char D_8018240C[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_8018333C[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80183378[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_801833C0; +extern u16 D_801833C2; +extern u16 D_801833C4; +extern s32 D_801833C8; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_801833D0; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_801830DC; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80183454[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80183504[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80183534[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80183598; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_8019BC00[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_801835BC[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_8019BC58[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80183604[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_801835F4; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_8019B4C8[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_8018360C[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80183660[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80183628; +extern s16 D_8018365C; +extern s16 D_8018365A; +extern s16 D_80183658; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_8018366C[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_8019BCB8; +extern u8 D_8019BCB9; +extern u8 D_8019BCBA; +extern u8 D_8019BCBB; +extern u8 D_8019BCBC; +extern u8 D_8019BCBD; +extern u8 D_8019BCBE; +extern u8 D_8019BCBF; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_8018367C[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_8019BCF8; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_801836C0[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_8018373C[]; +extern s32 D_8018375C[]; +extern u8 D_801837D8[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_801837F8[]; +extern u8 D_80183818[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_801838B4[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80183930[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_8019B4D8; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_8018393C[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80183944[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80183A0C[])(void); +extern void func_80166618(void *a0); +extern void (*D_80183A1C[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80183A2C[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80183A38[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80183998[]; +extern u8 D_801839AC[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80183A50[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80183A58[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80183A60[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80183A68[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80183A70[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80183A78[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80183A80[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80183B34[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80183B3C[])(void); +extern void func_80169F00(void *a0); +extern char D_80183AEC[]; +extern char D_80183AAC[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80183B74[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80183B80[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80183BC8[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80183B88[]; + extern u8 D_80183B98[]; + extern u8 D_8019BFC8[]; + extern u8 D_8019BFF0[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80183B88, D_8019BFC8) + 3; + func_8001CE28(obj, D_8019BFC8); + } else { + var_s3 = func_80024054(D_80183B98, D_8019BFF0) + 9; + func_8001CE28(obj, D_8019BFF0); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80183C44[])(void); + +void func_8016B4BC(void *a0) { + D_80183C44[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_8019C018; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_8019C018); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80183C38[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80183C38; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80183C7C[]; +extern unsigned short D_80183C84[]; +extern unsigned short D_80183C8C[]; +extern unsigned char D_8019C020[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_8019C020 + param_2 * 0x40); + puVar3 = D_80183C7C[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80183C84[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80183C8C[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_8019C018; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_8019C018, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80183C94[])(void); + +void func_8016BBA4(void *a0) { + D_80183C94[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_8019C154; + extern u8 D_8019C155; + extern u8 D_8019C156; + extern M2C_UNK D_8019C158; + extern u8 D_8019C159; + extern u8 D_8019C15A; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_8019C154) = 0x20; + D_8019C155 = 0x20; + D_8019C156 = 0; + (*(u8 *)&D_8019C158) = 0xc0; + D_8019C159 = 0xc0; + D_8019C15A = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_8019C154; +extern M2C_UNK D_8019C158; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_8019C154, &D_8019C158, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_8019C155; + extern u8 D_8019C156; + extern u8 D_8019C159; + extern u8 D_8019C15A; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_8019C154); + if (*p1 != 0) *p1 -= 4; + if (D_8019C155 != 0) D_8019C155 -= 4; + if (D_8019C156 != 0) D_8019C156 -= 4; + p2 = &(*(u8 *)&D_8019C158); + if (*p2 != 0) *p2 -= 4; + if (D_8019C159 != 0) D_8019C159 -= 4; + if (D_8019C15A != 0) D_8019C15A -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_8019C154), &(*(int *)&D_8019C158), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_8019C0E0; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_8019C0E0); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80183CA4; + extern s32 D_80183CAC; + extern s32 D_80183CB4; + extern s32 D_80183CBC; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80183CA4, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80183CAC, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80183CB4, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80183CBC, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80183CC4[])(void); + +void func_8016C14C(void *a0) { + D_80183CC4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_8019C15C[]; +extern u8 D_8019C164[]; +extern u8 D_8019C114[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_8019C15C, D_8019C164, D_8019C114); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_8019C170[]; + extern u8 D_8019C230; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_8019C170[1] = 0xff; + D_8019C170[2] = 0x10; + D_8019C170[0] = 0x10; + D_8019C170[6] = 0; + D_8019C170[5] = 0; + D_8019C170[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_8019C170, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_8019C230, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_8019C170); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8016AB6C", func_8016C998); + + +extern void (*D_80183CCC[])(void); + +void func_8016CB84(void *a0) { + D_80183CCC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_8019C230[]; + + + Blk_8016CF04_8016CF04 *p = &D_8019C230[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80183CE8[])(void); + +void func_8016D19C(void *a0) { + D_80183CE8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80183CF0[])(void); + +void func_8016D428(void *a0) { + D_80183CF0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80183D58[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80183D58[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80183CFC; +extern u8 D_80183D08; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80183CFC, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80183D08); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80183D8C[])(void); + +void func_8016DEA4(void *a0) { + D_80183D8C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80183D94[])(void); + +void func_8016DF20(void *a0) { + D_80183D94[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80183DE8[])(void); + +void func_8016E5B8(void *a0) { + D_80183DE8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80183DA8[4]; + extern s32 D_80183DC8; + extern s32 D_80183DD0; + extern s32 D_80183DD8; + extern s32 D_80183DE0; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80183DA8[0], pp, &tmp); + RotTransSV(&D_80183DA8[1], &prim.v[1], &tmp); + RotTransSV(&D_80183DA8[2], &prim.v[2], &tmp); + RotTransSV(&D_80183DA8[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80183DC8; + prim.f1 = D_80183DD0; + prim.f2 = D_80183DD8; + prim.f3 = D_80183DE0; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80183E28[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80183E28[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80183E1C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80183E1C[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80183E0C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80183E0C[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80183E1C[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80183E1C[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80183E1C[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80183E38; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80183E38; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80183EB0[])(void); + +void func_8016F6E0(void *a0) { + D_80183EB0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80183EB8[])(void); + +void func_8016F798(void *a0) { + D_80183EB8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80183EC0[])(void); + +void func_8016F834(void *a0) { + D_80183EC0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80183EC8[])(void); + +void func_8016F8E4(void *a0) { + D_80183EC8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80183ED0[])(void); + +void func_8016F9C4(void *a0) { + D_80183ED0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80183ED8[])(void); + +void func_8016FA84(void *a0) { + D_80183ED8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80183EE4[])(void); + +void func_8016FB7C(void *a0) { + D_80183EE4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80183EF0[])(void); + +void func_8016FC90(void *a0) { + D_80183EF0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80183EFC[])(void); + +void func_8016FDB4(void *a0) { + D_80183EFC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80183F0C[])(void); + +void func_8016FF30(void *a0) { + D_80183F0C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80183F1C[])(void); + +void func_8016FFDC(void *a0) { + D_80183F1C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80183F24[])(void); + +void func_80170150(void *a0) { + D_80183F24[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80183F2C[])(void); + +void func_80170240(void *a0) { + D_80183F2C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80183F34[])(void); + +void func_801702FC(void *a0) { + D_80183F34[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80183F3C[])(void); + +void func_801703E0(void *a0) { + D_80183F3C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80183F44[])(void); + +void func_801704B0(void *a0) { + D_80183F44[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80183F4C[])(void); + +void func_80170548(void *a0) { + D_80183F4C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80183F54[])(void); + +void func_801705F8(void *a0) { + D_80183F54[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80183F5C[])(void); + +void func_801706AC(void *a0) { + D_80183F5C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80183F64[])(void); + +void func_80170748(void *a0) { + D_80183F64[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80183F6C[])(void); + +void func_80170810(void *a0) { + D_80183F6C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80183F74[])(void); + +void func_80170AD8(void *a0) { + D_80183F74[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80183F7C[])(void); + +void func_80170BD8(void *a0) { + D_80183F7C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80183F84[])(void); + +void func_80170C74(void *a0) { + D_80183F84[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80183F8C[])(void); + +void func_80170D68(void *a0) { + D_80183F8C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80183F94[])(void); + +void func_80170E34(void *a0) { + D_80183F94[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80183F9C[])(void); + +void func_80170EFC(void *a0) { + D_80183F9C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80183FA4[])(void); + +void func_80170FB0(void *a0) { + D_80183FA4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80183FAC[])(void); + +void func_80171064(void *a0) { + D_80183FAC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80183FB4[])(void); + +void func_80171120(void *a0) { + D_80183FB4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80183FBC[])(void); + +void func_801711C0(void *a0) { + D_80183FBC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80183FC4[])(void); + +void func_80171260(void *a0) { + D_80183FC4[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80183FCC[])(void); + +void func_801714E4(void *a0) { + D_80183FCC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8016AB6C", func_80172C50); + + +extern void (*D_80184010[])(void); + +void func_80172CA0(void *a0) { + D_80184010[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80183FD4; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80183FD4); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC05_008/ov_SC05_008_jr_8015AE2C.c b/src/ov_SC05_008/ov_SC05_008_jr_8015AE2C.c index 6e531a3a4..29d328dc3 100644 --- a/src/ov_SC05_008/ov_SC05_008_jr_8015AE2C.c +++ b/src/ov_SC05_008/ov_SC05_008_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_80185B20[])(void); void func_8016AB30(void *a0) { D_80185B20[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80185B9C[])(void); - -void func_8016B4BC(void *a0) { - D_80185B9C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801A0348; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801A0348); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80185B90[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80185B90; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80185BD4[]; -extern unsigned short D_80185BDC[]; -extern unsigned short D_80185BE4[]; -extern unsigned char D_801A0350[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801A0350 + param_2 * 0x40); - puVar3 = D_80185BD4[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80185BDC[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80185BE4[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801A0348; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801A0348, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80185BEC[])(void); - -void func_8016BBA4(void *a0) { - D_80185BEC[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801A0484; - extern u8 D_801A0485; - extern u8 D_801A0486; - extern M2C_UNK D_801A0488; - extern u8 D_801A0489; - extern u8 D_801A048A; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801A0484) = 0x20; - D_801A0485 = 0x20; - D_801A0486 = 0; - (*(u8 *)&D_801A0488) = 0xc0; - D_801A0489 = 0xc0; - D_801A048A = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801A0484; -extern M2C_UNK D_801A0488; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801A0484, &D_801A0488, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801A0485; - extern u8 D_801A0486; - extern u8 D_801A0489; - extern u8 D_801A048A; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801A0484); - if (*p1 != 0) *p1 -= 4; - if (D_801A0485 != 0) D_801A0485 -= 4; - if (D_801A0486 != 0) D_801A0486 -= 4; - p2 = &(*(u8 *)&D_801A0488); - if (*p2 != 0) *p2 -= 4; - if (D_801A0489 != 0) D_801A0489 -= 4; - if (D_801A048A != 0) D_801A048A -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801A0484), &(*(int *)&D_801A0488), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801A0410; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801A0410); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80185BFC; - extern s32 D_80185C04; - extern s32 D_80185C0C; - extern s32 D_80185C14; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80185BFC, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80185C04, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80185C0C, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80185C14, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80185C1C[])(void); - -void func_8016C14C(void *a0) { - D_80185C1C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801A048C[]; -extern u8 D_801A0494[]; -extern u8 D_801A0444[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801A048C, D_801A0494, D_801A0444); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801A04A0[]; - extern u8 D_801A0560; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801A04A0[1] = 0xff; - D_801A04A0[2] = 0x10; - D_801A04A0[0] = 0x10; - D_801A04A0[6] = 0; - D_801A04A0[5] = 0; - D_801A04A0[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801A04A0, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801A0560, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801A04A0); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8015AE2C", func_8016C998); - - -extern void (*D_80185C24[])(void); - -void func_8016CB84(void *a0) { - D_80185C24[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801A0560[]; - - - Blk_8016CF04_8016CF04 *p = &D_801A0560[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80185C40[])(void); - -void func_8016D19C(void *a0) { - D_80185C40[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80185C48[])(void); - -void func_8016D428(void *a0) { - D_80185C48[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80185CB0[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80185CB0[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80185C54; -extern u8 D_80185C60; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80185C54, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80185C60); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80185CE4[])(void); - -void func_8016DEA4(void *a0) { - D_80185CE4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80185CEC[])(void); - -void func_8016DF20(void *a0) { - D_80185CEC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80185D40[])(void); - -void func_8016E5B8(void *a0) { - D_80185D40[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80185D00[4]; - extern s32 D_80185D20; - extern s32 D_80185D28; - extern s32 D_80185D30; - extern s32 D_80185D38; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80185D00[0], pp, &tmp); - RotTransSV(&D_80185D00[1], &prim.v[1], &tmp); - RotTransSV(&D_80185D00[2], &prim.v[2], &tmp); - RotTransSV(&D_80185D00[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80185D20; - prim.f1 = D_80185D28; - prim.f2 = D_80185D30; - prim.f3 = D_80185D38; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80185D80[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80185D80[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80185D74[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80185D74[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80185D64[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80185D64[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80185D74[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80185D74[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80185D74[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80185D90; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80185D90; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80185E08[])(void); - -void func_8016F6E0(void *a0) { - D_80185E08[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80185E10[])(void); - -void func_8016F798(void *a0) { - D_80185E10[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80185E18[])(void); - -void func_8016F834(void *a0) { - D_80185E18[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80185E20[])(void); - -void func_8016F8E4(void *a0) { - D_80185E20[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80185E28[])(void); - -void func_8016F9C4(void *a0) { - D_80185E28[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80185E30[])(void); - -void func_8016FA84(void *a0) { - D_80185E30[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80185E3C[])(void); - -void func_8016FB7C(void *a0) { - D_80185E3C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80185E48[])(void); - -void func_8016FC90(void *a0) { - D_80185E48[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80185E54[])(void); - -void func_8016FDB4(void *a0) { - D_80185E54[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80185E64[])(void); - -void func_8016FF30(void *a0) { - D_80185E64[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80185E74[])(void); - -void func_8016FFDC(void *a0) { - D_80185E74[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80185E7C[])(void); - -void func_80170150(void *a0) { - D_80185E7C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80185E84[])(void); - -void func_80170240(void *a0) { - D_80185E84[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80185E8C[])(void); - -void func_801702FC(void *a0) { - D_80185E8C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80185E94[])(void); - -void func_801703E0(void *a0) { - D_80185E94[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80185E9C[])(void); - -void func_801704B0(void *a0) { - D_80185E9C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80185EA4[])(void); - -void func_80170548(void *a0) { - D_80185EA4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80185EAC[])(void); - -void func_801705F8(void *a0) { - D_80185EAC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80185EB4[])(void); - -void func_801706AC(void *a0) { - D_80185EB4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80185EBC[])(void); - -void func_80170748(void *a0) { - D_80185EBC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80185EC4[])(void); - -void func_80170810(void *a0) { - D_80185EC4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80185ECC[])(void); - -void func_80170AD8(void *a0) { - D_80185ECC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80185ED4[])(void); - -void func_80170BD8(void *a0) { - D_80185ED4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80185EDC[])(void); - -void func_80170C74(void *a0) { - D_80185EDC[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80185EE4[])(void); - -void func_80170D68(void *a0) { - D_80185EE4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80185EEC[])(void); - -void func_80170E34(void *a0) { - D_80185EEC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80185EF4[])(void); - -void func_80170EFC(void *a0) { - D_80185EF4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80185EFC[])(void); - -void func_80170FB0(void *a0) { - D_80185EFC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80185F04[])(void); - -void func_80171064(void *a0) { - D_80185F04[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80185F0C[])(void); - -void func_80171120(void *a0) { - D_80185F0C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80185F14[])(void); - -void func_801711C0(void *a0) { - D_80185F14[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80185F1C[])(void); - -void func_80171260(void *a0) { - D_80185F1C[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80185F24[])(void); - -void func_801714E4(void *a0) { - D_80185F24[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8015AE2C", func_80172C50); - - -extern void (*D_80185F68[])(void); - -void func_80172CA0(void *a0) { - D_80185F68[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80185F2C; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80185F2C); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC05_008/ov_SC05_008_jr_8016AB6C.c b/src/ov_SC05_008/ov_SC05_008_jr_8016AB6C.c new file mode 100644 index 000000000..3b5142ac2 --- /dev/null +++ b/src/ov_SC05_008/ov_SC05_008_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80184EEC; +extern u8 D_80184E5C; +extern u8 D_80184E38; +extern u8 D_80184E14; +extern u8 D_80184EC8; +extern u8 D_80184EA4; +extern u8 D_80184E80; +extern u8 D_80184DF0; +extern void func_80145934(void); +extern u8 D_80184F7C; +extern u8 D_80184F58; +extern u8 D_80184F34; +extern u8 D_80184F10; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80184374[]; +extern unsigned char D_801843A4[]; +extern unsigned char D_801843F4[]; +extern unsigned char D_80184424[]; +extern unsigned char D_80184454[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801844A4[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018456C[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801845F4[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801845FC; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8019FED8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019FEDC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018462C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801846D4[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801846F8[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801846E8; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018470C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80184718[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80184728[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80184740[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80184730; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80184754[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80184770[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80184760; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80184784[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80184798[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801847AC; +extern void (*D_801847D4[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801847B4; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80184820[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80184824[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80184C88[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80184C98[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_8019FF10; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80184CC0[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80184CA0; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80184CB0; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80184D00[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80184D08[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80184CD4; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80184D14[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80184CE4; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_8019FF18; +extern s32 D_8019FF24; +extern s32 D_8019FF28; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80184D50[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80184D24[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_8019FF20; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80184FA0[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80184DC0[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80185044[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80185198[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80184FB4; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_801851A0[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80184FC4; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80184FE4; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_801851A8[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_801851D0[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_801851DC[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80185050[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80185280; +extern void func_8015D380(s32 a0); +extern unsigned char D_80184364[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80185294[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_801852D0[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80185318; +extern u16 D_8018531A; +extern u16 D_8018531C; +extern s32 D_80185320; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80185328; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80185034; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_801853AC[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_8018545C[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_8018548C[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_801854F0; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_8019FF30[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80185514[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_8019FF88[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_8018555C[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_8018554C; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_8019F7FC[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80185564[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_801855B8[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80185580; +extern s16 D_801855B4; +extern s16 D_801855B2; +extern s16 D_801855B0; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_801855C4[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_8019FFE8; +extern u8 D_8019FFE9; +extern u8 D_8019FFEA; +extern u8 D_8019FFEB; +extern u8 D_8019FFEC; +extern u8 D_8019FFED; +extern u8 D_8019FFEE; +extern u8 D_8019FFEF; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_801855D4[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801A0028; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80185618[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80185694[]; +extern s32 D_801856B4[]; +extern u8 D_80185730[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80185750[]; +extern u8 D_80185770[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_8018580C[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80185888[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_8019F80C; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80185894[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_8018589C[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80185964[])(void); +extern void func_80166618(void *a0); +extern void (*D_80185974[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80185984[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80185990[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_801858F0[]; +extern u8 D_80185904[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_801859A8[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_801859B0[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_801859B8[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_801859C0[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_801859C8[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_801859D0[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_801859D8[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80185A8C[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80185A94[])(void); +extern void func_80169F00(void *a0); +extern char D_80185A44[]; +extern char D_80185A04[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80185ACC[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80185AD8[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80185B20[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80185AE0[]; + extern u8 D_80185AF0[]; + extern u8 D_801A02F8[]; + extern u8 D_801A0320[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80185AE0, D_801A02F8) + 3; + func_8001CE28(obj, D_801A02F8); + } else { + var_s3 = func_80024054(D_80185AF0, D_801A0320) + 9; + func_8001CE28(obj, D_801A0320); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80185B9C[])(void); + +void func_8016B4BC(void *a0) { + D_80185B9C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801A0348; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801A0348); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80185B90[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80185B90; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80185BD4[]; +extern unsigned short D_80185BDC[]; +extern unsigned short D_80185BE4[]; +extern unsigned char D_801A0350[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801A0350 + param_2 * 0x40); + puVar3 = D_80185BD4[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80185BDC[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80185BE4[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801A0348; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801A0348, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80185BEC[])(void); + +void func_8016BBA4(void *a0) { + D_80185BEC[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801A0484; + extern u8 D_801A0485; + extern u8 D_801A0486; + extern M2C_UNK D_801A0488; + extern u8 D_801A0489; + extern u8 D_801A048A; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801A0484) = 0x20; + D_801A0485 = 0x20; + D_801A0486 = 0; + (*(u8 *)&D_801A0488) = 0xc0; + D_801A0489 = 0xc0; + D_801A048A = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801A0484; +extern M2C_UNK D_801A0488; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801A0484, &D_801A0488, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801A0485; + extern u8 D_801A0486; + extern u8 D_801A0489; + extern u8 D_801A048A; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801A0484); + if (*p1 != 0) *p1 -= 4; + if (D_801A0485 != 0) D_801A0485 -= 4; + if (D_801A0486 != 0) D_801A0486 -= 4; + p2 = &(*(u8 *)&D_801A0488); + if (*p2 != 0) *p2 -= 4; + if (D_801A0489 != 0) D_801A0489 -= 4; + if (D_801A048A != 0) D_801A048A -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801A0484), &(*(int *)&D_801A0488), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801A0410; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801A0410); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80185BFC; + extern s32 D_80185C04; + extern s32 D_80185C0C; + extern s32 D_80185C14; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80185BFC, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80185C04, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80185C0C, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80185C14, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80185C1C[])(void); + +void func_8016C14C(void *a0) { + D_80185C1C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801A048C[]; +extern u8 D_801A0494[]; +extern u8 D_801A0444[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801A048C, D_801A0494, D_801A0444); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801A04A0[]; + extern u8 D_801A0560; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801A04A0[1] = 0xff; + D_801A04A0[2] = 0x10; + D_801A04A0[0] = 0x10; + D_801A04A0[6] = 0; + D_801A04A0[5] = 0; + D_801A04A0[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801A04A0, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801A0560, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801A04A0); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8016AB6C", func_8016C998); + + +extern void (*D_80185C24[])(void); + +void func_8016CB84(void *a0) { + D_80185C24[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801A0560[]; + + + Blk_8016CF04_8016CF04 *p = &D_801A0560[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80185C40[])(void); + +void func_8016D19C(void *a0) { + D_80185C40[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80185C48[])(void); + +void func_8016D428(void *a0) { + D_80185C48[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80185CB0[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80185CB0[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80185C54; +extern u8 D_80185C60; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80185C54, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80185C60); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80185CE4[])(void); + +void func_8016DEA4(void *a0) { + D_80185CE4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80185CEC[])(void); + +void func_8016DF20(void *a0) { + D_80185CEC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80185D40[])(void); + +void func_8016E5B8(void *a0) { + D_80185D40[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80185D00[4]; + extern s32 D_80185D20; + extern s32 D_80185D28; + extern s32 D_80185D30; + extern s32 D_80185D38; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80185D00[0], pp, &tmp); + RotTransSV(&D_80185D00[1], &prim.v[1], &tmp); + RotTransSV(&D_80185D00[2], &prim.v[2], &tmp); + RotTransSV(&D_80185D00[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80185D20; + prim.f1 = D_80185D28; + prim.f2 = D_80185D30; + prim.f3 = D_80185D38; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80185D80[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80185D80[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80185D74[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80185D74[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80185D64[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80185D64[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80185D74[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80185D74[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80185D74[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80185D90; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80185D90; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80185E08[])(void); + +void func_8016F6E0(void *a0) { + D_80185E08[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80185E10[])(void); + +void func_8016F798(void *a0) { + D_80185E10[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80185E18[])(void); + +void func_8016F834(void *a0) { + D_80185E18[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80185E20[])(void); + +void func_8016F8E4(void *a0) { + D_80185E20[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80185E28[])(void); + +void func_8016F9C4(void *a0) { + D_80185E28[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80185E30[])(void); + +void func_8016FA84(void *a0) { + D_80185E30[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80185E3C[])(void); + +void func_8016FB7C(void *a0) { + D_80185E3C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80185E48[])(void); + +void func_8016FC90(void *a0) { + D_80185E48[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80185E54[])(void); + +void func_8016FDB4(void *a0) { + D_80185E54[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80185E64[])(void); + +void func_8016FF30(void *a0) { + D_80185E64[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80185E74[])(void); + +void func_8016FFDC(void *a0) { + D_80185E74[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80185E7C[])(void); + +void func_80170150(void *a0) { + D_80185E7C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80185E84[])(void); + +void func_80170240(void *a0) { + D_80185E84[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80185E8C[])(void); + +void func_801702FC(void *a0) { + D_80185E8C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80185E94[])(void); + +void func_801703E0(void *a0) { + D_80185E94[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80185E9C[])(void); + +void func_801704B0(void *a0) { + D_80185E9C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80185EA4[])(void); + +void func_80170548(void *a0) { + D_80185EA4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80185EAC[])(void); + +void func_801705F8(void *a0) { + D_80185EAC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80185EB4[])(void); + +void func_801706AC(void *a0) { + D_80185EB4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80185EBC[])(void); + +void func_80170748(void *a0) { + D_80185EBC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80185EC4[])(void); + +void func_80170810(void *a0) { + D_80185EC4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80185ECC[])(void); + +void func_80170AD8(void *a0) { + D_80185ECC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80185ED4[])(void); + +void func_80170BD8(void *a0) { + D_80185ED4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80185EDC[])(void); + +void func_80170C74(void *a0) { + D_80185EDC[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80185EE4[])(void); + +void func_80170D68(void *a0) { + D_80185EE4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80185EEC[])(void); + +void func_80170E34(void *a0) { + D_80185EEC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80185EF4[])(void); + +void func_80170EFC(void *a0) { + D_80185EF4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80185EFC[])(void); + +void func_80170FB0(void *a0) { + D_80185EFC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80185F04[])(void); + +void func_80171064(void *a0) { + D_80185F04[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80185F0C[])(void); + +void func_80171120(void *a0) { + D_80185F0C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80185F14[])(void); + +void func_801711C0(void *a0) { + D_80185F14[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80185F1C[])(void); + +void func_80171260(void *a0) { + D_80185F1C[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80185F24[])(void); + +void func_801714E4(void *a0) { + D_80185F24[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8016AB6C", func_80172C50); + + +extern void (*D_80185F68[])(void); + +void func_80172CA0(void *a0) { + D_80185F68[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80185F2C; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80185F2C); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC05_009/ov_SC05_009_jr_8015AE2C.c b/src/ov_SC05_009/ov_SC05_009_jr_8015AE2C.c index f5fc09bc8..520a4266a 100644 --- a/src/ov_SC05_009/ov_SC05_009_jr_8015AE2C.c +++ b/src/ov_SC05_009/ov_SC05_009_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_80181C30[])(void); void func_8016AB30(void *a0) { D_80181C30[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80181CAC[])(void); - -void func_8016B4BC(void *a0) { - D_80181CAC[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_80195D58; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_80195D58); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80181CA0[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80181CA0; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80181CE4[]; -extern unsigned short D_80181CEC[]; -extern unsigned short D_80181CF4[]; -extern unsigned char D_80195D60[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_80195D60 + param_2 * 0x40); - puVar3 = D_80181CE4[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80181CEC[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80181CF4[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_80195D58; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_80195D58, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80181CFC[])(void); - -void func_8016BBA4(void *a0) { - D_80181CFC[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_80195E94; - extern u8 D_80195E95; - extern u8 D_80195E96; - extern M2C_UNK D_80195E98; - extern u8 D_80195E99; - extern u8 D_80195E9A; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_80195E94) = 0x20; - D_80195E95 = 0x20; - D_80195E96 = 0; - (*(u8 *)&D_80195E98) = 0xc0; - D_80195E99 = 0xc0; - D_80195E9A = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_80195E94; -extern M2C_UNK D_80195E98; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_80195E94, &D_80195E98, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_80195E95; - extern u8 D_80195E96; - extern u8 D_80195E99; - extern u8 D_80195E9A; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_80195E94); - if (*p1 != 0) *p1 -= 4; - if (D_80195E95 != 0) D_80195E95 -= 4; - if (D_80195E96 != 0) D_80195E96 -= 4; - p2 = &(*(u8 *)&D_80195E98); - if (*p2 != 0) *p2 -= 4; - if (D_80195E99 != 0) D_80195E99 -= 4; - if (D_80195E9A != 0) D_80195E9A -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_80195E94), &(*(int *)&D_80195E98), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_80195E20; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_80195E20); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80181D0C; - extern s32 D_80181D14; - extern s32 D_80181D1C; - extern s32 D_80181D24; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80181D0C, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80181D14, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80181D1C, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80181D24, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80181D2C[])(void); - -void func_8016C14C(void *a0) { - D_80181D2C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_80195E9C[]; -extern u8 D_80195EA4[]; -extern u8 D_80195E54[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_80195E9C, D_80195EA4, D_80195E54); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_80195EB0[]; - extern u8 D_80195F70; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_80195EB0[1] = 0xff; - D_80195EB0[2] = 0x10; - D_80195EB0[0] = 0x10; - D_80195EB0[6] = 0; - D_80195EB0[5] = 0; - D_80195EB0[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_80195EB0, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_80195F70, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_80195EB0); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8015AE2C", func_8016C998); - - -extern void (*D_80181D34[])(void); - -void func_8016CB84(void *a0) { - D_80181D34[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_80195F70[]; - - - Blk_8016CF04_8016CF04 *p = &D_80195F70[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80181D50[])(void); - -void func_8016D19C(void *a0) { - D_80181D50[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80181D58[])(void); - -void func_8016D428(void *a0) { - D_80181D58[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80181DC0[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80181DC0[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80181D64; -extern u8 D_80181D70; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80181D64, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80181D70); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80181DF4[])(void); - -void func_8016DEA4(void *a0) { - D_80181DF4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80181DFC[])(void); - -void func_8016DF20(void *a0) { - D_80181DFC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80181E50[])(void); - -void func_8016E5B8(void *a0) { - D_80181E50[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80181E10[4]; - extern s32 D_80181E30; - extern s32 D_80181E38; - extern s32 D_80181E40; - extern s32 D_80181E48; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80181E10[0], pp, &tmp); - RotTransSV(&D_80181E10[1], &prim.v[1], &tmp); - RotTransSV(&D_80181E10[2], &prim.v[2], &tmp); - RotTransSV(&D_80181E10[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80181E30; - prim.f1 = D_80181E38; - prim.f2 = D_80181E40; - prim.f3 = D_80181E48; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80181E90[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80181E90[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80181E84[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80181E84[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80181E74[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80181E74[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80181E84[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80181E84[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80181E84[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80181EA0; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80181EA0; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80181F18[])(void); - -void func_8016F6E0(void *a0) { - D_80181F18[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80181F20[])(void); - -void func_8016F798(void *a0) { - D_80181F20[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80181F28[])(void); - -void func_8016F834(void *a0) { - D_80181F28[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80181F30[])(void); - -void func_8016F8E4(void *a0) { - D_80181F30[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80181F38[])(void); - -void func_8016F9C4(void *a0) { - D_80181F38[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80181F40[])(void); - -void func_8016FA84(void *a0) { - D_80181F40[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80181F4C[])(void); - -void func_8016FB7C(void *a0) { - D_80181F4C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80181F58[])(void); - -void func_8016FC90(void *a0) { - D_80181F58[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80181F64[])(void); - -void func_8016FDB4(void *a0) { - D_80181F64[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80181F74[])(void); - -void func_8016FF30(void *a0) { - D_80181F74[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80181F84[])(void); - -void func_8016FFDC(void *a0) { - D_80181F84[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80181F8C[])(void); - -void func_80170150(void *a0) { - D_80181F8C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80181F94[])(void); - -void func_80170240(void *a0) { - D_80181F94[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80181F9C[])(void); - -void func_801702FC(void *a0) { - D_80181F9C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80181FA4[])(void); - -void func_801703E0(void *a0) { - D_80181FA4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80181FAC[])(void); - -void func_801704B0(void *a0) { - D_80181FAC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80181FB4[])(void); - -void func_80170548(void *a0) { - D_80181FB4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80181FBC[])(void); - -void func_801705F8(void *a0) { - D_80181FBC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80181FC4[])(void); - -void func_801706AC(void *a0) { - D_80181FC4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80181FCC[])(void); - -void func_80170748(void *a0) { - D_80181FCC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80181FD4[])(void); - -void func_80170810(void *a0) { - D_80181FD4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80181FDC[])(void); - -void func_80170AD8(void *a0) { - D_80181FDC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80181FE4[])(void); - -void func_80170BD8(void *a0) { - D_80181FE4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80181FEC[])(void); - -void func_80170C74(void *a0) { - D_80181FEC[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80181FF4[])(void); - -void func_80170D68(void *a0) { - D_80181FF4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80181FFC[])(void); - -void func_80170E34(void *a0) { - D_80181FFC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80182004[])(void); - -void func_80170EFC(void *a0) { - D_80182004[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_8018200C[])(void); - -void func_80170FB0(void *a0) { - D_8018200C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80182014[])(void); - -void func_80171064(void *a0) { - D_80182014[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_8018201C[])(void); - -void func_80171120(void *a0) { - D_8018201C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80182024[])(void); - -void func_801711C0(void *a0) { - D_80182024[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_8018202C[])(void); - -void func_80171260(void *a0) { - D_8018202C[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80182034[])(void); - -void func_801714E4(void *a0) { - D_80182034[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8015AE2C", func_80172C50); - - -extern void (*D_80182078[])(void); - -void func_80172CA0(void *a0) { - D_80182078[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_8018203C; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_8018203C); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC05_009/ov_SC05_009_jr_8016AB6C.c b/src/ov_SC05_009/ov_SC05_009_jr_8016AB6C.c new file mode 100644 index 000000000..4281a0381 --- /dev/null +++ b/src/ov_SC05_009/ov_SC05_009_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80180FFC; +extern u8 D_80180F6C; +extern u8 D_80180F48; +extern u8 D_80180F24; +extern u8 D_80180FD8; +extern u8 D_80180FB4; +extern u8 D_80180F90; +extern u8 D_80180F00; +extern void func_80145934(void); +extern u8 D_8018108C; +extern u8 D_80181068; +extern u8 D_80181044; +extern u8 D_80181020; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80180484[]; +extern unsigned char D_801804B4[]; +extern unsigned char D_80180504[]; +extern unsigned char D_80180534[]; +extern unsigned char D_80180564[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801805B4[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018067C[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80180704[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018070C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801958E8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801958EC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018073C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801807E4[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80180808[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801807F8; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018081C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80180828[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80180838[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80180850[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80180840; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80180864[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80180880[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80180870; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80180894[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801808A8[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801808BC; +extern void (*D_801808E4[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801808C4; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80180930[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80180934[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80180D98[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80180DA8[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_80195920; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80180DD0[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80180DB0; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80180DC0; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80180E10[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80180E18[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80180DE4; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80180E24[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80180DF4; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_80195928; +extern s32 D_80195934; +extern s32 D_80195938; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80180E60[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80180E34[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_80195930; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_801810B0[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80180ED0[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80181154[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_801812A8[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_801810C4; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_801812B0[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_801810D4; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801810F4; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_801812B8[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_801812E0[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_801812EC[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80181160[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80181390; +extern void func_8015D380(s32 a0); +extern unsigned char D_80180474[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_801813A4[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_801813E0[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80181428; +extern u16 D_8018142A; +extern u16 D_8018142C; +extern s32 D_80181430; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80181438; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80181144; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_801814BC[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_8018156C[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_8018159C[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80181600; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_80195940[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80181624[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_80195998[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_8018166C[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_8018165C; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_80195210[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80181674[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_801816C8[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80181690; +extern s16 D_801816C4; +extern s16 D_801816C2; +extern s16 D_801816C0; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_801816D4[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801959F8; +extern u8 D_801959F9; +extern u8 D_801959FA; +extern u8 D_801959FB; +extern u8 D_801959FC; +extern u8 D_801959FD; +extern u8 D_801959FE; +extern u8 D_801959FF; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_801816E4[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_80195A38; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80181728[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_801817A4[]; +extern s32 D_801817C4[]; +extern u8 D_80181840[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80181860[]; +extern u8 D_80181880[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_8018191C[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80181998[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_80195220; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_801819A4[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_801819AC[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80181A74[])(void); +extern void func_80166618(void *a0); +extern void (*D_80181A84[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80181A94[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80181AA0[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80181A00[]; +extern u8 D_80181A14[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80181AB8[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80181AC0[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80181AC8[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80181AD0[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80181AD8[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80181AE0[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80181AE8[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80181B9C[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80181BA4[])(void); +extern void func_80169F00(void *a0); +extern char D_80181B54[]; +extern char D_80181B14[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80181BDC[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80181BE8[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80181C30[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80181BF0[]; + extern u8 D_80181C00[]; + extern u8 D_80195D08[]; + extern u8 D_80195D30[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80181BF0, D_80195D08) + 3; + func_8001CE28(obj, D_80195D08); + } else { + var_s3 = func_80024054(D_80181C00, D_80195D30) + 9; + func_8001CE28(obj, D_80195D30); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80181CAC[])(void); + +void func_8016B4BC(void *a0) { + D_80181CAC[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_80195D58; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_80195D58); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80181CA0[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80181CA0; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80181CE4[]; +extern unsigned short D_80181CEC[]; +extern unsigned short D_80181CF4[]; +extern unsigned char D_80195D60[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_80195D60 + param_2 * 0x40); + puVar3 = D_80181CE4[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80181CEC[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80181CF4[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_80195D58; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_80195D58, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80181CFC[])(void); + +void func_8016BBA4(void *a0) { + D_80181CFC[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_80195E94; + extern u8 D_80195E95; + extern u8 D_80195E96; + extern M2C_UNK D_80195E98; + extern u8 D_80195E99; + extern u8 D_80195E9A; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_80195E94) = 0x20; + D_80195E95 = 0x20; + D_80195E96 = 0; + (*(u8 *)&D_80195E98) = 0xc0; + D_80195E99 = 0xc0; + D_80195E9A = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_80195E94; +extern M2C_UNK D_80195E98; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_80195E94, &D_80195E98, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_80195E95; + extern u8 D_80195E96; + extern u8 D_80195E99; + extern u8 D_80195E9A; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_80195E94); + if (*p1 != 0) *p1 -= 4; + if (D_80195E95 != 0) D_80195E95 -= 4; + if (D_80195E96 != 0) D_80195E96 -= 4; + p2 = &(*(u8 *)&D_80195E98); + if (*p2 != 0) *p2 -= 4; + if (D_80195E99 != 0) D_80195E99 -= 4; + if (D_80195E9A != 0) D_80195E9A -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_80195E94), &(*(int *)&D_80195E98), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_80195E20; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_80195E20); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80181D0C; + extern s32 D_80181D14; + extern s32 D_80181D1C; + extern s32 D_80181D24; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80181D0C, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80181D14, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80181D1C, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80181D24, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80181D2C[])(void); + +void func_8016C14C(void *a0) { + D_80181D2C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_80195E9C[]; +extern u8 D_80195EA4[]; +extern u8 D_80195E54[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_80195E9C, D_80195EA4, D_80195E54); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_80195EB0[]; + extern u8 D_80195F70; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_80195EB0[1] = 0xff; + D_80195EB0[2] = 0x10; + D_80195EB0[0] = 0x10; + D_80195EB0[6] = 0; + D_80195EB0[5] = 0; + D_80195EB0[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_80195EB0, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_80195F70, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_80195EB0); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8016AB6C", func_8016C998); + + +extern void (*D_80181D34[])(void); + +void func_8016CB84(void *a0) { + D_80181D34[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_80195F70[]; + + + Blk_8016CF04_8016CF04 *p = &D_80195F70[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80181D50[])(void); + +void func_8016D19C(void *a0) { + D_80181D50[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80181D58[])(void); + +void func_8016D428(void *a0) { + D_80181D58[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80181DC0[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80181DC0[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80181D64; +extern u8 D_80181D70; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80181D64, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80181D70); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80181DF4[])(void); + +void func_8016DEA4(void *a0) { + D_80181DF4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80181DFC[])(void); + +void func_8016DF20(void *a0) { + D_80181DFC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80181E50[])(void); + +void func_8016E5B8(void *a0) { + D_80181E50[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80181E10[4]; + extern s32 D_80181E30; + extern s32 D_80181E38; + extern s32 D_80181E40; + extern s32 D_80181E48; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80181E10[0], pp, &tmp); + RotTransSV(&D_80181E10[1], &prim.v[1], &tmp); + RotTransSV(&D_80181E10[2], &prim.v[2], &tmp); + RotTransSV(&D_80181E10[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80181E30; + prim.f1 = D_80181E38; + prim.f2 = D_80181E40; + prim.f3 = D_80181E48; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80181E90[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80181E90[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80181E84[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80181E84[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80181E74[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80181E74[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80181E84[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80181E84[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80181E84[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80181EA0; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80181EA0; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80181F18[])(void); + +void func_8016F6E0(void *a0) { + D_80181F18[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80181F20[])(void); + +void func_8016F798(void *a0) { + D_80181F20[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80181F28[])(void); + +void func_8016F834(void *a0) { + D_80181F28[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80181F30[])(void); + +void func_8016F8E4(void *a0) { + D_80181F30[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80181F38[])(void); + +void func_8016F9C4(void *a0) { + D_80181F38[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80181F40[])(void); + +void func_8016FA84(void *a0) { + D_80181F40[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80181F4C[])(void); + +void func_8016FB7C(void *a0) { + D_80181F4C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80181F58[])(void); + +void func_8016FC90(void *a0) { + D_80181F58[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80181F64[])(void); + +void func_8016FDB4(void *a0) { + D_80181F64[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80181F74[])(void); + +void func_8016FF30(void *a0) { + D_80181F74[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80181F84[])(void); + +void func_8016FFDC(void *a0) { + D_80181F84[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80181F8C[])(void); + +void func_80170150(void *a0) { + D_80181F8C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80181F94[])(void); + +void func_80170240(void *a0) { + D_80181F94[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80181F9C[])(void); + +void func_801702FC(void *a0) { + D_80181F9C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80181FA4[])(void); + +void func_801703E0(void *a0) { + D_80181FA4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80181FAC[])(void); + +void func_801704B0(void *a0) { + D_80181FAC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80181FB4[])(void); + +void func_80170548(void *a0) { + D_80181FB4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80181FBC[])(void); + +void func_801705F8(void *a0) { + D_80181FBC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80181FC4[])(void); + +void func_801706AC(void *a0) { + D_80181FC4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80181FCC[])(void); + +void func_80170748(void *a0) { + D_80181FCC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80181FD4[])(void); + +void func_80170810(void *a0) { + D_80181FD4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80181FDC[])(void); + +void func_80170AD8(void *a0) { + D_80181FDC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80181FE4[])(void); + +void func_80170BD8(void *a0) { + D_80181FE4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80181FEC[])(void); + +void func_80170C74(void *a0) { + D_80181FEC[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80181FF4[])(void); + +void func_80170D68(void *a0) { + D_80181FF4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80181FFC[])(void); + +void func_80170E34(void *a0) { + D_80181FFC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80182004[])(void); + +void func_80170EFC(void *a0) { + D_80182004[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_8018200C[])(void); + +void func_80170FB0(void *a0) { + D_8018200C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80182014[])(void); + +void func_80171064(void *a0) { + D_80182014[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_8018201C[])(void); + +void func_80171120(void *a0) { + D_8018201C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80182024[])(void); + +void func_801711C0(void *a0) { + D_80182024[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_8018202C[])(void); + +void func_80171260(void *a0) { + D_8018202C[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80182034[])(void); + +void func_801714E4(void *a0) { + D_80182034[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8016AB6C", func_80172C50); + + +extern void (*D_80182078[])(void); + +void func_80172CA0(void *a0) { + D_80182078[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_8018203C; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_8018203C); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC05_010/ov_SC05_010_jr_8015AE2C.c b/src/ov_SC05_010/ov_SC05_010_jr_8015AE2C.c index 1536cf0fb..55b978a69 100644 --- a/src/ov_SC05_010/ov_SC05_010_jr_8015AE2C.c +++ b/src/ov_SC05_010/ov_SC05_010_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_8018BB0C[])(void); void func_8016AB30(void *a0) { D_8018BB0C[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_8018BB88[])(void); - -void func_8016B4BC(void *a0) { - D_8018BB88[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801C61A8; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801C61A8); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_8018BB7C[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_8018BB7C; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_8018BBC0[]; -extern unsigned short D_8018BBC8[]; -extern unsigned short D_8018BBD0[]; -extern unsigned char D_801C61B0[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801C61B0 + param_2 * 0x40); - puVar3 = D_8018BBC0[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_8018BBC8[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_8018BBD0[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801C61A8; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801C61A8, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_8018BBD8[])(void); - -void func_8016BBA4(void *a0) { - D_8018BBD8[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801C62E4; - extern u8 D_801C62E5; - extern u8 D_801C62E6; - extern M2C_UNK D_801C62E8; - extern u8 D_801C62E9; - extern u8 D_801C62EA; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801C62E4) = 0x20; - D_801C62E5 = 0x20; - D_801C62E6 = 0; - (*(u8 *)&D_801C62E8) = 0xc0; - D_801C62E9 = 0xc0; - D_801C62EA = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801C62E4; -extern M2C_UNK D_801C62E8; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801C62E4, &D_801C62E8, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801C62E5; - extern u8 D_801C62E6; - extern u8 D_801C62E9; - extern u8 D_801C62EA; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801C62E4); - if (*p1 != 0) *p1 -= 4; - if (D_801C62E5 != 0) D_801C62E5 -= 4; - if (D_801C62E6 != 0) D_801C62E6 -= 4; - p2 = &(*(u8 *)&D_801C62E8); - if (*p2 != 0) *p2 -= 4; - if (D_801C62E9 != 0) D_801C62E9 -= 4; - if (D_801C62EA != 0) D_801C62EA -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801C62E4), &(*(int *)&D_801C62E8), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801C6270; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801C6270); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_8018BBE8; - extern s32 D_8018BBF0; - extern s32 D_8018BBF8; - extern s32 D_8018BC00; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_8018BBE8, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_8018BBF0, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_8018BBF8, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_8018BC00, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_8018BC08[])(void); - -void func_8016C14C(void *a0) { - D_8018BC08[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801C62EC[]; -extern u8 D_801C62F4[]; -extern u8 D_801C62A4[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801C62EC, D_801C62F4, D_801C62A4); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801C6300[]; - extern u8 D_801C63C0; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801C6300[1] = 0xff; - D_801C6300[2] = 0x10; - D_801C6300[0] = 0x10; - D_801C6300[6] = 0; - D_801C6300[5] = 0; - D_801C6300[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801C6300, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801C63C0, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801C6300); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8015AE2C", func_8016C998); - - -extern void (*D_8018BC10[])(void); - -void func_8016CB84(void *a0) { - D_8018BC10[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801C63C0[]; - - - Blk_8016CF04_8016CF04 *p = &D_801C63C0[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_8018BC2C[])(void); - -void func_8016D19C(void *a0) { - D_8018BC2C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_8018BC34[])(void); - -void func_8016D428(void *a0) { - D_8018BC34[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_8018BC9C[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_8018BC9C[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_8018BC40; -extern u8 D_8018BC4C; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018BC40, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018BC4C); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8015AE2C", func_8016DC20); - - -extern void (*D_8018BCD0[])(void); - -void func_8016DEA4(void *a0) { - D_8018BCD0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_8018BCD8[])(void); - -void func_8016DF20(void *a0) { - D_8018BCD8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_8018BD2C[])(void); - -void func_8016E5B8(void *a0) { - D_8018BD2C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_8018BCEC[4]; - extern s32 D_8018BD0C; - extern s32 D_8018BD14; - extern s32 D_8018BD1C; - extern s32 D_8018BD24; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_8018BCEC[0], pp, &tmp); - RotTransSV(&D_8018BCEC[1], &prim.v[1], &tmp); - RotTransSV(&D_8018BCEC[2], &prim.v[2], &tmp); - RotTransSV(&D_8018BCEC[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_8018BD0C; - prim.f1 = D_8018BD14; - prim.f2 = D_8018BD1C; - prim.f3 = D_8018BD24; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_8018BD6C[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_8018BD6C[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_8018BD60[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_8018BD60[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_8018BD50[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_8018BD50[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018BD60[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_8018BD60[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_8018BD60[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_8018BD7C; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_8018BD7C; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_8018BDF4[])(void); - -void func_8016F6E0(void *a0) { - D_8018BDF4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_8018BDFC[])(void); - -void func_8016F798(void *a0) { - D_8018BDFC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_8018BE04[])(void); - -void func_8016F834(void *a0) { - D_8018BE04[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_8018BE0C[])(void); - -void func_8016F8E4(void *a0) { - D_8018BE0C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_8018BE14[])(void); - -void func_8016F9C4(void *a0) { - D_8018BE14[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_8018BE1C[])(void); - -void func_8016FA84(void *a0) { - D_8018BE1C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_8018BE28[])(void); - -void func_8016FB7C(void *a0) { - D_8018BE28[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_8018BE34[])(void); - -void func_8016FC90(void *a0) { - D_8018BE34[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_8018BE40[])(void); - -void func_8016FDB4(void *a0) { - D_8018BE40[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_8018BE50[])(void); - -void func_8016FF30(void *a0) { - D_8018BE50[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_8018BE60[])(void); - -void func_8016FFDC(void *a0) { - D_8018BE60[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_8018BE68[])(void); - -void func_80170150(void *a0) { - D_8018BE68[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_8018BE70[])(void); - -void func_80170240(void *a0) { - D_8018BE70[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_8018BE78[])(void); - -void func_801702FC(void *a0) { - D_8018BE78[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_8018BE80[])(void); - -void func_801703E0(void *a0) { - D_8018BE80[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_8018BE88[])(void); - -void func_801704B0(void *a0) { - D_8018BE88[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_8018BE90[])(void); - -void func_80170548(void *a0) { - D_8018BE90[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_8018BE98[])(void); - -void func_801705F8(void *a0) { - D_8018BE98[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_8018BEA0[])(void); - -void func_801706AC(void *a0) { - D_8018BEA0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_8018BEA8[])(void); - -void func_80170748(void *a0) { - D_8018BEA8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_8018BEB0[])(void); - -void func_80170810(void *a0) { - D_8018BEB0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_8018BEB8[])(void); - -void func_80170AD8(void *a0) { - D_8018BEB8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_8018BEC0[])(void); - -void func_80170BD8(void *a0) { - D_8018BEC0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_8018BEC8[])(void); - -void func_80170C74(void *a0) { - D_8018BEC8[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8015AE2C", func_80170CF0); - - -extern void (*D_8018BED0[])(void); - -void func_80170D68(void *a0) { - D_8018BED0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_8018BED8[])(void); - -void func_80170E34(void *a0) { - D_8018BED8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_8018BEE0[])(void); - -void func_80170EFC(void *a0) { - D_8018BEE0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_8018BEE8[])(void); - -void func_80170FB0(void *a0) { - D_8018BEE8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_8018BEF0[])(void); - -void func_80171064(void *a0) { - D_8018BEF0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_8018BEF8[])(void); - -void func_80171120(void *a0) { - D_8018BEF8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_8018BF00[])(void); - -void func_801711C0(void *a0) { - D_8018BF00[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_8018BF08[])(void); - -void func_80171260(void *a0) { - D_8018BF08[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_8018BF10[])(void); - -void func_801714E4(void *a0) { - D_8018BF10[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8015AE2C", func_80172C50); - - -extern void (*D_8018BF54[])(void); - -void func_80172CA0(void *a0) { - D_8018BF54[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_8018BF18; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_8018BF18); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC05_010/ov_SC05_010_jr_8016AB6C.c b/src/ov_SC05_010/ov_SC05_010_jr_8016AB6C.c new file mode 100644 index 000000000..2241e8f51 --- /dev/null +++ b/src/ov_SC05_010/ov_SC05_010_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018AED8; +extern u8 D_8018AE48; +extern u8 D_8018AE24; +extern u8 D_8018AE00; +extern u8 D_8018AEB4; +extern u8 D_8018AE90; +extern u8 D_8018AE6C; +extern u8 D_8018ADDC; +extern void func_80145934(void); +extern u8 D_8018AF68; +extern u8 D_8018AF44; +extern u8 D_8018AF20; +extern u8 D_8018AEFC; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018A360[]; +extern unsigned char D_8018A390[]; +extern unsigned char D_8018A3E0[]; +extern unsigned char D_8018A410[]; +extern unsigned char D_8018A440[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018A490[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018A558[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018A5E0[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018A5E8; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801C5D38; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801C5D3C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018A618; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018A6C0[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018A6E4[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018A6D4; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018A6F8[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018A704[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018A714[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018A72C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018A71C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018A740[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018A75C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018A74C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018A770[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018A784[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018A798; +extern void (*D_8018A7C0[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018A7A0; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018A80C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018A810[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018AC74[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018AC84[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801C5D70; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018ACAC[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018AC8C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018AC9C; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018ACEC[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018ACF4[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018ACC0; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018AD00[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018ACD0; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801C5D78; +extern s32 D_801C5D84; +extern s32 D_801C5D88; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018AD3C[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018AD10[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801C5D80; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018AF8C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018ADAC[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018B030[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018B184[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018AFA0; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018B18C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018AFB0; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018AFD0; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_8018B194[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_8018B1BC[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_8018B1C8[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_8018B03C[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_8018B26C; +extern void func_8015D380(s32 a0); +extern unsigned char D_8018A350[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_8018B280[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_8018B2BC[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_8018B304; +extern u16 D_8018B306; +extern u16 D_8018B308; +extern s32 D_8018B30C; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_8018B314; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_8018B020; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_8018B398[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_8018B448[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_8018B478[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_8018B4DC; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801C5D90[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_8018B500[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801C5DE8[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_8018B548[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_8018B538; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801C5444[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_8018B550[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_8018B5A4[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_8018B56C; +extern s16 D_8018B5A0; +extern s16 D_8018B59E; +extern s16 D_8018B59C; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_8018B5B0[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801C5E48; +extern u8 D_801C5E49; +extern u8 D_801C5E4A; +extern u8 D_801C5E4B; +extern u8 D_801C5E4C; +extern u8 D_801C5E4D; +extern u8 D_801C5E4E; +extern u8 D_801C5E4F; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_8018B5C0[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801C5E88; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_8018B604[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_8018B680[]; +extern s32 D_8018B6A0[]; +extern u8 D_8018B71C[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_8018B73C[]; +extern u8 D_8018B75C[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_8018B7F8[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_8018B874[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801C5454; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_8018B880[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_8018B888[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_8018B950[])(void); +extern void func_80166618(void *a0); +extern void (*D_8018B960[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_8018B970[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_8018B97C[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_8018B8DC[]; +extern u8 D_8018B8F0[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_8018B994[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_8018B99C[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_8018B9A4[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_8018B9AC[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_8018B9B4[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_8018B9BC[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_8018B9C4[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_8018BA78[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_8018BA80[])(void); +extern void func_80169F00(void *a0); +extern char D_8018BA30[]; +extern char D_8018B9F0[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_8018BAB8[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_8018BAC4[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_8018BB0C[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_8018BACC[]; + extern u8 D_8018BADC[]; + extern u8 D_801C6158[]; + extern u8 D_801C6180[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_8018BACC, D_801C6158) + 3; + func_8001CE28(obj, D_801C6158); + } else { + var_s3 = func_80024054(D_8018BADC, D_801C6180) + 9; + func_8001CE28(obj, D_801C6180); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_8018BB88[])(void); + +void func_8016B4BC(void *a0) { + D_8018BB88[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801C61A8; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801C61A8); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_8018BB7C[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_8018BB7C; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_8018BBC0[]; +extern unsigned short D_8018BBC8[]; +extern unsigned short D_8018BBD0[]; +extern unsigned char D_801C61B0[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801C61B0 + param_2 * 0x40); + puVar3 = D_8018BBC0[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_8018BBC8[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_8018BBD0[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801C61A8; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801C61A8, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_8018BBD8[])(void); + +void func_8016BBA4(void *a0) { + D_8018BBD8[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801C62E4; + extern u8 D_801C62E5; + extern u8 D_801C62E6; + extern M2C_UNK D_801C62E8; + extern u8 D_801C62E9; + extern u8 D_801C62EA; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801C62E4) = 0x20; + D_801C62E5 = 0x20; + D_801C62E6 = 0; + (*(u8 *)&D_801C62E8) = 0xc0; + D_801C62E9 = 0xc0; + D_801C62EA = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801C62E4; +extern M2C_UNK D_801C62E8; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801C62E4, &D_801C62E8, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801C62E5; + extern u8 D_801C62E6; + extern u8 D_801C62E9; + extern u8 D_801C62EA; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801C62E4); + if (*p1 != 0) *p1 -= 4; + if (D_801C62E5 != 0) D_801C62E5 -= 4; + if (D_801C62E6 != 0) D_801C62E6 -= 4; + p2 = &(*(u8 *)&D_801C62E8); + if (*p2 != 0) *p2 -= 4; + if (D_801C62E9 != 0) D_801C62E9 -= 4; + if (D_801C62EA != 0) D_801C62EA -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801C62E4), &(*(int *)&D_801C62E8), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801C6270; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801C6270); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_8018BBE8; + extern s32 D_8018BBF0; + extern s32 D_8018BBF8; + extern s32 D_8018BC00; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_8018BBE8, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_8018BBF0, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_8018BBF8, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_8018BC00, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_8018BC08[])(void); + +void func_8016C14C(void *a0) { + D_8018BC08[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801C62EC[]; +extern u8 D_801C62F4[]; +extern u8 D_801C62A4[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801C62EC, D_801C62F4, D_801C62A4); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801C6300[]; + extern u8 D_801C63C0; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801C6300[1] = 0xff; + D_801C6300[2] = 0x10; + D_801C6300[0] = 0x10; + D_801C6300[6] = 0; + D_801C6300[5] = 0; + D_801C6300[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801C6300, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801C63C0, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801C6300); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8016AB6C", func_8016C998); + + +extern void (*D_8018BC10[])(void); + +void func_8016CB84(void *a0) { + D_8018BC10[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801C63C0[]; + + + Blk_8016CF04_8016CF04 *p = &D_801C63C0[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_8018BC2C[])(void); + +void func_8016D19C(void *a0) { + D_8018BC2C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_8018BC34[])(void); + +void func_8016D428(void *a0) { + D_8018BC34[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018BC9C[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_8018BC9C[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_8018BC40; +extern u8 D_8018BC4C; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018BC40, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018BC4C); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8016AB6C", func_8016DC20); + + +extern void (*D_8018BCD0[])(void); + +void func_8016DEA4(void *a0) { + D_8018BCD0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_8018BCD8[])(void); + +void func_8016DF20(void *a0) { + D_8018BCD8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_8018BD2C[])(void); + +void func_8016E5B8(void *a0) { + D_8018BD2C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_8018BCEC[4]; + extern s32 D_8018BD0C; + extern s32 D_8018BD14; + extern s32 D_8018BD1C; + extern s32 D_8018BD24; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_8018BCEC[0], pp, &tmp); + RotTransSV(&D_8018BCEC[1], &prim.v[1], &tmp); + RotTransSV(&D_8018BCEC[2], &prim.v[2], &tmp); + RotTransSV(&D_8018BCEC[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_8018BD0C; + prim.f1 = D_8018BD14; + prim.f2 = D_8018BD1C; + prim.f3 = D_8018BD24; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_8018BD6C[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_8018BD6C[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_8018BD60[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_8018BD60[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_8018BD50[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_8018BD50[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018BD60[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_8018BD60[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_8018BD60[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_8018BD7C; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_8018BD7C; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_8018BDF4[])(void); + +void func_8016F6E0(void *a0) { + D_8018BDF4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_8018BDFC[])(void); + +void func_8016F798(void *a0) { + D_8018BDFC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_8018BE04[])(void); + +void func_8016F834(void *a0) { + D_8018BE04[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_8018BE0C[])(void); + +void func_8016F8E4(void *a0) { + D_8018BE0C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_8018BE14[])(void); + +void func_8016F9C4(void *a0) { + D_8018BE14[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_8018BE1C[])(void); + +void func_8016FA84(void *a0) { + D_8018BE1C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_8018BE28[])(void); + +void func_8016FB7C(void *a0) { + D_8018BE28[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_8018BE34[])(void); + +void func_8016FC90(void *a0) { + D_8018BE34[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_8018BE40[])(void); + +void func_8016FDB4(void *a0) { + D_8018BE40[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_8018BE50[])(void); + +void func_8016FF30(void *a0) { + D_8018BE50[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_8018BE60[])(void); + +void func_8016FFDC(void *a0) { + D_8018BE60[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_8018BE68[])(void); + +void func_80170150(void *a0) { + D_8018BE68[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_8018BE70[])(void); + +void func_80170240(void *a0) { + D_8018BE70[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_8018BE78[])(void); + +void func_801702FC(void *a0) { + D_8018BE78[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_8018BE80[])(void); + +void func_801703E0(void *a0) { + D_8018BE80[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_8018BE88[])(void); + +void func_801704B0(void *a0) { + D_8018BE88[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_8018BE90[])(void); + +void func_80170548(void *a0) { + D_8018BE90[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_8018BE98[])(void); + +void func_801705F8(void *a0) { + D_8018BE98[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_8018BEA0[])(void); + +void func_801706AC(void *a0) { + D_8018BEA0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_8018BEA8[])(void); + +void func_80170748(void *a0) { + D_8018BEA8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_8018BEB0[])(void); + +void func_80170810(void *a0) { + D_8018BEB0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_8018BEB8[])(void); + +void func_80170AD8(void *a0) { + D_8018BEB8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_8018BEC0[])(void); + +void func_80170BD8(void *a0) { + D_8018BEC0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_8018BEC8[])(void); + +void func_80170C74(void *a0) { + D_8018BEC8[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8016AB6C", func_80170CF0); + + +extern void (*D_8018BED0[])(void); + +void func_80170D68(void *a0) { + D_8018BED0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_8018BED8[])(void); + +void func_80170E34(void *a0) { + D_8018BED8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_8018BEE0[])(void); + +void func_80170EFC(void *a0) { + D_8018BEE0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_8018BEE8[])(void); + +void func_80170FB0(void *a0) { + D_8018BEE8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_8018BEF0[])(void); + +void func_80171064(void *a0) { + D_8018BEF0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_8018BEF8[])(void); + +void func_80171120(void *a0) { + D_8018BEF8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_8018BF00[])(void); + +void func_801711C0(void *a0) { + D_8018BF00[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_8018BF08[])(void); + +void func_80171260(void *a0) { + D_8018BF08[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_8018BF10[])(void); + +void func_801714E4(void *a0) { + D_8018BF10[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8016AB6C", func_80172C50); + + +extern void (*D_8018BF54[])(void); + +void func_80172CA0(void *a0) { + D_8018BF54[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_8018BF18; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_8018BF18); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC05_011/ov_SC05_011_jr_8015AE2C.c b/src/ov_SC05_011/ov_SC05_011_jr_8015AE2C.c index 8282a276e..4c35ee69f 100644 --- a/src/ov_SC05_011/ov_SC05_011_jr_8015AE2C.c +++ b/src/ov_SC05_011/ov_SC05_011_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_80180E84[])(void); void func_8016AB30(void *a0) { D_80180E84[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80180F00[])(void); - -void func_8016B4BC(void *a0) { - D_80180F00[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_8019C330; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_8019C330); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80180EF4[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80180EF4; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80180F38[]; -extern unsigned short D_80180F40[]; -extern unsigned short D_80180F48[]; -extern unsigned char D_8019C338[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_8019C338 + param_2 * 0x40); - puVar3 = D_80180F38[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80180F40[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80180F48[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_8019C330; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_8019C330, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80180F50[])(void); - -void func_8016BBA4(void *a0) { - D_80180F50[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_8019C46C; - extern u8 D_8019C46D; - extern u8 D_8019C46E; - extern M2C_UNK D_8019C470; - extern u8 D_8019C471; - extern u8 D_8019C472; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_8019C46C) = 0x20; - D_8019C46D = 0x20; - D_8019C46E = 0; - (*(u8 *)&D_8019C470) = 0xc0; - D_8019C471 = 0xc0; - D_8019C472 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_8019C46C; -extern M2C_UNK D_8019C470; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_8019C46C, &D_8019C470, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_8019C46D; - extern u8 D_8019C46E; - extern u8 D_8019C471; - extern u8 D_8019C472; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_8019C46C); - if (*p1 != 0) *p1 -= 4; - if (D_8019C46D != 0) D_8019C46D -= 4; - if (D_8019C46E != 0) D_8019C46E -= 4; - p2 = &(*(u8 *)&D_8019C470); - if (*p2 != 0) *p2 -= 4; - if (D_8019C471 != 0) D_8019C471 -= 4; - if (D_8019C472 != 0) D_8019C472 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_8019C46C), &(*(int *)&D_8019C470), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_8019C3F8; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_8019C3F8); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80180F60; - extern s32 D_80180F68; - extern s32 D_80180F70; - extern s32 D_80180F78; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80180F60, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80180F68, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80180F70, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80180F78, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80180F80[])(void); - -void func_8016C14C(void *a0) { - D_80180F80[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_8019C474[]; -extern u8 D_8019C47C[]; -extern u8 D_8019C42C[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_8019C474, D_8019C47C, D_8019C42C); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_8019C488[]; - extern u8 D_8019C548; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_8019C488[1] = 0xff; - D_8019C488[2] = 0x10; - D_8019C488[0] = 0x10; - D_8019C488[6] = 0; - D_8019C488[5] = 0; - D_8019C488[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_8019C488, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_8019C548, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_8019C488); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8015AE2C", func_8016C998); - - -extern void (*D_80180F88[])(void); - -void func_8016CB84(void *a0) { - D_80180F88[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_8019C548[]; - - - Blk_8016CF04_8016CF04 *p = &D_8019C548[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80180FA4[])(void); - -void func_8016D19C(void *a0) { - D_80180FA4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80180FAC[])(void); - -void func_8016D428(void *a0) { - D_80180FAC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80181014[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80181014[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80180FB8; -extern u8 D_80180FC4; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80180FB8, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80180FC4); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80181048[])(void); - -void func_8016DEA4(void *a0) { - D_80181048[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80181050[])(void); - -void func_8016DF20(void *a0) { - D_80181050[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_801810A4[])(void); - -void func_8016E5B8(void *a0) { - D_801810A4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80181064[4]; - extern s32 D_80181084; - extern s32 D_8018108C; - extern s32 D_80181094; - extern s32 D_8018109C; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80181064[0], pp, &tmp); - RotTransSV(&D_80181064[1], &prim.v[1], &tmp); - RotTransSV(&D_80181064[2], &prim.v[2], &tmp); - RotTransSV(&D_80181064[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80181084; - prim.f1 = D_8018108C; - prim.f2 = D_80181094; - prim.f3 = D_8018109C; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_801810E4[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_801810E4[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_801810D8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_801810D8[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_801810C8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_801810C8[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801810D8[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_801810D8[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_801810D8[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_801810F4; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_801810F4; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_8018116C[])(void); - -void func_8016F6E0(void *a0) { - D_8018116C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80181174[])(void); - -void func_8016F798(void *a0) { - D_80181174[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_8018117C[])(void); - -void func_8016F834(void *a0) { - D_8018117C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80181184[])(void); - -void func_8016F8E4(void *a0) { - D_80181184[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_8018118C[])(void); - -void func_8016F9C4(void *a0) { - D_8018118C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80181194[])(void); - -void func_8016FA84(void *a0) { - D_80181194[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_801811A0[])(void); - -void func_8016FB7C(void *a0) { - D_801811A0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_801811AC[])(void); - -void func_8016FC90(void *a0) { - D_801811AC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_801811B8[])(void); - -void func_8016FDB4(void *a0) { - D_801811B8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_801811C8[])(void); - -void func_8016FF30(void *a0) { - D_801811C8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_801811D8[])(void); - -void func_8016FFDC(void *a0) { - D_801811D8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_801811E0[])(void); - -void func_80170150(void *a0) { - D_801811E0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_801811E8[])(void); - -void func_80170240(void *a0) { - D_801811E8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_801811F0[])(void); - -void func_801702FC(void *a0) { - D_801811F0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_801811F8[])(void); - -void func_801703E0(void *a0) { - D_801811F8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80181200[])(void); - -void func_801704B0(void *a0) { - D_80181200[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80181208[])(void); - -void func_80170548(void *a0) { - D_80181208[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80181210[])(void); - -void func_801705F8(void *a0) { - D_80181210[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80181218[])(void); - -void func_801706AC(void *a0) { - D_80181218[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80181220[])(void); - -void func_80170748(void *a0) { - D_80181220[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80181228[])(void); - -void func_80170810(void *a0) { - D_80181228[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80181230[])(void); - -void func_80170AD8(void *a0) { - D_80181230[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80181238[])(void); - -void func_80170BD8(void *a0) { - D_80181238[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80181240[])(void); - -void func_80170C74(void *a0) { - D_80181240[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80181248[])(void); - -void func_80170D68(void *a0) { - D_80181248[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80181250[])(void); - -void func_80170E34(void *a0) { - D_80181250[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80181258[])(void); - -void func_80170EFC(void *a0) { - D_80181258[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80181260[])(void); - -void func_80170FB0(void *a0) { - D_80181260[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80181268[])(void); - -void func_80171064(void *a0) { - D_80181268[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80181270[])(void); - -void func_80171120(void *a0) { - D_80181270[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80181278[])(void); - -void func_801711C0(void *a0) { - D_80181278[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80181280[])(void); - -void func_80171260(void *a0) { - D_80181280[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80181288[])(void); - -void func_801714E4(void *a0) { - D_80181288[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8015AE2C", func_80172C50); - - -extern void (*D_801812CC[])(void); - -void func_80172CA0(void *a0) { - D_801812CC[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80181290; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80181290); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC05_011/ov_SC05_011_jr_8016AB6C.c b/src/ov_SC05_011/ov_SC05_011_jr_8016AB6C.c new file mode 100644 index 000000000..779afa3b2 --- /dev/null +++ b/src/ov_SC05_011/ov_SC05_011_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80180250; +extern u8 D_801801C0; +extern u8 D_8018019C; +extern u8 D_80180178; +extern u8 D_8018022C; +extern u8 D_80180208; +extern u8 D_801801E4; +extern u8 D_80180154; +extern void func_80145934(void); +extern u8 D_801802E0; +extern u8 D_801802BC; +extern u8 D_80180298; +extern u8 D_80180274; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8017F6D8[]; +extern unsigned char D_8017F708[]; +extern unsigned char D_8017F758[]; +extern unsigned char D_8017F788[]; +extern unsigned char D_8017F7B8[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8017F808[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8017F8D0[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8017F958[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8017F960; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8019BEC0; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019BEC4; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8017F990; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8017FA38[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8017FA5C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8017FA4C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8017FA70[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8017FA7C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8017FA8C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8017FAA4[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8017FA94; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8017FAB8[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8017FAD4[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8017FAC4; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8017FAE8[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8017FAFC[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8017FB10; +extern void (*D_8017FB38[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8017FB18; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8017FB84[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8017FB88[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8017FFEC[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8017FFFC[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_8019BEF8; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80180024[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80180004; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80180014; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80180064[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018006C[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80180038; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80180078[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80180048; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_8019BF00; +extern s32 D_8019BF0C; +extern s32 D_8019BF10; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801800B4[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80180088[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_8019BF08; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80180304[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80180124[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_801803A8[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_801804FC[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80180318; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80180504[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80180328; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80180348; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_8018050C[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80180534[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80180540[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_801803B4[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_801805E4; +extern void func_8015D380(s32 a0); +extern unsigned char D_8017F6C8[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_801805F8[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80180634[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_8018067C; +extern u16 D_8018067E; +extern u16 D_80180680; +extern s32 D_80180684; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_8018068C; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80180398; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80180710[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_801807C0[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_801807F0[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80180854; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_8019BF18[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80180878[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_8019BF70[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_801808C0[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_801808B0; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_8019B7A8[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_801808C8[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_8018091C[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_801808E4; +extern s16 D_80180918; +extern s16 D_80180916; +extern s16 D_80180914; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80180928[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_8019BFD0; +extern u8 D_8019BFD1; +extern u8 D_8019BFD2; +extern u8 D_8019BFD3; +extern u8 D_8019BFD4; +extern u8 D_8019BFD5; +extern u8 D_8019BFD6; +extern u8 D_8019BFD7; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80180938[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_8019C010; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_8018097C[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_801809F8[]; +extern s32 D_80180A18[]; +extern u8 D_80180A94[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80180AB4[]; +extern u8 D_80180AD4[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80180B70[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80180BEC[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_8019B7B8; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80180BF8[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80180C00[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80180CC8[])(void); +extern void func_80166618(void *a0); +extern void (*D_80180CD8[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80180CE8[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80180CF4[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80180C54[]; +extern u8 D_80180C68[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80180D0C[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80180D14[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80180D1C[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80180D24[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80180D2C[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80180D34[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80180D3C[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80180DF0[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80180DF8[])(void); +extern void func_80169F00(void *a0); +extern char D_80180DA8[]; +extern char D_80180D68[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80180E30[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80180E3C[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80180E84[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80180E44[]; + extern u8 D_80180E54[]; + extern u8 D_8019C2E0[]; + extern u8 D_8019C308[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80180E44, D_8019C2E0) + 3; + func_8001CE28(obj, D_8019C2E0); + } else { + var_s3 = func_80024054(D_80180E54, D_8019C308) + 9; + func_8001CE28(obj, D_8019C308); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80180F00[])(void); + +void func_8016B4BC(void *a0) { + D_80180F00[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_8019C330; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_8019C330); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80180EF4[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80180EF4; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80180F38[]; +extern unsigned short D_80180F40[]; +extern unsigned short D_80180F48[]; +extern unsigned char D_8019C338[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_8019C338 + param_2 * 0x40); + puVar3 = D_80180F38[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80180F40[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80180F48[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_8019C330; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_8019C330, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80180F50[])(void); + +void func_8016BBA4(void *a0) { + D_80180F50[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_8019C46C; + extern u8 D_8019C46D; + extern u8 D_8019C46E; + extern M2C_UNK D_8019C470; + extern u8 D_8019C471; + extern u8 D_8019C472; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_8019C46C) = 0x20; + D_8019C46D = 0x20; + D_8019C46E = 0; + (*(u8 *)&D_8019C470) = 0xc0; + D_8019C471 = 0xc0; + D_8019C472 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_8019C46C; +extern M2C_UNK D_8019C470; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_8019C46C, &D_8019C470, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_8019C46D; + extern u8 D_8019C46E; + extern u8 D_8019C471; + extern u8 D_8019C472; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_8019C46C); + if (*p1 != 0) *p1 -= 4; + if (D_8019C46D != 0) D_8019C46D -= 4; + if (D_8019C46E != 0) D_8019C46E -= 4; + p2 = &(*(u8 *)&D_8019C470); + if (*p2 != 0) *p2 -= 4; + if (D_8019C471 != 0) D_8019C471 -= 4; + if (D_8019C472 != 0) D_8019C472 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_8019C46C), &(*(int *)&D_8019C470), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_8019C3F8; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_8019C3F8); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80180F60; + extern s32 D_80180F68; + extern s32 D_80180F70; + extern s32 D_80180F78; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80180F60, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80180F68, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80180F70, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80180F78, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80180F80[])(void); + +void func_8016C14C(void *a0) { + D_80180F80[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_8019C474[]; +extern u8 D_8019C47C[]; +extern u8 D_8019C42C[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_8019C474, D_8019C47C, D_8019C42C); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_8019C488[]; + extern u8 D_8019C548; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_8019C488[1] = 0xff; + D_8019C488[2] = 0x10; + D_8019C488[0] = 0x10; + D_8019C488[6] = 0; + D_8019C488[5] = 0; + D_8019C488[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_8019C488, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_8019C548, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_8019C488); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8016AB6C", func_8016C998); + + +extern void (*D_80180F88[])(void); + +void func_8016CB84(void *a0) { + D_80180F88[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_8019C548[]; + + + Blk_8016CF04_8016CF04 *p = &D_8019C548[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80180FA4[])(void); + +void func_8016D19C(void *a0) { + D_80180FA4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80180FAC[])(void); + +void func_8016D428(void *a0) { + D_80180FAC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80181014[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80181014[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80180FB8; +extern u8 D_80180FC4; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80180FB8, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80180FC4); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80181048[])(void); + +void func_8016DEA4(void *a0) { + D_80181048[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80181050[])(void); + +void func_8016DF20(void *a0) { + D_80181050[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_801810A4[])(void); + +void func_8016E5B8(void *a0) { + D_801810A4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80181064[4]; + extern s32 D_80181084; + extern s32 D_8018108C; + extern s32 D_80181094; + extern s32 D_8018109C; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80181064[0], pp, &tmp); + RotTransSV(&D_80181064[1], &prim.v[1], &tmp); + RotTransSV(&D_80181064[2], &prim.v[2], &tmp); + RotTransSV(&D_80181064[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80181084; + prim.f1 = D_8018108C; + prim.f2 = D_80181094; + prim.f3 = D_8018109C; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_801810E4[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_801810E4[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_801810D8[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_801810D8[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_801810C8[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_801810C8[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801810D8[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_801810D8[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_801810D8[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_801810F4; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_801810F4; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_8018116C[])(void); + +void func_8016F6E0(void *a0) { + D_8018116C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80181174[])(void); + +void func_8016F798(void *a0) { + D_80181174[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_8018117C[])(void); + +void func_8016F834(void *a0) { + D_8018117C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80181184[])(void); + +void func_8016F8E4(void *a0) { + D_80181184[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_8018118C[])(void); + +void func_8016F9C4(void *a0) { + D_8018118C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80181194[])(void); + +void func_8016FA84(void *a0) { + D_80181194[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_801811A0[])(void); + +void func_8016FB7C(void *a0) { + D_801811A0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_801811AC[])(void); + +void func_8016FC90(void *a0) { + D_801811AC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_801811B8[])(void); + +void func_8016FDB4(void *a0) { + D_801811B8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_801811C8[])(void); + +void func_8016FF30(void *a0) { + D_801811C8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_801811D8[])(void); + +void func_8016FFDC(void *a0) { + D_801811D8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_801811E0[])(void); + +void func_80170150(void *a0) { + D_801811E0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_801811E8[])(void); + +void func_80170240(void *a0) { + D_801811E8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_801811F0[])(void); + +void func_801702FC(void *a0) { + D_801811F0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_801811F8[])(void); + +void func_801703E0(void *a0) { + D_801811F8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80181200[])(void); + +void func_801704B0(void *a0) { + D_80181200[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80181208[])(void); + +void func_80170548(void *a0) { + D_80181208[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80181210[])(void); + +void func_801705F8(void *a0) { + D_80181210[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80181218[])(void); + +void func_801706AC(void *a0) { + D_80181218[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80181220[])(void); + +void func_80170748(void *a0) { + D_80181220[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80181228[])(void); + +void func_80170810(void *a0) { + D_80181228[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80181230[])(void); + +void func_80170AD8(void *a0) { + D_80181230[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80181238[])(void); + +void func_80170BD8(void *a0) { + D_80181238[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80181240[])(void); + +void func_80170C74(void *a0) { + D_80181240[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80181248[])(void); + +void func_80170D68(void *a0) { + D_80181248[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80181250[])(void); + +void func_80170E34(void *a0) { + D_80181250[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80181258[])(void); + +void func_80170EFC(void *a0) { + D_80181258[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80181260[])(void); + +void func_80170FB0(void *a0) { + D_80181260[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80181268[])(void); + +void func_80171064(void *a0) { + D_80181268[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80181270[])(void); + +void func_80171120(void *a0) { + D_80181270[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80181278[])(void); + +void func_801711C0(void *a0) { + D_80181278[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80181280[])(void); + +void func_80171260(void *a0) { + D_80181280[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80181288[])(void); + +void func_801714E4(void *a0) { + D_80181288[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8016AB6C", func_80172C50); + + +extern void (*D_801812CC[])(void); + +void func_80172CA0(void *a0) { + D_801812CC[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80181290; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80181290); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC05_017/ov_SC05_017_jr_8015AE2C.c b/src/ov_SC05_017/ov_SC05_017_jr_8015AE2C.c index 077557d49..0650bea16 100644 --- a/src/ov_SC05_017/ov_SC05_017_jr_8015AE2C.c +++ b/src/ov_SC05_017/ov_SC05_017_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_80190344[])(void); void func_8016AB30(void *a0) { D_80190344[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_801903C0[])(void); - -void func_8016B4BC(void *a0) { - D_801903C0[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801EBE70; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801EBE70); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_801903B4[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_801903B4; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_801903F8[]; -extern unsigned short D_80190400[]; -extern unsigned short D_80190408[]; -extern unsigned char D_801EBE78[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801EBE78 + param_2 * 0x40); - puVar3 = D_801903F8[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80190400[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80190408[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801EBE70; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801EBE70, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80190410[])(void); - -void func_8016BBA4(void *a0) { - D_80190410[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801EBFAC; - extern u8 D_801EBFAD; - extern u8 D_801EBFAE; - extern M2C_UNK D_801EBFB0; - extern u8 D_801EBFB1; - extern u8 D_801EBFB2; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801EBFAC) = 0x20; - D_801EBFAD = 0x20; - D_801EBFAE = 0; - (*(u8 *)&D_801EBFB0) = 0xc0; - D_801EBFB1 = 0xc0; - D_801EBFB2 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801EBFAC; -extern M2C_UNK D_801EBFB0; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801EBFAC, &D_801EBFB0, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801EBFAD; - extern u8 D_801EBFAE; - extern u8 D_801EBFB1; - extern u8 D_801EBFB2; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801EBFAC); - if (*p1 != 0) *p1 -= 4; - if (D_801EBFAD != 0) D_801EBFAD -= 4; - if (D_801EBFAE != 0) D_801EBFAE -= 4; - p2 = &(*(u8 *)&D_801EBFB0); - if (*p2 != 0) *p2 -= 4; - if (D_801EBFB1 != 0) D_801EBFB1 -= 4; - if (D_801EBFB2 != 0) D_801EBFB2 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801EBFAC), &(*(int *)&D_801EBFB0), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801EBF38; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801EBF38); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80190420; - extern s32 D_80190428; - extern s32 D_80190430; - extern s32 D_80190438; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80190420, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80190428, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80190430, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80190438, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80190440[])(void); - -void func_8016C14C(void *a0) { - D_80190440[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801EBFB4[]; -extern u8 D_801EBFBC[]; -extern u8 D_801EBF6C[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801EBFB4, D_801EBFBC, D_801EBF6C); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801EBFC8[]; - extern u8 D_801EC088; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801EBFC8[1] = 0xff; - D_801EBFC8[2] = 0x10; - D_801EBFC8[0] = 0x10; - D_801EBFC8[6] = 0; - D_801EBFC8[5] = 0; - D_801EBFC8[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801EBFC8, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801EC088, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801EBFC8); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8015AE2C", func_8016C998); - - -extern void (*D_80190448[])(void); - -void func_8016CB84(void *a0) { - D_80190448[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801EC088[]; - - - Blk_8016CF04_8016CF04 *p = &D_801EC088[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80190464[])(void); - -void func_8016D19C(void *a0) { - D_80190464[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_8019046C[])(void); - -void func_8016D428(void *a0) { - D_8019046C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_801904D4[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_801904D4[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80190478; -extern u8 D_80190484; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80190478, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80190484); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80190508[])(void); - -void func_8016DEA4(void *a0) { - D_80190508[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80190510[])(void); - -void func_8016DF20(void *a0) { - D_80190510[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80190564[])(void); - -void func_8016E5B8(void *a0) { - D_80190564[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80190524[4]; - extern s32 D_80190544; - extern s32 D_8019054C; - extern s32 D_80190554; - extern s32 D_8019055C; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80190524[0], pp, &tmp); - RotTransSV(&D_80190524[1], &prim.v[1], &tmp); - RotTransSV(&D_80190524[2], &prim.v[2], &tmp); - RotTransSV(&D_80190524[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80190544; - prim.f1 = D_8019054C; - prim.f2 = D_80190554; - prim.f3 = D_8019055C; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_801905A4[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_801905A4[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80190598[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80190598[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80190588[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80190588[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80190598[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80190598[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80190598[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_801905B4; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_801905B4; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_8019062C[])(void); - -void func_8016F6E0(void *a0) { - D_8019062C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80190634[])(void); - -void func_8016F798(void *a0) { - D_80190634[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_8019063C[])(void); - -void func_8016F834(void *a0) { - D_8019063C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80190644[])(void); - -void func_8016F8E4(void *a0) { - D_80190644[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_8019064C[])(void); - -void func_8016F9C4(void *a0) { - D_8019064C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80190654[])(void); - -void func_8016FA84(void *a0) { - D_80190654[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80190660[])(void); - -void func_8016FB7C(void *a0) { - D_80190660[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_8019066C[])(void); - -void func_8016FC90(void *a0) { - D_8019066C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80190678[])(void); - -void func_8016FDB4(void *a0) { - D_80190678[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80190688[])(void); - -void func_8016FF30(void *a0) { - D_80190688[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80190698[])(void); - -void func_8016FFDC(void *a0) { - D_80190698[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_801906A0[])(void); - -void func_80170150(void *a0) { - D_801906A0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_801906A8[])(void); - -void func_80170240(void *a0) { - D_801906A8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_801906B0[])(void); - -void func_801702FC(void *a0) { - D_801906B0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_801906B8[])(void); - -void func_801703E0(void *a0) { - D_801906B8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_801906C0[])(void); - -void func_801704B0(void *a0) { - D_801906C0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_801906C8[])(void); - -void func_80170548(void *a0) { - D_801906C8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_801906D0[])(void); - -void func_801705F8(void *a0) { - D_801906D0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_801906D8[])(void); - -void func_801706AC(void *a0) { - D_801906D8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_801906E0[])(void); - -void func_80170748(void *a0) { - D_801906E0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_801906E8[])(void); - -void func_80170810(void *a0) { - D_801906E8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_801906F0[])(void); - -void func_80170AD8(void *a0) { - D_801906F0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_801906F8[])(void); - -void func_80170BD8(void *a0) { - D_801906F8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80190700[])(void); - -void func_80170C74(void *a0) { - D_80190700[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80190708[])(void); - -void func_80170D68(void *a0) { - D_80190708[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80190710[])(void); - -void func_80170E34(void *a0) { - D_80190710[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80190718[])(void); - -void func_80170EFC(void *a0) { - D_80190718[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80190720[])(void); - -void func_80170FB0(void *a0) { - D_80190720[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80190728[])(void); - -void func_80171064(void *a0) { - D_80190728[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80190730[])(void); - -void func_80171120(void *a0) { - D_80190730[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80190738[])(void); - -void func_801711C0(void *a0) { - D_80190738[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80190740[])(void); - -void func_80171260(void *a0) { - D_80190740[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80190748[])(void); - -void func_801714E4(void *a0) { - D_80190748[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8015AE2C", func_80172C50); - - -extern void (*D_8019078C[])(void); - -void func_80172CA0(void *a0) { - D_8019078C[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80190750; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80190750); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC05_017/ov_SC05_017_jr_8016AB6C.c b/src/ov_SC05_017/ov_SC05_017_jr_8016AB6C.c new file mode 100644 index 000000000..e9465f919 --- /dev/null +++ b/src/ov_SC05_017/ov_SC05_017_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018F710; +extern u8 D_8018F680; +extern u8 D_8018F65C; +extern u8 D_8018F638; +extern u8 D_8018F6EC; +extern u8 D_8018F6C8; +extern u8 D_8018F6A4; +extern u8 D_8018F614; +extern void func_80145934(void); +extern u8 D_8018F7A0; +extern u8 D_8018F77C; +extern u8 D_8018F758; +extern u8 D_8018F734; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018EB98[]; +extern unsigned char D_8018EBC8[]; +extern unsigned char D_8018EC18[]; +extern unsigned char D_8018EC48[]; +extern unsigned char D_8018EC78[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018ECC8[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018ED90[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018EE18[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018EE20; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801EBA00; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801EBA04; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018EE50; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018EEF8[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018EF1C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018EF0C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018EF30[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018EF3C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018EF4C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018EF64[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018EF54; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018EF78[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018EF94[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018EF84; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018EFA8[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018EFBC[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018EFD0; +extern void (*D_8018EFF8[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018EFD8; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018F044[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018F048[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018F4AC[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018F4BC[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801EBA38; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018F4E4[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018F4C4; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018F4D4; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018F524[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018F52C[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018F4F8; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018F538[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018F508; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801EBA40; +extern s32 D_801EBA4C; +extern s32 D_801EBA50; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018F574[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018F548[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801EBA48; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018F7C4[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018F5E4[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018F868[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018F9BC[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018F7D8; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018F9C4[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018F7E8; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018F808; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_8018F9CC[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_8018F9F4[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_8018FA00[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_8018F874[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_8018FAA4; +extern void func_8015D380(s32 a0); +extern unsigned char D_8018EB88[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_8018FAB8[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_8018FAF4[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_8018FB3C; +extern u16 D_8018FB3E; +extern u16 D_8018FB40; +extern s32 D_8018FB44; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_8018FB4C; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_8018F858; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_8018FBD0[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_8018FC80[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_8018FCB0[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_8018FD14; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801EBA58[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_8018FD38[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801EBAB0[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_8018FD80[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_8018FD70; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801EAE90[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_8018FD88[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_8018FDDC[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_8018FDA4; +extern s16 D_8018FDD8; +extern s16 D_8018FDD6; +extern s16 D_8018FDD4; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_8018FDE8[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801EBB10; +extern u8 D_801EBB11; +extern u8 D_801EBB12; +extern u8 D_801EBB13; +extern u8 D_801EBB14; +extern u8 D_801EBB15; +extern u8 D_801EBB16; +extern u8 D_801EBB17; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_8018FDF8[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801EBB50; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_8018FE3C[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_8018FEB8[]; +extern s32 D_8018FED8[]; +extern u8 D_8018FF54[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_8018FF74[]; +extern u8 D_8018FF94[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80190030[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_801900AC[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801EAEA0; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_801900B8[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_801900C0[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80190188[])(void); +extern void func_80166618(void *a0); +extern void (*D_80190198[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_801901A8[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_801901B4[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80190114[]; +extern u8 D_80190128[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_801901CC[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_801901D4[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_801901DC[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_801901E4[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_801901EC[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_801901F4[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_801901FC[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_801902B0[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_801902B8[])(void); +extern void func_80169F00(void *a0); +extern char D_80190268[]; +extern char D_80190228[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_801902F0[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_801902FC[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80190344[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80190304[]; + extern u8 D_80190314[]; + extern u8 D_801EBE20[]; + extern u8 D_801EBE48[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80190304, D_801EBE20) + 3; + func_8001CE28(obj, D_801EBE20); + } else { + var_s3 = func_80024054(D_80190314, D_801EBE48) + 9; + func_8001CE28(obj, D_801EBE48); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_801903C0[])(void); + +void func_8016B4BC(void *a0) { + D_801903C0[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801EBE70; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801EBE70); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_801903B4[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_801903B4; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_801903F8[]; +extern unsigned short D_80190400[]; +extern unsigned short D_80190408[]; +extern unsigned char D_801EBE78[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801EBE78 + param_2 * 0x40); + puVar3 = D_801903F8[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80190400[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80190408[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801EBE70; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801EBE70, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80190410[])(void); + +void func_8016BBA4(void *a0) { + D_80190410[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801EBFAC; + extern u8 D_801EBFAD; + extern u8 D_801EBFAE; + extern M2C_UNK D_801EBFB0; + extern u8 D_801EBFB1; + extern u8 D_801EBFB2; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801EBFAC) = 0x20; + D_801EBFAD = 0x20; + D_801EBFAE = 0; + (*(u8 *)&D_801EBFB0) = 0xc0; + D_801EBFB1 = 0xc0; + D_801EBFB2 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801EBFAC; +extern M2C_UNK D_801EBFB0; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801EBFAC, &D_801EBFB0, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801EBFAD; + extern u8 D_801EBFAE; + extern u8 D_801EBFB1; + extern u8 D_801EBFB2; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801EBFAC); + if (*p1 != 0) *p1 -= 4; + if (D_801EBFAD != 0) D_801EBFAD -= 4; + if (D_801EBFAE != 0) D_801EBFAE -= 4; + p2 = &(*(u8 *)&D_801EBFB0); + if (*p2 != 0) *p2 -= 4; + if (D_801EBFB1 != 0) D_801EBFB1 -= 4; + if (D_801EBFB2 != 0) D_801EBFB2 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801EBFAC), &(*(int *)&D_801EBFB0), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801EBF38; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801EBF38); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80190420; + extern s32 D_80190428; + extern s32 D_80190430; + extern s32 D_80190438; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80190420, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80190428, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80190430, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80190438, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80190440[])(void); + +void func_8016C14C(void *a0) { + D_80190440[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801EBFB4[]; +extern u8 D_801EBFBC[]; +extern u8 D_801EBF6C[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801EBFB4, D_801EBFBC, D_801EBF6C); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801EBFC8[]; + extern u8 D_801EC088; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801EBFC8[1] = 0xff; + D_801EBFC8[2] = 0x10; + D_801EBFC8[0] = 0x10; + D_801EBFC8[6] = 0; + D_801EBFC8[5] = 0; + D_801EBFC8[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801EBFC8, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801EC088, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801EBFC8); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8016AB6C", func_8016C998); + + +extern void (*D_80190448[])(void); + +void func_8016CB84(void *a0) { + D_80190448[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801EC088[]; + + + Blk_8016CF04_8016CF04 *p = &D_801EC088[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80190464[])(void); + +void func_8016D19C(void *a0) { + D_80190464[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_8019046C[])(void); + +void func_8016D428(void *a0) { + D_8019046C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_801904D4[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_801904D4[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80190478; +extern u8 D_80190484; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80190478, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80190484); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80190508[])(void); + +void func_8016DEA4(void *a0) { + D_80190508[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80190510[])(void); + +void func_8016DF20(void *a0) { + D_80190510[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80190564[])(void); + +void func_8016E5B8(void *a0) { + D_80190564[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80190524[4]; + extern s32 D_80190544; + extern s32 D_8019054C; + extern s32 D_80190554; + extern s32 D_8019055C; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80190524[0], pp, &tmp); + RotTransSV(&D_80190524[1], &prim.v[1], &tmp); + RotTransSV(&D_80190524[2], &prim.v[2], &tmp); + RotTransSV(&D_80190524[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80190544; + prim.f1 = D_8019054C; + prim.f2 = D_80190554; + prim.f3 = D_8019055C; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_801905A4[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_801905A4[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80190598[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80190598[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80190588[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80190588[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80190598[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80190598[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80190598[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_801905B4; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_801905B4; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_8019062C[])(void); + +void func_8016F6E0(void *a0) { + D_8019062C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80190634[])(void); + +void func_8016F798(void *a0) { + D_80190634[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_8019063C[])(void); + +void func_8016F834(void *a0) { + D_8019063C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80190644[])(void); + +void func_8016F8E4(void *a0) { + D_80190644[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_8019064C[])(void); + +void func_8016F9C4(void *a0) { + D_8019064C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80190654[])(void); + +void func_8016FA84(void *a0) { + D_80190654[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80190660[])(void); + +void func_8016FB7C(void *a0) { + D_80190660[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_8019066C[])(void); + +void func_8016FC90(void *a0) { + D_8019066C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80190678[])(void); + +void func_8016FDB4(void *a0) { + D_80190678[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80190688[])(void); + +void func_8016FF30(void *a0) { + D_80190688[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80190698[])(void); + +void func_8016FFDC(void *a0) { + D_80190698[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_801906A0[])(void); + +void func_80170150(void *a0) { + D_801906A0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_801906A8[])(void); + +void func_80170240(void *a0) { + D_801906A8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_801906B0[])(void); + +void func_801702FC(void *a0) { + D_801906B0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_801906B8[])(void); + +void func_801703E0(void *a0) { + D_801906B8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_801906C0[])(void); + +void func_801704B0(void *a0) { + D_801906C0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_801906C8[])(void); + +void func_80170548(void *a0) { + D_801906C8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_801906D0[])(void); + +void func_801705F8(void *a0) { + D_801906D0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_801906D8[])(void); + +void func_801706AC(void *a0) { + D_801906D8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_801906E0[])(void); + +void func_80170748(void *a0) { + D_801906E0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_801906E8[])(void); + +void func_80170810(void *a0) { + D_801906E8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_801906F0[])(void); + +void func_80170AD8(void *a0) { + D_801906F0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_801906F8[])(void); + +void func_80170BD8(void *a0) { + D_801906F8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80190700[])(void); + +void func_80170C74(void *a0) { + D_80190700[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80190708[])(void); + +void func_80170D68(void *a0) { + D_80190708[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80190710[])(void); + +void func_80170E34(void *a0) { + D_80190710[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80190718[])(void); + +void func_80170EFC(void *a0) { + D_80190718[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80190720[])(void); + +void func_80170FB0(void *a0) { + D_80190720[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80190728[])(void); + +void func_80171064(void *a0) { + D_80190728[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80190730[])(void); + +void func_80171120(void *a0) { + D_80190730[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80190738[])(void); + +void func_801711C0(void *a0) { + D_80190738[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80190740[])(void); + +void func_80171260(void *a0) { + D_80190740[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80190748[])(void); + +void func_801714E4(void *a0) { + D_80190748[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8016AB6C", func_80172C50); + + +extern void (*D_8019078C[])(void); + +void func_80172CA0(void *a0) { + D_8019078C[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80190750; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80190750); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC05_018/ov_SC05_018_jr_8015AE2C.c b/src/ov_SC05_018/ov_SC05_018_jr_8015AE2C.c index c2609dd5f..72f927303 100644 --- a/src/ov_SC05_018/ov_SC05_018_jr_8015AE2C.c +++ b/src/ov_SC05_018/ov_SC05_018_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_80189AA0[])(void); void func_8016AB30(void *a0) { D_80189AA0[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80189B1C[])(void); - -void func_8016B4BC(void *a0) { - D_80189B1C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801E55B0; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801E55B0); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80189B10[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80189B10; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80189B54[]; -extern unsigned short D_80189B5C[]; -extern unsigned short D_80189B64[]; -extern unsigned char D_801E55B8[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801E55B8 + param_2 * 0x40); - puVar3 = D_80189B54[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80189B5C[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80189B64[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801E55B0; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801E55B0, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80189B6C[])(void); - -void func_8016BBA4(void *a0) { - D_80189B6C[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801E56EC; - extern u8 D_801E56ED; - extern u8 D_801E56EE; - extern M2C_UNK D_801E56F0; - extern u8 D_801E56F1; - extern u8 D_801E56F2; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801E56EC) = 0x20; - D_801E56ED = 0x20; - D_801E56EE = 0; - (*(u8 *)&D_801E56F0) = 0xc0; - D_801E56F1 = 0xc0; - D_801E56F2 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801E56EC; -extern M2C_UNK D_801E56F0; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801E56EC, &D_801E56F0, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801E56ED; - extern u8 D_801E56EE; - extern u8 D_801E56F1; - extern u8 D_801E56F2; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801E56EC); - if (*p1 != 0) *p1 -= 4; - if (D_801E56ED != 0) D_801E56ED -= 4; - if (D_801E56EE != 0) D_801E56EE -= 4; - p2 = &(*(u8 *)&D_801E56F0); - if (*p2 != 0) *p2 -= 4; - if (D_801E56F1 != 0) D_801E56F1 -= 4; - if (D_801E56F2 != 0) D_801E56F2 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801E56EC), &(*(int *)&D_801E56F0), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801E5678; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801E5678); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80189B7C; - extern s32 D_80189B84; - extern s32 D_80189B8C; - extern s32 D_80189B94; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80189B7C, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80189B84, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80189B8C, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80189B94, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80189B9C[])(void); - -void func_8016C14C(void *a0) { - D_80189B9C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801E56F4[]; -extern u8 D_801E56FC[]; -extern u8 D_801E56AC[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801E56F4, D_801E56FC, D_801E56AC); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801E5708[]; - extern u8 D_801E57C8; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801E5708[1] = 0xff; - D_801E5708[2] = 0x10; - D_801E5708[0] = 0x10; - D_801E5708[6] = 0; - D_801E5708[5] = 0; - D_801E5708[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801E5708, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801E57C8, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801E5708); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8015AE2C", func_8016C998); - - -extern void (*D_80189BA4[])(void); - -void func_8016CB84(void *a0) { - D_80189BA4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801E57C8[]; - - - Blk_8016CF04_8016CF04 *p = &D_801E57C8[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80189BC0[])(void); - -void func_8016D19C(void *a0) { - D_80189BC0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80189BC8[])(void); - -void func_8016D428(void *a0) { - D_80189BC8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80189C30[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80189C30[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80189BD4; -extern u8 D_80189BE0; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80189BD4, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80189BE0); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80189C64[])(void); - -void func_8016DEA4(void *a0) { - D_80189C64[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80189C6C[])(void); - -void func_8016DF20(void *a0) { - D_80189C6C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80189CC0[])(void); - -void func_8016E5B8(void *a0) { - D_80189CC0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80189C80[4]; - extern s32 D_80189CA0; - extern s32 D_80189CA8; - extern s32 D_80189CB0; - extern s32 D_80189CB8; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80189C80[0], pp, &tmp); - RotTransSV(&D_80189C80[1], &prim.v[1], &tmp); - RotTransSV(&D_80189C80[2], &prim.v[2], &tmp); - RotTransSV(&D_80189C80[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80189CA0; - prim.f1 = D_80189CA8; - prim.f2 = D_80189CB0; - prim.f3 = D_80189CB8; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80189D00[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80189D00[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80189CF4[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80189CF4[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80189CE4[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80189CE4[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80189CF4[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80189CF4[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80189CF4[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80189D10; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80189D10; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80189D88[])(void); - -void func_8016F6E0(void *a0) { - D_80189D88[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80189D90[])(void); - -void func_8016F798(void *a0) { - D_80189D90[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80189D98[])(void); - -void func_8016F834(void *a0) { - D_80189D98[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80189DA0[])(void); - -void func_8016F8E4(void *a0) { - D_80189DA0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80189DA8[])(void); - -void func_8016F9C4(void *a0) { - D_80189DA8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80189DB0[])(void); - -void func_8016FA84(void *a0) { - D_80189DB0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80189DBC[])(void); - -void func_8016FB7C(void *a0) { - D_80189DBC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80189DC8[])(void); - -void func_8016FC90(void *a0) { - D_80189DC8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80189DD4[])(void); - -void func_8016FDB4(void *a0) { - D_80189DD4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80189DE4[])(void); - -void func_8016FF30(void *a0) { - D_80189DE4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80189DF4[])(void); - -void func_8016FFDC(void *a0) { - D_80189DF4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80189DFC[])(void); - -void func_80170150(void *a0) { - D_80189DFC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80189E04[])(void); - -void func_80170240(void *a0) { - D_80189E04[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80189E0C[])(void); - -void func_801702FC(void *a0) { - D_80189E0C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80189E14[])(void); - -void func_801703E0(void *a0) { - D_80189E14[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80189E1C[])(void); - -void func_801704B0(void *a0) { - D_80189E1C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80189E24[])(void); - -void func_80170548(void *a0) { - D_80189E24[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80189E2C[])(void); - -void func_801705F8(void *a0) { - D_80189E2C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80189E34[])(void); - -void func_801706AC(void *a0) { - D_80189E34[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80189E3C[])(void); - -void func_80170748(void *a0) { - D_80189E3C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80189E44[])(void); - -void func_80170810(void *a0) { - D_80189E44[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80189E4C[])(void); - -void func_80170AD8(void *a0) { - D_80189E4C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80189E54[])(void); - -void func_80170BD8(void *a0) { - D_80189E54[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80189E5C[])(void); - -void func_80170C74(void *a0) { - D_80189E5C[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80189E64[])(void); - -void func_80170D68(void *a0) { - D_80189E64[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80189E6C[])(void); - -void func_80170E34(void *a0) { - D_80189E6C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80189E74[])(void); - -void func_80170EFC(void *a0) { - D_80189E74[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80189E7C[])(void); - -void func_80170FB0(void *a0) { - D_80189E7C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80189E84[])(void); - -void func_80171064(void *a0) { - D_80189E84[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80189E8C[])(void); - -void func_80171120(void *a0) { - D_80189E8C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80189E94[])(void); - -void func_801711C0(void *a0) { - D_80189E94[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80189E9C[])(void); - -void func_80171260(void *a0) { - D_80189E9C[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80189EA4[])(void); - -void func_801714E4(void *a0) { - D_80189EA4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8015AE2C", func_80172C50); - - -extern void (*D_80189EE8[])(void); - -void func_80172CA0(void *a0) { - D_80189EE8[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80189EAC; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80189EAC); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC05_018/ov_SC05_018_jr_8016AB6C.c b/src/ov_SC05_018/ov_SC05_018_jr_8016AB6C.c new file mode 100644 index 000000000..4e27b06a8 --- /dev/null +++ b/src/ov_SC05_018/ov_SC05_018_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80188E6C; +extern u8 D_80188DDC; +extern u8 D_80188DB8; +extern u8 D_80188D94; +extern u8 D_80188E48; +extern u8 D_80188E24; +extern u8 D_80188E00; +extern u8 D_80188D70; +extern void func_80145934(void); +extern u8 D_80188EFC; +extern u8 D_80188ED8; +extern u8 D_80188EB4; +extern u8 D_80188E90; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801882F4[]; +extern unsigned char D_80188324[]; +extern unsigned char D_80188374[]; +extern unsigned char D_801883A4[]; +extern unsigned char D_801883D4[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80188424[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801884EC[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80188574[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018857C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801E5140; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801E5144; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801885AC; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80188654[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80188678[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80188668; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018868C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80188698[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801886A8[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801886C0[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801886B0; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801886D4[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801886F0[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801886E0; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80188704[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80188718[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018872C; +extern void (*D_80188754[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80188734; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801887A0[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801887A4[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80188C08[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80188C18[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801E5178; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80188C40[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80188C20; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80188C30; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80188C80[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80188C88[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80188C54; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80188C94[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80188C64; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801E5180; +extern s32 D_801E518C; +extern s32 D_801E5190; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80188CD0[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80188CA4[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801E5188; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80188F20[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80188D40[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80188FC4[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80189118[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80188F34; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80189120[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80188F44; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80188F64; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80189128[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80189150[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_8018915C[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80188FD0[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80189200; +extern void func_8015D380(s32 a0); +extern unsigned char D_801882E4[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80189214[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80189250[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80189298; +extern u16 D_8018929A; +extern u16 D_8018929C; +extern s32 D_801892A0; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_801892A8; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80188FB4; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_8018932C[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_801893DC[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_8018940C[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80189470; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801E5198[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80189494[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801E51F0[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_801894DC[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_801894CC; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801E4A04[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_801894E4[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80189538[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80189500; +extern s16 D_80189534; +extern s16 D_80189532; +extern s16 D_80189530; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80189544[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801E5250; +extern u8 D_801E5251; +extern u8 D_801E5252; +extern u8 D_801E5253; +extern u8 D_801E5254; +extern u8 D_801E5255; +extern u8 D_801E5256; +extern u8 D_801E5257; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80189554[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801E5290; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80189598[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80189614[]; +extern s32 D_80189634[]; +extern u8 D_801896B0[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_801896D0[]; +extern u8 D_801896F0[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_8018978C[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80189808[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801E4A14; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80189814[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_8018981C[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_801898E4[])(void); +extern void func_80166618(void *a0); +extern void (*D_801898F4[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80189904[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80189910[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80189870[]; +extern u8 D_80189884[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80189928[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80189930[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80189938[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80189940[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80189948[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80189950[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80189958[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80189A0C[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80189A14[])(void); +extern void func_80169F00(void *a0); +extern char D_801899C4[]; +extern char D_80189984[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80189A4C[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80189A58[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80189AA0[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80189A60[]; + extern u8 D_80189A70[]; + extern u8 D_801E5560[]; + extern u8 D_801E5588[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80189A60, D_801E5560) + 3; + func_8001CE28(obj, D_801E5560); + } else { + var_s3 = func_80024054(D_80189A70, D_801E5588) + 9; + func_8001CE28(obj, D_801E5588); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80189B1C[])(void); + +void func_8016B4BC(void *a0) { + D_80189B1C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801E55B0; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801E55B0); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80189B10[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80189B10; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80189B54[]; +extern unsigned short D_80189B5C[]; +extern unsigned short D_80189B64[]; +extern unsigned char D_801E55B8[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801E55B8 + param_2 * 0x40); + puVar3 = D_80189B54[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80189B5C[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80189B64[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801E55B0; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801E55B0, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80189B6C[])(void); + +void func_8016BBA4(void *a0) { + D_80189B6C[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801E56EC; + extern u8 D_801E56ED; + extern u8 D_801E56EE; + extern M2C_UNK D_801E56F0; + extern u8 D_801E56F1; + extern u8 D_801E56F2; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801E56EC) = 0x20; + D_801E56ED = 0x20; + D_801E56EE = 0; + (*(u8 *)&D_801E56F0) = 0xc0; + D_801E56F1 = 0xc0; + D_801E56F2 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801E56EC; +extern M2C_UNK D_801E56F0; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801E56EC, &D_801E56F0, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801E56ED; + extern u8 D_801E56EE; + extern u8 D_801E56F1; + extern u8 D_801E56F2; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801E56EC); + if (*p1 != 0) *p1 -= 4; + if (D_801E56ED != 0) D_801E56ED -= 4; + if (D_801E56EE != 0) D_801E56EE -= 4; + p2 = &(*(u8 *)&D_801E56F0); + if (*p2 != 0) *p2 -= 4; + if (D_801E56F1 != 0) D_801E56F1 -= 4; + if (D_801E56F2 != 0) D_801E56F2 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801E56EC), &(*(int *)&D_801E56F0), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801E5678; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801E5678); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80189B7C; + extern s32 D_80189B84; + extern s32 D_80189B8C; + extern s32 D_80189B94; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80189B7C, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80189B84, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80189B8C, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80189B94, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80189B9C[])(void); + +void func_8016C14C(void *a0) { + D_80189B9C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801E56F4[]; +extern u8 D_801E56FC[]; +extern u8 D_801E56AC[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801E56F4, D_801E56FC, D_801E56AC); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801E5708[]; + extern u8 D_801E57C8; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801E5708[1] = 0xff; + D_801E5708[2] = 0x10; + D_801E5708[0] = 0x10; + D_801E5708[6] = 0; + D_801E5708[5] = 0; + D_801E5708[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801E5708, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801E57C8, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801E5708); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8016AB6C", func_8016C998); + + +extern void (*D_80189BA4[])(void); + +void func_8016CB84(void *a0) { + D_80189BA4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801E57C8[]; + + + Blk_8016CF04_8016CF04 *p = &D_801E57C8[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80189BC0[])(void); + +void func_8016D19C(void *a0) { + D_80189BC0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80189BC8[])(void); + +void func_8016D428(void *a0) { + D_80189BC8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80189C30[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80189C30[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80189BD4; +extern u8 D_80189BE0; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80189BD4, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80189BE0); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80189C64[])(void); + +void func_8016DEA4(void *a0) { + D_80189C64[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80189C6C[])(void); + +void func_8016DF20(void *a0) { + D_80189C6C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80189CC0[])(void); + +void func_8016E5B8(void *a0) { + D_80189CC0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80189C80[4]; + extern s32 D_80189CA0; + extern s32 D_80189CA8; + extern s32 D_80189CB0; + extern s32 D_80189CB8; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80189C80[0], pp, &tmp); + RotTransSV(&D_80189C80[1], &prim.v[1], &tmp); + RotTransSV(&D_80189C80[2], &prim.v[2], &tmp); + RotTransSV(&D_80189C80[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80189CA0; + prim.f1 = D_80189CA8; + prim.f2 = D_80189CB0; + prim.f3 = D_80189CB8; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80189D00[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80189D00[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80189CF4[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80189CF4[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80189CE4[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80189CE4[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80189CF4[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80189CF4[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80189CF4[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80189D10; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80189D10; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80189D88[])(void); + +void func_8016F6E0(void *a0) { + D_80189D88[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80189D90[])(void); + +void func_8016F798(void *a0) { + D_80189D90[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80189D98[])(void); + +void func_8016F834(void *a0) { + D_80189D98[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80189DA0[])(void); + +void func_8016F8E4(void *a0) { + D_80189DA0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80189DA8[])(void); + +void func_8016F9C4(void *a0) { + D_80189DA8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80189DB0[])(void); + +void func_8016FA84(void *a0) { + D_80189DB0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80189DBC[])(void); + +void func_8016FB7C(void *a0) { + D_80189DBC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80189DC8[])(void); + +void func_8016FC90(void *a0) { + D_80189DC8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80189DD4[])(void); + +void func_8016FDB4(void *a0) { + D_80189DD4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80189DE4[])(void); + +void func_8016FF30(void *a0) { + D_80189DE4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80189DF4[])(void); + +void func_8016FFDC(void *a0) { + D_80189DF4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80189DFC[])(void); + +void func_80170150(void *a0) { + D_80189DFC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80189E04[])(void); + +void func_80170240(void *a0) { + D_80189E04[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80189E0C[])(void); + +void func_801702FC(void *a0) { + D_80189E0C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80189E14[])(void); + +void func_801703E0(void *a0) { + D_80189E14[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80189E1C[])(void); + +void func_801704B0(void *a0) { + D_80189E1C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80189E24[])(void); + +void func_80170548(void *a0) { + D_80189E24[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80189E2C[])(void); + +void func_801705F8(void *a0) { + D_80189E2C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80189E34[])(void); + +void func_801706AC(void *a0) { + D_80189E34[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80189E3C[])(void); + +void func_80170748(void *a0) { + D_80189E3C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80189E44[])(void); + +void func_80170810(void *a0) { + D_80189E44[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80189E4C[])(void); + +void func_80170AD8(void *a0) { + D_80189E4C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80189E54[])(void); + +void func_80170BD8(void *a0) { + D_80189E54[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80189E5C[])(void); + +void func_80170C74(void *a0) { + D_80189E5C[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80189E64[])(void); + +void func_80170D68(void *a0) { + D_80189E64[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80189E6C[])(void); + +void func_80170E34(void *a0) { + D_80189E6C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80189E74[])(void); + +void func_80170EFC(void *a0) { + D_80189E74[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80189E7C[])(void); + +void func_80170FB0(void *a0) { + D_80189E7C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80189E84[])(void); + +void func_80171064(void *a0) { + D_80189E84[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80189E8C[])(void); + +void func_80171120(void *a0) { + D_80189E8C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80189E94[])(void); + +void func_801711C0(void *a0) { + D_80189E94[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80189E9C[])(void); + +void func_80171260(void *a0) { + D_80189E9C[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80189EA4[])(void); + +void func_801714E4(void *a0) { + D_80189EA4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8016AB6C", func_80172C50); + + +extern void (*D_80189EE8[])(void); + +void func_80172CA0(void *a0) { + D_80189EE8[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80189EAC; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80189EAC); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC05_019/ov_SC05_019_jr_8015AE2C.c b/src/ov_SC05_019/ov_SC05_019_jr_8015AE2C.c index c69c0ea33..c568b0199 100644 --- a/src/ov_SC05_019/ov_SC05_019_jr_8015AE2C.c +++ b/src/ov_SC05_019/ov_SC05_019_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_801823E4[])(void); void func_8016AB30(void *a0) { D_801823E4[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80182460[])(void); - -void func_8016B4BC(void *a0) { - D_80182460[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_8018EC80; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_8018EC80); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80182454[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80182454; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80182498[]; -extern unsigned short D_801824A0[]; -extern unsigned short D_801824A8[]; -extern unsigned char D_8018EC88[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_8018EC88 + param_2 * 0x40); - puVar3 = D_80182498[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_801824A0[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_801824A8[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_8018EC80; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_8018EC80, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_801824B0[])(void); - -void func_8016BBA4(void *a0) { - D_801824B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_8018EDBC; - extern u8 D_8018EDBD; - extern u8 D_8018EDBE; - extern M2C_UNK D_8018EDC0; - extern u8 D_8018EDC1; - extern u8 D_8018EDC2; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_8018EDBC) = 0x20; - D_8018EDBD = 0x20; - D_8018EDBE = 0; - (*(u8 *)&D_8018EDC0) = 0xc0; - D_8018EDC1 = 0xc0; - D_8018EDC2 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_8018EDBC; -extern M2C_UNK D_8018EDC0; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_8018EDBC, &D_8018EDC0, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_8018EDBD; - extern u8 D_8018EDBE; - extern u8 D_8018EDC1; - extern u8 D_8018EDC2; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_8018EDBC); - if (*p1 != 0) *p1 -= 4; - if (D_8018EDBD != 0) D_8018EDBD -= 4; - if (D_8018EDBE != 0) D_8018EDBE -= 4; - p2 = &(*(u8 *)&D_8018EDC0); - if (*p2 != 0) *p2 -= 4; - if (D_8018EDC1 != 0) D_8018EDC1 -= 4; - if (D_8018EDC2 != 0) D_8018EDC2 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_8018EDBC), &(*(int *)&D_8018EDC0), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_8018ED48; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_8018ED48); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_801824C0; - extern s32 D_801824C8; - extern s32 D_801824D0; - extern s32 D_801824D8; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_801824C0, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_801824C8, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_801824D0, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_801824D8, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_801824E0[])(void); - -void func_8016C14C(void *a0) { - D_801824E0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_8018EDC4[]; -extern u8 D_8018EDCC[]; -extern u8 D_8018ED7C[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_8018EDC4, D_8018EDCC, D_8018ED7C); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_8018EDD8[]; - extern u8 D_8018EE98; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_8018EDD8[1] = 0xff; - D_8018EDD8[2] = 0x10; - D_8018EDD8[0] = 0x10; - D_8018EDD8[6] = 0; - D_8018EDD8[5] = 0; - D_8018EDD8[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_8018EDD8, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_8018EE98, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_8018EDD8); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8015AE2C", func_8016C998); - - -extern void (*D_801824E8[])(void); - -void func_8016CB84(void *a0) { - D_801824E8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_8018EE98[]; - - - Blk_8016CF04_8016CF04 *p = &D_8018EE98[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80182504[])(void); - -void func_8016D19C(void *a0) { - D_80182504[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_8018250C[])(void); - -void func_8016D428(void *a0) { - D_8018250C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80182574[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80182574[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80182518; -extern u8 D_80182524; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80182518, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80182524); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8015AE2C", func_8016DC20); - - -extern void (*D_801825A8[])(void); - -void func_8016DEA4(void *a0) { - D_801825A8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_801825B0[])(void); - -void func_8016DF20(void *a0) { - D_801825B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80182604[])(void); - -void func_8016E5B8(void *a0) { - D_80182604[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_801825C4[4]; - extern s32 D_801825E4; - extern s32 D_801825EC; - extern s32 D_801825F4; - extern s32 D_801825FC; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_801825C4[0], pp, &tmp); - RotTransSV(&D_801825C4[1], &prim.v[1], &tmp); - RotTransSV(&D_801825C4[2], &prim.v[2], &tmp); - RotTransSV(&D_801825C4[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_801825E4; - prim.f1 = D_801825EC; - prim.f2 = D_801825F4; - prim.f3 = D_801825FC; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80182644[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80182644[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80182638[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80182638[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80182628[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80182628[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80182638[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80182638[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80182638[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80182654; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80182654; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_801826CC[])(void); - -void func_8016F6E0(void *a0) { - D_801826CC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_801826D4[])(void); - -void func_8016F798(void *a0) { - D_801826D4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_801826DC[])(void); - -void func_8016F834(void *a0) { - D_801826DC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_801826E4[])(void); - -void func_8016F8E4(void *a0) { - D_801826E4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_801826EC[])(void); - -void func_8016F9C4(void *a0) { - D_801826EC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_801826F4[])(void); - -void func_8016FA84(void *a0) { - D_801826F4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80182700[])(void); - -void func_8016FB7C(void *a0) { - D_80182700[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_8018270C[])(void); - -void func_8016FC90(void *a0) { - D_8018270C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80182718[])(void); - -void func_8016FDB4(void *a0) { - D_80182718[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80182728[])(void); - -void func_8016FF30(void *a0) { - D_80182728[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80182738[])(void); - -void func_8016FFDC(void *a0) { - D_80182738[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80182740[])(void); - -void func_80170150(void *a0) { - D_80182740[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80182748[])(void); - -void func_80170240(void *a0) { - D_80182748[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80182750[])(void); - -void func_801702FC(void *a0) { - D_80182750[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80182758[])(void); - -void func_801703E0(void *a0) { - D_80182758[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80182760[])(void); - -void func_801704B0(void *a0) { - D_80182760[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80182768[])(void); - -void func_80170548(void *a0) { - D_80182768[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80182770[])(void); - -void func_801705F8(void *a0) { - D_80182770[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80182778[])(void); - -void func_801706AC(void *a0) { - D_80182778[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80182780[])(void); - -void func_80170748(void *a0) { - D_80182780[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80182788[])(void); - -void func_80170810(void *a0) { - D_80182788[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80182790[])(void); - -void func_80170AD8(void *a0) { - D_80182790[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80182798[])(void); - -void func_80170BD8(void *a0) { - D_80182798[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_801827A0[])(void); - -void func_80170C74(void *a0) { - D_801827A0[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8015AE2C", func_80170CF0); - - -extern void (*D_801827A8[])(void); - -void func_80170D68(void *a0) { - D_801827A8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_801827B0[])(void); - -void func_80170E34(void *a0) { - D_801827B0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_801827B8[])(void); - -void func_80170EFC(void *a0) { - D_801827B8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_801827C0[])(void); - -void func_80170FB0(void *a0) { - D_801827C0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_801827C8[])(void); - -void func_80171064(void *a0) { - D_801827C8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_801827D0[])(void); - -void func_80171120(void *a0) { - D_801827D0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_801827D8[])(void); - -void func_801711C0(void *a0) { - D_801827D8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_801827E0[])(void); - -void func_80171260(void *a0) { - D_801827E0[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_801827E8[])(void); - -void func_801714E4(void *a0) { - D_801827E8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8015AE2C", func_80172C50); - - -extern void (*D_8018282C[])(void); - -void func_80172CA0(void *a0) { - D_8018282C[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_801827F0; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_801827F0); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC05_019/ov_SC05_019_jr_8016AB6C.c b/src/ov_SC05_019/ov_SC05_019_jr_8016AB6C.c new file mode 100644 index 000000000..949eb05db --- /dev/null +++ b/src/ov_SC05_019/ov_SC05_019_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801817B0; +extern u8 D_80181720; +extern u8 D_801816FC; +extern u8 D_801816D8; +extern u8 D_8018178C; +extern u8 D_80181768; +extern u8 D_80181744; +extern u8 D_801816B4; +extern void func_80145934(void); +extern u8 D_80181840; +extern u8 D_8018181C; +extern u8 D_801817F8; +extern u8 D_801817D4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80180C38[]; +extern unsigned char D_80180C68[]; +extern unsigned char D_80180CB8[]; +extern unsigned char D_80180CE8[]; +extern unsigned char D_80180D18[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80180D68[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80180E30[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80180EB8[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80180EC0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8018E810; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8018E814; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80180EF0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80180F98[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80180FBC[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80180FAC; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80180FD0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80180FDC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80180FEC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80181004[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80180FF4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80181018[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80181034[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80181024; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80181048[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018105C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80181070; +extern void (*D_80181098[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80181078; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801810E4[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801810E8[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018154C[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018155C[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_8018E848; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80181584[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80181564; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80181574; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801815C4[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801815CC[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80181598; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801815D8[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_801815A8; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_8018E850; +extern s32 D_8018E85C; +extern s32 D_8018E860; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80181614[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801815E8[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_8018E858; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80181864[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80181684[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80181908[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80181A5C[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80181878; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80181A64[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80181888; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801818A8; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80181A6C[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80181A94[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80181AA0[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80181914[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80181B44; +extern void func_8015D380(s32 a0); +extern unsigned char D_80180C28[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80181B58[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80181B94[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80181BDC; +extern u16 D_80181BDE; +extern u16 D_80181BE0; +extern s32 D_80181BE4; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80181BEC; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_801818F8; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80181C70[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80181D20[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80181D50[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80181DB4; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_8018E868[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80181DD8[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_8018E8C0[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80181E20[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80181E10; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_8018E118[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80181E28[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80181E7C[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80181E44; +extern s16 D_80181E78; +extern s16 D_80181E76; +extern s16 D_80181E74; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80181E88[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_8018E920; +extern u8 D_8018E921; +extern u8 D_8018E922; +extern u8 D_8018E923; +extern u8 D_8018E924; +extern u8 D_8018E925; +extern u8 D_8018E926; +extern u8 D_8018E927; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80181E98[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_8018E960; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80181EDC[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80181F58[]; +extern s32 D_80181F78[]; +extern u8 D_80181FF4[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80182014[]; +extern u8 D_80182034[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_801820D0[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_8018214C[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_8018E128; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80182158[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80182160[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80182228[])(void); +extern void func_80166618(void *a0); +extern void (*D_80182238[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80182248[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80182254[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_801821B4[]; +extern u8 D_801821C8[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_8018226C[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80182274[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_8018227C[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80182284[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_8018228C[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80182294[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_8018229C[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80182350[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80182358[])(void); +extern void func_80169F00(void *a0); +extern char D_80182308[]; +extern char D_801822C8[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80182390[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_8018239C[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_801823E4[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_801823A4[]; + extern u8 D_801823B4[]; + extern u8 D_8018EC30[]; + extern u8 D_8018EC58[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_801823A4, D_8018EC30) + 3; + func_8001CE28(obj, D_8018EC30); + } else { + var_s3 = func_80024054(D_801823B4, D_8018EC58) + 9; + func_8001CE28(obj, D_8018EC58); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80182460[])(void); + +void func_8016B4BC(void *a0) { + D_80182460[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_8018EC80; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_8018EC80); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80182454[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80182454; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80182498[]; +extern unsigned short D_801824A0[]; +extern unsigned short D_801824A8[]; +extern unsigned char D_8018EC88[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_8018EC88 + param_2 * 0x40); + puVar3 = D_80182498[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_801824A0[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_801824A8[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_8018EC80; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_8018EC80, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_801824B0[])(void); + +void func_8016BBA4(void *a0) { + D_801824B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_8018EDBC; + extern u8 D_8018EDBD; + extern u8 D_8018EDBE; + extern M2C_UNK D_8018EDC0; + extern u8 D_8018EDC1; + extern u8 D_8018EDC2; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_8018EDBC) = 0x20; + D_8018EDBD = 0x20; + D_8018EDBE = 0; + (*(u8 *)&D_8018EDC0) = 0xc0; + D_8018EDC1 = 0xc0; + D_8018EDC2 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_8018EDBC; +extern M2C_UNK D_8018EDC0; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_8018EDBC, &D_8018EDC0, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_8018EDBD; + extern u8 D_8018EDBE; + extern u8 D_8018EDC1; + extern u8 D_8018EDC2; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_8018EDBC); + if (*p1 != 0) *p1 -= 4; + if (D_8018EDBD != 0) D_8018EDBD -= 4; + if (D_8018EDBE != 0) D_8018EDBE -= 4; + p2 = &(*(u8 *)&D_8018EDC0); + if (*p2 != 0) *p2 -= 4; + if (D_8018EDC1 != 0) D_8018EDC1 -= 4; + if (D_8018EDC2 != 0) D_8018EDC2 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_8018EDBC), &(*(int *)&D_8018EDC0), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_8018ED48; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_8018ED48); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_801824C0; + extern s32 D_801824C8; + extern s32 D_801824D0; + extern s32 D_801824D8; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_801824C0, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_801824C8, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_801824D0, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_801824D8, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_801824E0[])(void); + +void func_8016C14C(void *a0) { + D_801824E0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_8018EDC4[]; +extern u8 D_8018EDCC[]; +extern u8 D_8018ED7C[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_8018EDC4, D_8018EDCC, D_8018ED7C); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_8018EDD8[]; + extern u8 D_8018EE98; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_8018EDD8[1] = 0xff; + D_8018EDD8[2] = 0x10; + D_8018EDD8[0] = 0x10; + D_8018EDD8[6] = 0; + D_8018EDD8[5] = 0; + D_8018EDD8[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_8018EDD8, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_8018EE98, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_8018EDD8); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8016AB6C", func_8016C998); + + +extern void (*D_801824E8[])(void); + +void func_8016CB84(void *a0) { + D_801824E8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_8018EE98[]; + + + Blk_8016CF04_8016CF04 *p = &D_8018EE98[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80182504[])(void); + +void func_8016D19C(void *a0) { + D_80182504[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_8018250C[])(void); + +void func_8016D428(void *a0) { + D_8018250C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80182574[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80182574[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80182518; +extern u8 D_80182524; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80182518, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80182524); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8016AB6C", func_8016DC20); + + +extern void (*D_801825A8[])(void); + +void func_8016DEA4(void *a0) { + D_801825A8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_801825B0[])(void); + +void func_8016DF20(void *a0) { + D_801825B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80182604[])(void); + +void func_8016E5B8(void *a0) { + D_80182604[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_801825C4[4]; + extern s32 D_801825E4; + extern s32 D_801825EC; + extern s32 D_801825F4; + extern s32 D_801825FC; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_801825C4[0], pp, &tmp); + RotTransSV(&D_801825C4[1], &prim.v[1], &tmp); + RotTransSV(&D_801825C4[2], &prim.v[2], &tmp); + RotTransSV(&D_801825C4[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_801825E4; + prim.f1 = D_801825EC; + prim.f2 = D_801825F4; + prim.f3 = D_801825FC; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80182644[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80182644[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80182638[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80182638[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80182628[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80182628[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80182638[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80182638[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80182638[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80182654; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80182654; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_801826CC[])(void); + +void func_8016F6E0(void *a0) { + D_801826CC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_801826D4[])(void); + +void func_8016F798(void *a0) { + D_801826D4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_801826DC[])(void); + +void func_8016F834(void *a0) { + D_801826DC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_801826E4[])(void); + +void func_8016F8E4(void *a0) { + D_801826E4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_801826EC[])(void); + +void func_8016F9C4(void *a0) { + D_801826EC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_801826F4[])(void); + +void func_8016FA84(void *a0) { + D_801826F4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80182700[])(void); + +void func_8016FB7C(void *a0) { + D_80182700[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_8018270C[])(void); + +void func_8016FC90(void *a0) { + D_8018270C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80182718[])(void); + +void func_8016FDB4(void *a0) { + D_80182718[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80182728[])(void); + +void func_8016FF30(void *a0) { + D_80182728[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80182738[])(void); + +void func_8016FFDC(void *a0) { + D_80182738[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80182740[])(void); + +void func_80170150(void *a0) { + D_80182740[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80182748[])(void); + +void func_80170240(void *a0) { + D_80182748[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80182750[])(void); + +void func_801702FC(void *a0) { + D_80182750[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80182758[])(void); + +void func_801703E0(void *a0) { + D_80182758[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80182760[])(void); + +void func_801704B0(void *a0) { + D_80182760[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80182768[])(void); + +void func_80170548(void *a0) { + D_80182768[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80182770[])(void); + +void func_801705F8(void *a0) { + D_80182770[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80182778[])(void); + +void func_801706AC(void *a0) { + D_80182778[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80182780[])(void); + +void func_80170748(void *a0) { + D_80182780[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80182788[])(void); + +void func_80170810(void *a0) { + D_80182788[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80182790[])(void); + +void func_80170AD8(void *a0) { + D_80182790[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80182798[])(void); + +void func_80170BD8(void *a0) { + D_80182798[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_801827A0[])(void); + +void func_80170C74(void *a0) { + D_801827A0[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8016AB6C", func_80170CF0); + + +extern void (*D_801827A8[])(void); + +void func_80170D68(void *a0) { + D_801827A8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_801827B0[])(void); + +void func_80170E34(void *a0) { + D_801827B0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_801827B8[])(void); + +void func_80170EFC(void *a0) { + D_801827B8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_801827C0[])(void); + +void func_80170FB0(void *a0) { + D_801827C0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_801827C8[])(void); + +void func_80171064(void *a0) { + D_801827C8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_801827D0[])(void); + +void func_80171120(void *a0) { + D_801827D0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_801827D8[])(void); + +void func_801711C0(void *a0) { + D_801827D8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_801827E0[])(void); + +void func_80171260(void *a0) { + D_801827E0[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_801827E8[])(void); + +void func_801714E4(void *a0) { + D_801827E8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8016AB6C", func_80172C50); + + +extern void (*D_8018282C[])(void); + +void func_80172CA0(void *a0) { + D_8018282C[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_801827F0; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_801827F0); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC06_000/ov_SC06_000_jr_8015AE2C.c b/src/ov_SC06_000/ov_SC06_000_jr_8015AE2C.c index 26a05ffd1..e42ab00ba 100644 --- a/src/ov_SC06_000/ov_SC06_000_jr_8015AE2C.c +++ b/src/ov_SC06_000/ov_SC06_000_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_8018B3F4[])(void); void func_8016AB30(void *a0) { D_8018B3F4[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_8018B470[])(void); - -void func_8016B4BC(void *a0) { - D_8018B470[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801AD8F0; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801AD8F0); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_8018B464[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_8018B464; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_8018B4A8[]; -extern unsigned short D_8018B4B0[]; -extern unsigned short D_8018B4B8[]; -extern unsigned char D_801AD8F8[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801AD8F8 + param_2 * 0x40); - puVar3 = D_8018B4A8[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_8018B4B0[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_8018B4B8[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801AD8F0; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801AD8F0, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_8018B4C0[])(void); - -void func_8016BBA4(void *a0) { - D_8018B4C0[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801ADA2C; - extern u8 D_801ADA2D; - extern u8 D_801ADA2E; - extern M2C_UNK D_801ADA30; - extern u8 D_801ADA31; - extern u8 D_801ADA32; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801ADA2C) = 0x20; - D_801ADA2D = 0x20; - D_801ADA2E = 0; - (*(u8 *)&D_801ADA30) = 0xc0; - D_801ADA31 = 0xc0; - D_801ADA32 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801ADA2C; -extern M2C_UNK D_801ADA30; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801ADA2C, &D_801ADA30, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801ADA2D; - extern u8 D_801ADA2E; - extern u8 D_801ADA31; - extern u8 D_801ADA32; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801ADA2C); - if (*p1 != 0) *p1 -= 4; - if (D_801ADA2D != 0) D_801ADA2D -= 4; - if (D_801ADA2E != 0) D_801ADA2E -= 4; - p2 = &(*(u8 *)&D_801ADA30); - if (*p2 != 0) *p2 -= 4; - if (D_801ADA31 != 0) D_801ADA31 -= 4; - if (D_801ADA32 != 0) D_801ADA32 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801ADA2C), &(*(int *)&D_801ADA30), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801AD9B8; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801AD9B8); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_8018B4D0; - extern s32 D_8018B4D8; - extern s32 D_8018B4E0; - extern s32 D_8018B4E8; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_8018B4D0, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_8018B4D8, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_8018B4E0, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_8018B4E8, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_8018B4F0[])(void); - -void func_8016C14C(void *a0) { - D_8018B4F0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801ADA34[]; -extern u8 D_801ADA3C[]; -extern u8 D_801AD9EC[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801ADA34, D_801ADA3C, D_801AD9EC); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801ADA48[]; - extern u8 D_801ADB08; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801ADA48[1] = 0xff; - D_801ADA48[2] = 0x10; - D_801ADA48[0] = 0x10; - D_801ADA48[6] = 0; - D_801ADA48[5] = 0; - D_801ADA48[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801ADA48, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801ADB08, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801ADA48); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8015AE2C", func_8016C998); - - -extern void (*D_8018B4F8[])(void); - -void func_8016CB84(void *a0) { - D_8018B4F8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801ADB08[]; - - - Blk_8016CF04_8016CF04 *p = &D_801ADB08[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_8018B514[])(void); - -void func_8016D19C(void *a0) { - D_8018B514[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_8018B51C[])(void); - -void func_8016D428(void *a0) { - D_8018B51C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_8018B584[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_8018B584[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_8018B528; -extern u8 D_8018B534; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018B528, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018B534); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8015AE2C", func_8016DC20); - - -extern void (*D_8018B5B8[])(void); - -void func_8016DEA4(void *a0) { - D_8018B5B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_8018B5C0[])(void); - -void func_8016DF20(void *a0) { - D_8018B5C0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_8018B614[])(void); - -void func_8016E5B8(void *a0) { - D_8018B614[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_8018B5D4[4]; - extern s32 D_8018B5F4; - extern s32 D_8018B5FC; - extern s32 D_8018B604; - extern s32 D_8018B60C; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_8018B5D4[0], pp, &tmp); - RotTransSV(&D_8018B5D4[1], &prim.v[1], &tmp); - RotTransSV(&D_8018B5D4[2], &prim.v[2], &tmp); - RotTransSV(&D_8018B5D4[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_8018B5F4; - prim.f1 = D_8018B5FC; - prim.f2 = D_8018B604; - prim.f3 = D_8018B60C; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_8018B654[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_8018B654[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_8018B648[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_8018B648[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_8018B638[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_8018B638[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018B648[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_8018B648[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_8018B648[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_8018B664; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_8018B664; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_8018B6DC[])(void); - -void func_8016F6E0(void *a0) { - D_8018B6DC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_8018B6E4[])(void); - -void func_8016F798(void *a0) { - D_8018B6E4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_8018B6EC[])(void); - -void func_8016F834(void *a0) { - D_8018B6EC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_8018B6F4[])(void); - -void func_8016F8E4(void *a0) { - D_8018B6F4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_8018B6FC[])(void); - -void func_8016F9C4(void *a0) { - D_8018B6FC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_8018B704[])(void); - -void func_8016FA84(void *a0) { - D_8018B704[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_8018B710[])(void); - -void func_8016FB7C(void *a0) { - D_8018B710[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_8018B71C[])(void); - -void func_8016FC90(void *a0) { - D_8018B71C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_8018B728[])(void); - -void func_8016FDB4(void *a0) { - D_8018B728[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_8018B738[])(void); - -void func_8016FF30(void *a0) { - D_8018B738[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_8018B748[])(void); - -void func_8016FFDC(void *a0) { - D_8018B748[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_8018B750[])(void); - -void func_80170150(void *a0) { - D_8018B750[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_8018B758[])(void); - -void func_80170240(void *a0) { - D_8018B758[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_8018B760[])(void); - -void func_801702FC(void *a0) { - D_8018B760[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_8018B768[])(void); - -void func_801703E0(void *a0) { - D_8018B768[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_8018B770[])(void); - -void func_801704B0(void *a0) { - D_8018B770[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_8018B778[])(void); - -void func_80170548(void *a0) { - D_8018B778[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_8018B780[])(void); - -void func_801705F8(void *a0) { - D_8018B780[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_8018B788[])(void); - -void func_801706AC(void *a0) { - D_8018B788[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_8018B790[])(void); - -void func_80170748(void *a0) { - D_8018B790[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_8018B798[])(void); - -void func_80170810(void *a0) { - D_8018B798[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_8018B7A0[])(void); - -void func_80170AD8(void *a0) { - D_8018B7A0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_8018B7A8[])(void); - -void func_80170BD8(void *a0) { - D_8018B7A8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_8018B7B0[])(void); - -void func_80170C74(void *a0) { - D_8018B7B0[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8015AE2C", func_80170CF0); - - -extern void (*D_8018B7B8[])(void); - -void func_80170D68(void *a0) { - D_8018B7B8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_8018B7C0[])(void); - -void func_80170E34(void *a0) { - D_8018B7C0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_8018B7C8[])(void); - -void func_80170EFC(void *a0) { - D_8018B7C8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_8018B7D0[])(void); - -void func_80170FB0(void *a0) { - D_8018B7D0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_8018B7D8[])(void); - -void func_80171064(void *a0) { - D_8018B7D8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_8018B7E0[])(void); - -void func_80171120(void *a0) { - D_8018B7E0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_8018B7E8[])(void); - -void func_801711C0(void *a0) { - D_8018B7E8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_8018B7F0[])(void); - -void func_80171260(void *a0) { - D_8018B7F0[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_8018B7F8[])(void); - -void func_801714E4(void *a0) { - D_8018B7F8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8015AE2C", func_80172C50); - - -extern void (*D_8018B83C[])(void); - -void func_80172CA0(void *a0) { - D_8018B83C[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_8018B800; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_8018B800); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC06_000/ov_SC06_000_jr_8016AB6C.c b/src/ov_SC06_000/ov_SC06_000_jr_8016AB6C.c new file mode 100644 index 000000000..1b748f853 --- /dev/null +++ b/src/ov_SC06_000/ov_SC06_000_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018A7C0; +extern u8 D_8018A730; +extern u8 D_8018A70C; +extern u8 D_8018A6E8; +extern u8 D_8018A79C; +extern u8 D_8018A778; +extern u8 D_8018A754; +extern u8 D_8018A6C4; +extern void func_80145934(void); +extern u8 D_8018A850; +extern u8 D_8018A82C; +extern u8 D_8018A808; +extern u8 D_8018A7E4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80189C48[]; +extern unsigned char D_80189C78[]; +extern unsigned char D_80189CC8[]; +extern unsigned char D_80189CF8[]; +extern unsigned char D_80189D28[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80189D78[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80189E40[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80189EC8[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80189ED0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801AD480; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801AD484; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80189F00; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80189FA8[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80189FCC[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80189FBC; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80189FE0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80189FEC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80189FFC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018A014[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018A004; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018A028[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018A044[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018A034; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018A058[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018A06C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018A080; +extern void (*D_8018A0A8[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018A088; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018A0F4[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018A0F8[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018A55C[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018A56C[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801AD4B8; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018A594[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018A574; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018A584; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018A5D4[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018A5DC[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018A5A8; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018A5E8[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018A5B8; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801AD4C0; +extern s32 D_801AD4CC; +extern s32 D_801AD4D0; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018A624[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018A5F8[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801AD4C8; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018A874[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018A694[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018A918[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018AA6C[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018A888; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018AA74[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018A898; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018A8B8; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_8018AA7C[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_8018AAA4[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_8018AAB0[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_8018A924[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_8018AB54; +extern void func_8015D380(s32 a0); +extern unsigned char D_80189C38[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_8018AB68[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_8018ABA4[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_8018ABEC; +extern u16 D_8018ABEE; +extern u16 D_8018ABF0; +extern s32 D_8018ABF4; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_8018ABFC; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_8018A908; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_8018AC80[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_8018AD30[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_8018AD60[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_8018ADC4; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801AD4D8[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_8018ADE8[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801AD530[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_8018AE30[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_8018AE20; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801ACD90[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_8018AE38[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_8018AE8C[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_8018AE54; +extern s16 D_8018AE88; +extern s16 D_8018AE86; +extern s16 D_8018AE84; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_8018AE98[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801AD590; +extern u8 D_801AD591; +extern u8 D_801AD592; +extern u8 D_801AD593; +extern u8 D_801AD594; +extern u8 D_801AD595; +extern u8 D_801AD596; +extern u8 D_801AD597; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_8018AEA8[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801AD5D0; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_8018AEEC[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_8018AF68[]; +extern s32 D_8018AF88[]; +extern u8 D_8018B004[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_8018B024[]; +extern u8 D_8018B044[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_8018B0E0[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_8018B15C[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801ACDA0; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_8018B168[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_8018B170[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_8018B238[])(void); +extern void func_80166618(void *a0); +extern void (*D_8018B248[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_8018B258[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_8018B264[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_8018B1C4[]; +extern u8 D_8018B1D8[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_8018B27C[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_8018B284[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_8018B28C[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_8018B294[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_8018B29C[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_8018B2A4[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_8018B2AC[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_8018B360[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_8018B368[])(void); +extern void func_80169F00(void *a0); +extern char D_8018B318[]; +extern char D_8018B2D8[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_8018B3A0[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_8018B3AC[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_8018B3F4[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_8018B3B4[]; + extern u8 D_8018B3C4[]; + extern u8 D_801AD8A0[]; + extern u8 D_801AD8C8[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_8018B3B4, D_801AD8A0) + 3; + func_8001CE28(obj, D_801AD8A0); + } else { + var_s3 = func_80024054(D_8018B3C4, D_801AD8C8) + 9; + func_8001CE28(obj, D_801AD8C8); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_8018B470[])(void); + +void func_8016B4BC(void *a0) { + D_8018B470[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801AD8F0; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801AD8F0); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_8018B464[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_8018B464; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_8018B4A8[]; +extern unsigned short D_8018B4B0[]; +extern unsigned short D_8018B4B8[]; +extern unsigned char D_801AD8F8[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801AD8F8 + param_2 * 0x40); + puVar3 = D_8018B4A8[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_8018B4B0[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_8018B4B8[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801AD8F0; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801AD8F0, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_8018B4C0[])(void); + +void func_8016BBA4(void *a0) { + D_8018B4C0[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801ADA2C; + extern u8 D_801ADA2D; + extern u8 D_801ADA2E; + extern M2C_UNK D_801ADA30; + extern u8 D_801ADA31; + extern u8 D_801ADA32; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801ADA2C) = 0x20; + D_801ADA2D = 0x20; + D_801ADA2E = 0; + (*(u8 *)&D_801ADA30) = 0xc0; + D_801ADA31 = 0xc0; + D_801ADA32 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801ADA2C; +extern M2C_UNK D_801ADA30; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801ADA2C, &D_801ADA30, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801ADA2D; + extern u8 D_801ADA2E; + extern u8 D_801ADA31; + extern u8 D_801ADA32; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801ADA2C); + if (*p1 != 0) *p1 -= 4; + if (D_801ADA2D != 0) D_801ADA2D -= 4; + if (D_801ADA2E != 0) D_801ADA2E -= 4; + p2 = &(*(u8 *)&D_801ADA30); + if (*p2 != 0) *p2 -= 4; + if (D_801ADA31 != 0) D_801ADA31 -= 4; + if (D_801ADA32 != 0) D_801ADA32 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801ADA2C), &(*(int *)&D_801ADA30), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801AD9B8; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801AD9B8); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_8018B4D0; + extern s32 D_8018B4D8; + extern s32 D_8018B4E0; + extern s32 D_8018B4E8; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_8018B4D0, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_8018B4D8, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_8018B4E0, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_8018B4E8, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_8018B4F0[])(void); + +void func_8016C14C(void *a0) { + D_8018B4F0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801ADA34[]; +extern u8 D_801ADA3C[]; +extern u8 D_801AD9EC[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801ADA34, D_801ADA3C, D_801AD9EC); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801ADA48[]; + extern u8 D_801ADB08; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801ADA48[1] = 0xff; + D_801ADA48[2] = 0x10; + D_801ADA48[0] = 0x10; + D_801ADA48[6] = 0; + D_801ADA48[5] = 0; + D_801ADA48[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801ADA48, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801ADB08, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801ADA48); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8016AB6C", func_8016C998); + + +extern void (*D_8018B4F8[])(void); + +void func_8016CB84(void *a0) { + D_8018B4F8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801ADB08[]; + + + Blk_8016CF04_8016CF04 *p = &D_801ADB08[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_8018B514[])(void); + +void func_8016D19C(void *a0) { + D_8018B514[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_8018B51C[])(void); + +void func_8016D428(void *a0) { + D_8018B51C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018B584[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_8018B584[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_8018B528; +extern u8 D_8018B534; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018B528, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018B534); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8016AB6C", func_8016DC20); + + +extern void (*D_8018B5B8[])(void); + +void func_8016DEA4(void *a0) { + D_8018B5B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_8018B5C0[])(void); + +void func_8016DF20(void *a0) { + D_8018B5C0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_8018B614[])(void); + +void func_8016E5B8(void *a0) { + D_8018B614[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_8018B5D4[4]; + extern s32 D_8018B5F4; + extern s32 D_8018B5FC; + extern s32 D_8018B604; + extern s32 D_8018B60C; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_8018B5D4[0], pp, &tmp); + RotTransSV(&D_8018B5D4[1], &prim.v[1], &tmp); + RotTransSV(&D_8018B5D4[2], &prim.v[2], &tmp); + RotTransSV(&D_8018B5D4[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_8018B5F4; + prim.f1 = D_8018B5FC; + prim.f2 = D_8018B604; + prim.f3 = D_8018B60C; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_8018B654[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_8018B654[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_8018B648[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_8018B648[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_8018B638[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_8018B638[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018B648[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_8018B648[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_8018B648[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_8018B664; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_8018B664; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_8018B6DC[])(void); + +void func_8016F6E0(void *a0) { + D_8018B6DC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_8018B6E4[])(void); + +void func_8016F798(void *a0) { + D_8018B6E4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_8018B6EC[])(void); + +void func_8016F834(void *a0) { + D_8018B6EC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_8018B6F4[])(void); + +void func_8016F8E4(void *a0) { + D_8018B6F4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_8018B6FC[])(void); + +void func_8016F9C4(void *a0) { + D_8018B6FC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_8018B704[])(void); + +void func_8016FA84(void *a0) { + D_8018B704[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_8018B710[])(void); + +void func_8016FB7C(void *a0) { + D_8018B710[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_8018B71C[])(void); + +void func_8016FC90(void *a0) { + D_8018B71C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_8018B728[])(void); + +void func_8016FDB4(void *a0) { + D_8018B728[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_8018B738[])(void); + +void func_8016FF30(void *a0) { + D_8018B738[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_8018B748[])(void); + +void func_8016FFDC(void *a0) { + D_8018B748[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_8018B750[])(void); + +void func_80170150(void *a0) { + D_8018B750[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_8018B758[])(void); + +void func_80170240(void *a0) { + D_8018B758[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_8018B760[])(void); + +void func_801702FC(void *a0) { + D_8018B760[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_8018B768[])(void); + +void func_801703E0(void *a0) { + D_8018B768[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_8018B770[])(void); + +void func_801704B0(void *a0) { + D_8018B770[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_8018B778[])(void); + +void func_80170548(void *a0) { + D_8018B778[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_8018B780[])(void); + +void func_801705F8(void *a0) { + D_8018B780[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_8018B788[])(void); + +void func_801706AC(void *a0) { + D_8018B788[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_8018B790[])(void); + +void func_80170748(void *a0) { + D_8018B790[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_8018B798[])(void); + +void func_80170810(void *a0) { + D_8018B798[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_8018B7A0[])(void); + +void func_80170AD8(void *a0) { + D_8018B7A0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_8018B7A8[])(void); + +void func_80170BD8(void *a0) { + D_8018B7A8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_8018B7B0[])(void); + +void func_80170C74(void *a0) { + D_8018B7B0[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8016AB6C", func_80170CF0); + + +extern void (*D_8018B7B8[])(void); + +void func_80170D68(void *a0) { + D_8018B7B8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_8018B7C0[])(void); + +void func_80170E34(void *a0) { + D_8018B7C0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_8018B7C8[])(void); + +void func_80170EFC(void *a0) { + D_8018B7C8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_8018B7D0[])(void); + +void func_80170FB0(void *a0) { + D_8018B7D0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_8018B7D8[])(void); + +void func_80171064(void *a0) { + D_8018B7D8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_8018B7E0[])(void); + +void func_80171120(void *a0) { + D_8018B7E0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_8018B7E8[])(void); + +void func_801711C0(void *a0) { + D_8018B7E8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_8018B7F0[])(void); + +void func_80171260(void *a0) { + D_8018B7F0[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_8018B7F8[])(void); + +void func_801714E4(void *a0) { + D_8018B7F8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8016AB6C", func_80172C50); + + +extern void (*D_8018B83C[])(void); + +void func_80172CA0(void *a0) { + D_8018B83C[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_8018B800; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_8018B800); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC06_006/ov_SC06_006_jr_8015AE2C.c b/src/ov_SC06_006/ov_SC06_006_jr_8015AE2C.c index 3abf79077..33c1b28ba 100644 --- a/src/ov_SC06_006/ov_SC06_006_jr_8015AE2C.c +++ b/src/ov_SC06_006/ov_SC06_006_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_80184F18[])(void); void func_8016AB30(void *a0) { D_80184F18[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80184F94[])(void); - -void func_8016B4BC(void *a0) { - D_80184F94[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801F7338; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801F7338); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80184F88[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80184F88; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80184FCC[]; -extern unsigned short D_80184FD4[]; -extern unsigned short D_80184FDC[]; -extern unsigned char D_801F7340[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801F7340 + param_2 * 0x40); - puVar3 = D_80184FCC[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80184FD4[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80184FDC[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801F7338; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801F7338, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80184FE4[])(void); - -void func_8016BBA4(void *a0) { - D_80184FE4[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801F7474; - extern u8 D_801F7475; - extern u8 D_801F7476; - extern M2C_UNK D_801F7478; - extern u8 D_801F7479; - extern u8 D_801F747A; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801F7474) = 0x20; - D_801F7475 = 0x20; - D_801F7476 = 0; - (*(u8 *)&D_801F7478) = 0xc0; - D_801F7479 = 0xc0; - D_801F747A = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801F7474; -extern M2C_UNK D_801F7478; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801F7474, &D_801F7478, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801F7475; - extern u8 D_801F7476; - extern u8 D_801F7479; - extern u8 D_801F747A; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801F7474); - if (*p1 != 0) *p1 -= 4; - if (D_801F7475 != 0) D_801F7475 -= 4; - if (D_801F7476 != 0) D_801F7476 -= 4; - p2 = &(*(u8 *)&D_801F7478); - if (*p2 != 0) *p2 -= 4; - if (D_801F7479 != 0) D_801F7479 -= 4; - if (D_801F747A != 0) D_801F747A -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801F7474), &(*(int *)&D_801F7478), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801F7400; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801F7400); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80184FF4; - extern s32 D_80184FFC; - extern s32 D_80185004; - extern s32 D_8018500C; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80184FF4, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80184FFC, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80185004, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_8018500C, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80185014[])(void); - -void func_8016C14C(void *a0) { - D_80185014[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801F747C[]; -extern u8 D_801F7484[]; -extern u8 D_801F7434[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801F747C, D_801F7484, D_801F7434); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801F7490[]; - extern u8 D_801F7550; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801F7490[1] = 0xff; - D_801F7490[2] = 0x10; - D_801F7490[0] = 0x10; - D_801F7490[6] = 0; - D_801F7490[5] = 0; - D_801F7490[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801F7490, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801F7550, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801F7490); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8015AE2C", func_8016C998); - - -extern void (*D_8018501C[])(void); - -void func_8016CB84(void *a0) { - D_8018501C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801F7550[]; - - - Blk_8016CF04_8016CF04 *p = &D_801F7550[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80185038[])(void); - -void func_8016D19C(void *a0) { - D_80185038[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80185040[])(void); - -void func_8016D428(void *a0) { - D_80185040[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_801850A8[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_801850A8[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_8018504C; -extern u8 D_80185058; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018504C, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80185058); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8015AE2C", func_8016DC20); - - -extern void (*D_801850DC[])(void); - -void func_8016DEA4(void *a0) { - D_801850DC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_801850E4[])(void); - -void func_8016DF20(void *a0) { - D_801850E4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80185138[])(void); - -void func_8016E5B8(void *a0) { - D_80185138[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_801850F8[4]; - extern s32 D_80185118; - extern s32 D_80185120; - extern s32 D_80185128; - extern s32 D_80185130; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_801850F8[0], pp, &tmp); - RotTransSV(&D_801850F8[1], &prim.v[1], &tmp); - RotTransSV(&D_801850F8[2], &prim.v[2], &tmp); - RotTransSV(&D_801850F8[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80185118; - prim.f1 = D_80185120; - prim.f2 = D_80185128; - prim.f3 = D_80185130; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80185178[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80185178[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_8018516C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_8018516C[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_8018515C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_8018515C[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018516C[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_8018516C[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_8018516C[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80185188; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80185188; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80185200[])(void); - -void func_8016F6E0(void *a0) { - D_80185200[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80185208[])(void); - -void func_8016F798(void *a0) { - D_80185208[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80185210[])(void); - -void func_8016F834(void *a0) { - D_80185210[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80185218[])(void); - -void func_8016F8E4(void *a0) { - D_80185218[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80185220[])(void); - -void func_8016F9C4(void *a0) { - D_80185220[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80185228[])(void); - -void func_8016FA84(void *a0) { - D_80185228[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80185234[])(void); - -void func_8016FB7C(void *a0) { - D_80185234[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80185240[])(void); - -void func_8016FC90(void *a0) { - D_80185240[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_8018524C[])(void); - -void func_8016FDB4(void *a0) { - D_8018524C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_8018525C[])(void); - -void func_8016FF30(void *a0) { - D_8018525C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_8018526C[])(void); - -void func_8016FFDC(void *a0) { - D_8018526C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80185274[])(void); - -void func_80170150(void *a0) { - D_80185274[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_8018527C[])(void); - -void func_80170240(void *a0) { - D_8018527C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80185284[])(void); - -void func_801702FC(void *a0) { - D_80185284[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_8018528C[])(void); - -void func_801703E0(void *a0) { - D_8018528C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80185294[])(void); - -void func_801704B0(void *a0) { - D_80185294[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_8018529C[])(void); - -void func_80170548(void *a0) { - D_8018529C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_801852A4[])(void); - -void func_801705F8(void *a0) { - D_801852A4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_801852AC[])(void); - -void func_801706AC(void *a0) { - D_801852AC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_801852B4[])(void); - -void func_80170748(void *a0) { - D_801852B4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_801852BC[])(void); - -void func_80170810(void *a0) { - D_801852BC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_801852C4[])(void); - -void func_80170AD8(void *a0) { - D_801852C4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_801852CC[])(void); - -void func_80170BD8(void *a0) { - D_801852CC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_801852D4[])(void); - -void func_80170C74(void *a0) { - D_801852D4[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8015AE2C", func_80170CF0); - - -extern void (*D_801852DC[])(void); - -void func_80170D68(void *a0) { - D_801852DC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_801852E4[])(void); - -void func_80170E34(void *a0) { - D_801852E4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_801852EC[])(void); - -void func_80170EFC(void *a0) { - D_801852EC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_801852F4[])(void); - -void func_80170FB0(void *a0) { - D_801852F4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_801852FC[])(void); - -void func_80171064(void *a0) { - D_801852FC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80185304[])(void); - -void func_80171120(void *a0) { - D_80185304[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_8018530C[])(void); - -void func_801711C0(void *a0) { - D_8018530C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80185314[])(void); - -void func_80171260(void *a0) { - D_80185314[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_8018531C[])(void); - -void func_801714E4(void *a0) { - D_8018531C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8015AE2C", func_80172C50); - - -extern void (*D_80185360[])(void); - -void func_80172CA0(void *a0) { - D_80185360[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80185324; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80185324); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC06_006/ov_SC06_006_jr_8016AB6C.c b/src/ov_SC06_006/ov_SC06_006_jr_8016AB6C.c new file mode 100644 index 000000000..b5ebe4560 --- /dev/null +++ b/src/ov_SC06_006/ov_SC06_006_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801842E4; +extern u8 D_80184254; +extern u8 D_80184230; +extern u8 D_8018420C; +extern u8 D_801842C0; +extern u8 D_8018429C; +extern u8 D_80184278; +extern u8 D_801841E8; +extern void func_80145934(void); +extern u8 D_80184374; +extern u8 D_80184350; +extern u8 D_8018432C; +extern u8 D_80184308; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018376C[]; +extern unsigned char D_8018379C[]; +extern unsigned char D_801837EC[]; +extern unsigned char D_8018381C[]; +extern unsigned char D_8018384C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018389C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80183964[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801839EC[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801839F4; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801F6EC8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801F6ECC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80183A24; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80183ACC[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80183AF0[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80183AE0; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80183B04[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80183B10[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80183B20[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80183B38[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80183B28; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80183B4C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80183B68[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80183B58; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80183B7C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80183B90[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80183BA4; +extern void (*D_80183BCC[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80183BAC; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80183C18[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80183C1C[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80184080[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80184090[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801F6F00; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_801840B8[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80184098; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_801840A8; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801840F8[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80184100[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_801840CC; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018410C[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_801840DC; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801F6F08; +extern s32 D_801F6F14; +extern s32 D_801F6F18; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80184148[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018411C[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801F6F10; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80184398[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_801841B8[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018443C[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80184590[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_801843AC; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80184598[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_801843BC; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801843DC; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_801845A0[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_801845C8[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_801845D4[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80184448[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80184678; +extern void func_8015D380(s32 a0); +extern unsigned char D_8018375C[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_8018468C[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_801846C8[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80184710; +extern u16 D_80184712; +extern u16 D_80184714; +extern s32 D_80184718; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80184720; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_8018442C; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_801847A4[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80184854[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80184884[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_801848E8; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801F6F20[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_8018490C[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801F6F78[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80184954[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80184944; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801F6698[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_8018495C[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_801849B0[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80184978; +extern s16 D_801849AC; +extern s16 D_801849AA; +extern s16 D_801849A8; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_801849BC[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801F6FD8; +extern u8 D_801F6FD9; +extern u8 D_801F6FDA; +extern u8 D_801F6FDB; +extern u8 D_801F6FDC; +extern u8 D_801F6FDD; +extern u8 D_801F6FDE; +extern u8 D_801F6FDF; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_801849CC[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801F7018; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80184A10[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80184A8C[]; +extern s32 D_80184AAC[]; +extern u8 D_80184B28[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80184B48[]; +extern u8 D_80184B68[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80184C04[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80184C80[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801F66A8; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80184C8C[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80184C94[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80184D5C[])(void); +extern void func_80166618(void *a0); +extern void (*D_80184D6C[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80184D7C[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80184D88[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80184CE8[]; +extern u8 D_80184CFC[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80184DA0[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80184DA8[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80184DB0[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80184DB8[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80184DC0[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80184DC8[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80184DD0[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80184E84[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80184E8C[])(void); +extern void func_80169F00(void *a0); +extern char D_80184E3C[]; +extern char D_80184DFC[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80184EC4[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80184ED0[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80184F18[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80184ED8[]; + extern u8 D_80184EE8[]; + extern u8 D_801F72E8[]; + extern u8 D_801F7310[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80184ED8, D_801F72E8) + 3; + func_8001CE28(obj, D_801F72E8); + } else { + var_s3 = func_80024054(D_80184EE8, D_801F7310) + 9; + func_8001CE28(obj, D_801F7310); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80184F94[])(void); + +void func_8016B4BC(void *a0) { + D_80184F94[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801F7338; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801F7338); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80184F88[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80184F88; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80184FCC[]; +extern unsigned short D_80184FD4[]; +extern unsigned short D_80184FDC[]; +extern unsigned char D_801F7340[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801F7340 + param_2 * 0x40); + puVar3 = D_80184FCC[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80184FD4[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80184FDC[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801F7338; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801F7338, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80184FE4[])(void); + +void func_8016BBA4(void *a0) { + D_80184FE4[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801F7474; + extern u8 D_801F7475; + extern u8 D_801F7476; + extern M2C_UNK D_801F7478; + extern u8 D_801F7479; + extern u8 D_801F747A; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801F7474) = 0x20; + D_801F7475 = 0x20; + D_801F7476 = 0; + (*(u8 *)&D_801F7478) = 0xc0; + D_801F7479 = 0xc0; + D_801F747A = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801F7474; +extern M2C_UNK D_801F7478; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801F7474, &D_801F7478, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801F7475; + extern u8 D_801F7476; + extern u8 D_801F7479; + extern u8 D_801F747A; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801F7474); + if (*p1 != 0) *p1 -= 4; + if (D_801F7475 != 0) D_801F7475 -= 4; + if (D_801F7476 != 0) D_801F7476 -= 4; + p2 = &(*(u8 *)&D_801F7478); + if (*p2 != 0) *p2 -= 4; + if (D_801F7479 != 0) D_801F7479 -= 4; + if (D_801F747A != 0) D_801F747A -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801F7474), &(*(int *)&D_801F7478), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801F7400; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801F7400); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80184FF4; + extern s32 D_80184FFC; + extern s32 D_80185004; + extern s32 D_8018500C; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80184FF4, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80184FFC, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80185004, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_8018500C, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80185014[])(void); + +void func_8016C14C(void *a0) { + D_80185014[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801F747C[]; +extern u8 D_801F7484[]; +extern u8 D_801F7434[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801F747C, D_801F7484, D_801F7434); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801F7490[]; + extern u8 D_801F7550; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801F7490[1] = 0xff; + D_801F7490[2] = 0x10; + D_801F7490[0] = 0x10; + D_801F7490[6] = 0; + D_801F7490[5] = 0; + D_801F7490[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801F7490, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801F7550, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801F7490); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8016AB6C", func_8016C998); + + +extern void (*D_8018501C[])(void); + +void func_8016CB84(void *a0) { + D_8018501C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801F7550[]; + + + Blk_8016CF04_8016CF04 *p = &D_801F7550[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80185038[])(void); + +void func_8016D19C(void *a0) { + D_80185038[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80185040[])(void); + +void func_8016D428(void *a0) { + D_80185040[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_801850A8[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_801850A8[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_8018504C; +extern u8 D_80185058; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018504C, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80185058); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8016AB6C", func_8016DC20); + + +extern void (*D_801850DC[])(void); + +void func_8016DEA4(void *a0) { + D_801850DC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_801850E4[])(void); + +void func_8016DF20(void *a0) { + D_801850E4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80185138[])(void); + +void func_8016E5B8(void *a0) { + D_80185138[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_801850F8[4]; + extern s32 D_80185118; + extern s32 D_80185120; + extern s32 D_80185128; + extern s32 D_80185130; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_801850F8[0], pp, &tmp); + RotTransSV(&D_801850F8[1], &prim.v[1], &tmp); + RotTransSV(&D_801850F8[2], &prim.v[2], &tmp); + RotTransSV(&D_801850F8[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80185118; + prim.f1 = D_80185120; + prim.f2 = D_80185128; + prim.f3 = D_80185130; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80185178[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80185178[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_8018516C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_8018516C[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_8018515C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_8018515C[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018516C[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_8018516C[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_8018516C[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80185188; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80185188; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80185200[])(void); + +void func_8016F6E0(void *a0) { + D_80185200[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80185208[])(void); + +void func_8016F798(void *a0) { + D_80185208[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80185210[])(void); + +void func_8016F834(void *a0) { + D_80185210[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80185218[])(void); + +void func_8016F8E4(void *a0) { + D_80185218[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80185220[])(void); + +void func_8016F9C4(void *a0) { + D_80185220[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80185228[])(void); + +void func_8016FA84(void *a0) { + D_80185228[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80185234[])(void); + +void func_8016FB7C(void *a0) { + D_80185234[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80185240[])(void); + +void func_8016FC90(void *a0) { + D_80185240[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_8018524C[])(void); + +void func_8016FDB4(void *a0) { + D_8018524C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_8018525C[])(void); + +void func_8016FF30(void *a0) { + D_8018525C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_8018526C[])(void); + +void func_8016FFDC(void *a0) { + D_8018526C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80185274[])(void); + +void func_80170150(void *a0) { + D_80185274[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_8018527C[])(void); + +void func_80170240(void *a0) { + D_8018527C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80185284[])(void); + +void func_801702FC(void *a0) { + D_80185284[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_8018528C[])(void); + +void func_801703E0(void *a0) { + D_8018528C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80185294[])(void); + +void func_801704B0(void *a0) { + D_80185294[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_8018529C[])(void); + +void func_80170548(void *a0) { + D_8018529C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_801852A4[])(void); + +void func_801705F8(void *a0) { + D_801852A4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_801852AC[])(void); + +void func_801706AC(void *a0) { + D_801852AC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_801852B4[])(void); + +void func_80170748(void *a0) { + D_801852B4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_801852BC[])(void); + +void func_80170810(void *a0) { + D_801852BC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_801852C4[])(void); + +void func_80170AD8(void *a0) { + D_801852C4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_801852CC[])(void); + +void func_80170BD8(void *a0) { + D_801852CC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_801852D4[])(void); + +void func_80170C74(void *a0) { + D_801852D4[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8016AB6C", func_80170CF0); + + +extern void (*D_801852DC[])(void); + +void func_80170D68(void *a0) { + D_801852DC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_801852E4[])(void); + +void func_80170E34(void *a0) { + D_801852E4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_801852EC[])(void); + +void func_80170EFC(void *a0) { + D_801852EC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_801852F4[])(void); + +void func_80170FB0(void *a0) { + D_801852F4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_801852FC[])(void); + +void func_80171064(void *a0) { + D_801852FC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80185304[])(void); + +void func_80171120(void *a0) { + D_80185304[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_8018530C[])(void); + +void func_801711C0(void *a0) { + D_8018530C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80185314[])(void); + +void func_80171260(void *a0) { + D_80185314[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_8018531C[])(void); + +void func_801714E4(void *a0) { + D_8018531C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8016AB6C", func_80172C50); + + +extern void (*D_80185360[])(void); + +void func_80172CA0(void *a0) { + D_80185360[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80185324; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80185324); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC06_008/ov_SC06_008_jr_8015AE2C.c b/src/ov_SC06_008/ov_SC06_008_jr_8015AE2C.c index a15af230c..0d0aad5a9 100644 --- a/src/ov_SC06_008/ov_SC06_008_jr_8015AE2C.c +++ b/src/ov_SC06_008/ov_SC06_008_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_80188980[])(void); void func_8016AB30(void *a0) { D_80188980[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_801889FC[])(void); - -void func_8016B4BC(void *a0) { - D_801889FC[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801A92B8; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801A92B8); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_801889F0[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_801889F0; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80188A34[]; -extern unsigned short D_80188A3C[]; -extern unsigned short D_80188A44[]; -extern unsigned char D_801A92C0[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801A92C0 + param_2 * 0x40); - puVar3 = D_80188A34[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80188A3C[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80188A44[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801A92B8; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801A92B8, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80188A4C[])(void); - -void func_8016BBA4(void *a0) { - D_80188A4C[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801A93F4; - extern u8 D_801A93F5; - extern u8 D_801A93F6; - extern M2C_UNK D_801A93F8; - extern u8 D_801A93F9; - extern u8 D_801A93FA; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801A93F4) = 0x20; - D_801A93F5 = 0x20; - D_801A93F6 = 0; - (*(u8 *)&D_801A93F8) = 0xc0; - D_801A93F9 = 0xc0; - D_801A93FA = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801A93F4; -extern M2C_UNK D_801A93F8; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801A93F4, &D_801A93F8, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801A93F5; - extern u8 D_801A93F6; - extern u8 D_801A93F9; - extern u8 D_801A93FA; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801A93F4); - if (*p1 != 0) *p1 -= 4; - if (D_801A93F5 != 0) D_801A93F5 -= 4; - if (D_801A93F6 != 0) D_801A93F6 -= 4; - p2 = &(*(u8 *)&D_801A93F8); - if (*p2 != 0) *p2 -= 4; - if (D_801A93F9 != 0) D_801A93F9 -= 4; - if (D_801A93FA != 0) D_801A93FA -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801A93F4), &(*(int *)&D_801A93F8), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801A9380; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801A9380); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80188A5C; - extern s32 D_80188A64; - extern s32 D_80188A6C; - extern s32 D_80188A74; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80188A5C, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80188A64, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80188A6C, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80188A74, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80188A7C[])(void); - -void func_8016C14C(void *a0) { - D_80188A7C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801A93FC[]; -extern u8 D_801A9404[]; -extern u8 D_801A93B4[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801A93FC, D_801A9404, D_801A93B4); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801A9410[]; - extern u8 D_801A94D0; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801A9410[1] = 0xff; - D_801A9410[2] = 0x10; - D_801A9410[0] = 0x10; - D_801A9410[6] = 0; - D_801A9410[5] = 0; - D_801A9410[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801A9410, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801A94D0, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801A9410); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8015AE2C", func_8016C998); - - -extern void (*D_80188A84[])(void); - -void func_8016CB84(void *a0) { - D_80188A84[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801A94D0[]; - - - Blk_8016CF04_8016CF04 *p = &D_801A94D0[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80188AA0[])(void); - -void func_8016D19C(void *a0) { - D_80188AA0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80188AA8[])(void); - -void func_8016D428(void *a0) { - D_80188AA8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80188B10[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80188B10[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80188AB4; -extern u8 D_80188AC0; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80188AB4, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80188AC0); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80188B44[])(void); - -void func_8016DEA4(void *a0) { - D_80188B44[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80188B4C[])(void); - -void func_8016DF20(void *a0) { - D_80188B4C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80188BA0[])(void); - -void func_8016E5B8(void *a0) { - D_80188BA0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80188B60[4]; - extern s32 D_80188B80; - extern s32 D_80188B88; - extern s32 D_80188B90; - extern s32 D_80188B98; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80188B60[0], pp, &tmp); - RotTransSV(&D_80188B60[1], &prim.v[1], &tmp); - RotTransSV(&D_80188B60[2], &prim.v[2], &tmp); - RotTransSV(&D_80188B60[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80188B80; - prim.f1 = D_80188B88; - prim.f2 = D_80188B90; - prim.f3 = D_80188B98; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80188BE0[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80188BE0[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80188BD4[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80188BD4[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80188BC4[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80188BC4[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80188BD4[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80188BD4[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80188BD4[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80188BF0; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80188BF0; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80188C68[])(void); - -void func_8016F6E0(void *a0) { - D_80188C68[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80188C70[])(void); - -void func_8016F798(void *a0) { - D_80188C70[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80188C78[])(void); - -void func_8016F834(void *a0) { - D_80188C78[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80188C80[])(void); - -void func_8016F8E4(void *a0) { - D_80188C80[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80188C88[])(void); - -void func_8016F9C4(void *a0) { - D_80188C88[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80188C90[])(void); - -void func_8016FA84(void *a0) { - D_80188C90[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80188C9C[])(void); - -void func_8016FB7C(void *a0) { - D_80188C9C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80188CA8[])(void); - -void func_8016FC90(void *a0) { - D_80188CA8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80188CB4[])(void); - -void func_8016FDB4(void *a0) { - D_80188CB4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80188CC4[])(void); - -void func_8016FF30(void *a0) { - D_80188CC4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80188CD4[])(void); - -void func_8016FFDC(void *a0) { - D_80188CD4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80188CDC[])(void); - -void func_80170150(void *a0) { - D_80188CDC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80188CE4[])(void); - -void func_80170240(void *a0) { - D_80188CE4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80188CEC[])(void); - -void func_801702FC(void *a0) { - D_80188CEC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80188CF4[])(void); - -void func_801703E0(void *a0) { - D_80188CF4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80188CFC[])(void); - -void func_801704B0(void *a0) { - D_80188CFC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80188D04[])(void); - -void func_80170548(void *a0) { - D_80188D04[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80188D0C[])(void); - -void func_801705F8(void *a0) { - D_80188D0C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80188D14[])(void); - -void func_801706AC(void *a0) { - D_80188D14[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80188D1C[])(void); - -void func_80170748(void *a0) { - D_80188D1C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80188D24[])(void); - -void func_80170810(void *a0) { - D_80188D24[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80188D2C[])(void); - -void func_80170AD8(void *a0) { - D_80188D2C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80188D34[])(void); - -void func_80170BD8(void *a0) { - D_80188D34[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80188D3C[])(void); - -void func_80170C74(void *a0) { - D_80188D3C[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80188D44[])(void); - -void func_80170D68(void *a0) { - D_80188D44[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80188D4C[])(void); - -void func_80170E34(void *a0) { - D_80188D4C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80188D54[])(void); - -void func_80170EFC(void *a0) { - D_80188D54[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80188D5C[])(void); - -void func_80170FB0(void *a0) { - D_80188D5C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80188D64[])(void); - -void func_80171064(void *a0) { - D_80188D64[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80188D6C[])(void); - -void func_80171120(void *a0) { - D_80188D6C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80188D74[])(void); - -void func_801711C0(void *a0) { - D_80188D74[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80188D7C[])(void); - -void func_80171260(void *a0) { - D_80188D7C[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80188D84[])(void); - -void func_801714E4(void *a0) { - D_80188D84[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8015AE2C", func_80172C50); - - -extern void (*D_80188DC8[])(void); - -void func_80172CA0(void *a0) { - D_80188DC8[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80188D8C; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80188D8C); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC06_008/ov_SC06_008_jr_8016AB6C.c b/src/ov_SC06_008/ov_SC06_008_jr_8016AB6C.c new file mode 100644 index 000000000..fe40b8cbb --- /dev/null +++ b/src/ov_SC06_008/ov_SC06_008_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80187D4C; +extern u8 D_80187CBC; +extern u8 D_80187C98; +extern u8 D_80187C74; +extern u8 D_80187D28; +extern u8 D_80187D04; +extern u8 D_80187CE0; +extern u8 D_80187C50; +extern void func_80145934(void); +extern u8 D_80187DDC; +extern u8 D_80187DB8; +extern u8 D_80187D94; +extern u8 D_80187D70; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801871D4[]; +extern unsigned char D_80187204[]; +extern unsigned char D_80187254[]; +extern unsigned char D_80187284[]; +extern unsigned char D_801872B4[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80187304[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801873CC[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80187454[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018745C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801A8E48; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801A8E4C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018748C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80187534[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80187558[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80187548; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018756C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80187578[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80187588[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801875A0[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80187590; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801875B4[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801875D0[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801875C0; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801875E4[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801875F8[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018760C; +extern void (*D_80187634[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80187614; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80187680[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80187684[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80187AE8[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80187AF8[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801A8E80; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80187B20[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80187B00; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80187B10; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80187B60[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80187B68[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80187B34; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80187B74[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80187B44; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801A8E88; +extern s32 D_801A8E94; +extern s32 D_801A8E98; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80187BB0[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80187B84[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801A8E90; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80187E00[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80187C20[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80187EA4[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80187FF8[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80187E14; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80188000[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80187E24; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80187E44; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80188008[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80188030[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_8018803C[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80187EB0[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_801880E0; +extern void func_8015D380(s32 a0); +extern unsigned char D_801871C4[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_801880F4[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80188130[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80188178; +extern u16 D_8018817A; +extern u16 D_8018817C; +extern s32 D_80188180; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80188188; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80187E94; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_8018820C[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_801882BC[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_801882EC[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80188350; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801A8EA0[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80188374[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801A8EF8[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_801883BC[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_801883AC; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801A8770[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_801883C4[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80188418[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_801883E0; +extern s16 D_80188414; +extern s16 D_80188412; +extern s16 D_80188410; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80188424[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801A8F58; +extern u8 D_801A8F59; +extern u8 D_801A8F5A; +extern u8 D_801A8F5B; +extern u8 D_801A8F5C; +extern u8 D_801A8F5D; +extern u8 D_801A8F5E; +extern u8 D_801A8F5F; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80188434[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801A8F98; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80188478[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_801884F4[]; +extern s32 D_80188514[]; +extern u8 D_80188590[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_801885B0[]; +extern u8 D_801885D0[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_8018866C[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_801886E8[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801A8780; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_801886F4[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_801886FC[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_801887C4[])(void); +extern void func_80166618(void *a0); +extern void (*D_801887D4[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_801887E4[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_801887F0[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80188750[]; +extern u8 D_80188764[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80188808[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80188810[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80188818[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80188820[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80188828[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80188830[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80188838[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_801888EC[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_801888F4[])(void); +extern void func_80169F00(void *a0); +extern char D_801888A4[]; +extern char D_80188864[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_8018892C[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80188938[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80188980[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80188940[]; + extern u8 D_80188950[]; + extern u8 D_801A9268[]; + extern u8 D_801A9290[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80188940, D_801A9268) + 3; + func_8001CE28(obj, D_801A9268); + } else { + var_s3 = func_80024054(D_80188950, D_801A9290) + 9; + func_8001CE28(obj, D_801A9290); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_801889FC[])(void); + +void func_8016B4BC(void *a0) { + D_801889FC[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801A92B8; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801A92B8); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_801889F0[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_801889F0; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80188A34[]; +extern unsigned short D_80188A3C[]; +extern unsigned short D_80188A44[]; +extern unsigned char D_801A92C0[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801A92C0 + param_2 * 0x40); + puVar3 = D_80188A34[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80188A3C[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80188A44[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801A92B8; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801A92B8, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80188A4C[])(void); + +void func_8016BBA4(void *a0) { + D_80188A4C[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801A93F4; + extern u8 D_801A93F5; + extern u8 D_801A93F6; + extern M2C_UNK D_801A93F8; + extern u8 D_801A93F9; + extern u8 D_801A93FA; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801A93F4) = 0x20; + D_801A93F5 = 0x20; + D_801A93F6 = 0; + (*(u8 *)&D_801A93F8) = 0xc0; + D_801A93F9 = 0xc0; + D_801A93FA = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801A93F4; +extern M2C_UNK D_801A93F8; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801A93F4, &D_801A93F8, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801A93F5; + extern u8 D_801A93F6; + extern u8 D_801A93F9; + extern u8 D_801A93FA; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801A93F4); + if (*p1 != 0) *p1 -= 4; + if (D_801A93F5 != 0) D_801A93F5 -= 4; + if (D_801A93F6 != 0) D_801A93F6 -= 4; + p2 = &(*(u8 *)&D_801A93F8); + if (*p2 != 0) *p2 -= 4; + if (D_801A93F9 != 0) D_801A93F9 -= 4; + if (D_801A93FA != 0) D_801A93FA -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801A93F4), &(*(int *)&D_801A93F8), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801A9380; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801A9380); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80188A5C; + extern s32 D_80188A64; + extern s32 D_80188A6C; + extern s32 D_80188A74; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80188A5C, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80188A64, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80188A6C, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80188A74, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80188A7C[])(void); + +void func_8016C14C(void *a0) { + D_80188A7C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801A93FC[]; +extern u8 D_801A9404[]; +extern u8 D_801A93B4[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801A93FC, D_801A9404, D_801A93B4); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801A9410[]; + extern u8 D_801A94D0; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801A9410[1] = 0xff; + D_801A9410[2] = 0x10; + D_801A9410[0] = 0x10; + D_801A9410[6] = 0; + D_801A9410[5] = 0; + D_801A9410[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801A9410, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801A94D0, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801A9410); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8016AB6C", func_8016C998); + + +extern void (*D_80188A84[])(void); + +void func_8016CB84(void *a0) { + D_80188A84[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801A94D0[]; + + + Blk_8016CF04_8016CF04 *p = &D_801A94D0[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80188AA0[])(void); + +void func_8016D19C(void *a0) { + D_80188AA0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80188AA8[])(void); + +void func_8016D428(void *a0) { + D_80188AA8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80188B10[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80188B10[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80188AB4; +extern u8 D_80188AC0; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80188AB4, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80188AC0); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80188B44[])(void); + +void func_8016DEA4(void *a0) { + D_80188B44[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80188B4C[])(void); + +void func_8016DF20(void *a0) { + D_80188B4C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80188BA0[])(void); + +void func_8016E5B8(void *a0) { + D_80188BA0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80188B60[4]; + extern s32 D_80188B80; + extern s32 D_80188B88; + extern s32 D_80188B90; + extern s32 D_80188B98; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80188B60[0], pp, &tmp); + RotTransSV(&D_80188B60[1], &prim.v[1], &tmp); + RotTransSV(&D_80188B60[2], &prim.v[2], &tmp); + RotTransSV(&D_80188B60[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80188B80; + prim.f1 = D_80188B88; + prim.f2 = D_80188B90; + prim.f3 = D_80188B98; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80188BE0[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80188BE0[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80188BD4[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80188BD4[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80188BC4[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80188BC4[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80188BD4[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80188BD4[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80188BD4[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80188BF0; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80188BF0; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80188C68[])(void); + +void func_8016F6E0(void *a0) { + D_80188C68[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80188C70[])(void); + +void func_8016F798(void *a0) { + D_80188C70[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80188C78[])(void); + +void func_8016F834(void *a0) { + D_80188C78[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80188C80[])(void); + +void func_8016F8E4(void *a0) { + D_80188C80[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80188C88[])(void); + +void func_8016F9C4(void *a0) { + D_80188C88[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80188C90[])(void); + +void func_8016FA84(void *a0) { + D_80188C90[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80188C9C[])(void); + +void func_8016FB7C(void *a0) { + D_80188C9C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80188CA8[])(void); + +void func_8016FC90(void *a0) { + D_80188CA8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80188CB4[])(void); + +void func_8016FDB4(void *a0) { + D_80188CB4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80188CC4[])(void); + +void func_8016FF30(void *a0) { + D_80188CC4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80188CD4[])(void); + +void func_8016FFDC(void *a0) { + D_80188CD4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80188CDC[])(void); + +void func_80170150(void *a0) { + D_80188CDC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80188CE4[])(void); + +void func_80170240(void *a0) { + D_80188CE4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80188CEC[])(void); + +void func_801702FC(void *a0) { + D_80188CEC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80188CF4[])(void); + +void func_801703E0(void *a0) { + D_80188CF4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80188CFC[])(void); + +void func_801704B0(void *a0) { + D_80188CFC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80188D04[])(void); + +void func_80170548(void *a0) { + D_80188D04[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80188D0C[])(void); + +void func_801705F8(void *a0) { + D_80188D0C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80188D14[])(void); + +void func_801706AC(void *a0) { + D_80188D14[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80188D1C[])(void); + +void func_80170748(void *a0) { + D_80188D1C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80188D24[])(void); + +void func_80170810(void *a0) { + D_80188D24[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80188D2C[])(void); + +void func_80170AD8(void *a0) { + D_80188D2C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80188D34[])(void); + +void func_80170BD8(void *a0) { + D_80188D34[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80188D3C[])(void); + +void func_80170C74(void *a0) { + D_80188D3C[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80188D44[])(void); + +void func_80170D68(void *a0) { + D_80188D44[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80188D4C[])(void); + +void func_80170E34(void *a0) { + D_80188D4C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80188D54[])(void); + +void func_80170EFC(void *a0) { + D_80188D54[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80188D5C[])(void); + +void func_80170FB0(void *a0) { + D_80188D5C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80188D64[])(void); + +void func_80171064(void *a0) { + D_80188D64[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80188D6C[])(void); + +void func_80171120(void *a0) { + D_80188D6C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80188D74[])(void); + +void func_801711C0(void *a0) { + D_80188D74[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80188D7C[])(void); + +void func_80171260(void *a0) { + D_80188D7C[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80188D84[])(void); + +void func_801714E4(void *a0) { + D_80188D84[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8016AB6C", func_80172C50); + + +extern void (*D_80188DC8[])(void); + +void func_80172CA0(void *a0) { + D_80188DC8[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80188D8C; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80188D8C); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC06_010/ov_SC06_010_jr_8015AE2C.c b/src/ov_SC06_010/ov_SC06_010_jr_8015AE2C.c index eb05a38df..2bb4190df 100644 --- a/src/ov_SC06_010/ov_SC06_010_jr_8015AE2C.c +++ b/src/ov_SC06_010/ov_SC06_010_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_80189B5C[])(void); void func_8016AB30(void *a0) { D_80189B5C[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80189BD8[])(void); - -void func_8016B4BC(void *a0) { - D_80189BD8[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801B12F0; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801B12F0); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80189BCC[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80189BCC; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80189C10[]; -extern unsigned short D_80189C18[]; -extern unsigned short D_80189C20[]; -extern unsigned char D_801B12F8[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801B12F8 + param_2 * 0x40); - puVar3 = D_80189C10[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80189C18[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80189C20[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801B12F0; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801B12F0, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80189C28[])(void); - -void func_8016BBA4(void *a0) { - D_80189C28[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801B142C; - extern u8 D_801B142D; - extern u8 D_801B142E; - extern M2C_UNK D_801B1430; - extern u8 D_801B1431; - extern u8 D_801B1432; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801B142C) = 0x20; - D_801B142D = 0x20; - D_801B142E = 0; - (*(u8 *)&D_801B1430) = 0xc0; - D_801B1431 = 0xc0; - D_801B1432 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801B142C; -extern M2C_UNK D_801B1430; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801B142C, &D_801B1430, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801B142D; - extern u8 D_801B142E; - extern u8 D_801B1431; - extern u8 D_801B1432; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801B142C); - if (*p1 != 0) *p1 -= 4; - if (D_801B142D != 0) D_801B142D -= 4; - if (D_801B142E != 0) D_801B142E -= 4; - p2 = &(*(u8 *)&D_801B1430); - if (*p2 != 0) *p2 -= 4; - if (D_801B1431 != 0) D_801B1431 -= 4; - if (D_801B1432 != 0) D_801B1432 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801B142C), &(*(int *)&D_801B1430), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801B13B8; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801B13B8); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80189C38; - extern s32 D_80189C40; - extern s32 D_80189C48; - extern s32 D_80189C50; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80189C38, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80189C40, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80189C48, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80189C50, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80189C58[])(void); - -void func_8016C14C(void *a0) { - D_80189C58[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801B1434[]; -extern u8 D_801B143C[]; -extern u8 D_801B13EC[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801B1434, D_801B143C, D_801B13EC); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801B1448[]; - extern u8 D_801B1508; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801B1448[1] = 0xff; - D_801B1448[2] = 0x10; - D_801B1448[0] = 0x10; - D_801B1448[6] = 0; - D_801B1448[5] = 0; - D_801B1448[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801B1448, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801B1508, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801B1448); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8015AE2C", func_8016C998); - - -extern void (*D_80189C60[])(void); - -void func_8016CB84(void *a0) { - D_80189C60[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801B1508[]; - - - Blk_8016CF04_8016CF04 *p = &D_801B1508[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80189C7C[])(void); - -void func_8016D19C(void *a0) { - D_80189C7C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80189C84[])(void); - -void func_8016D428(void *a0) { - D_80189C84[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80189CEC[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80189CEC[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80189C90; -extern u8 D_80189C9C; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80189C90, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80189C9C); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80189D20[])(void); - -void func_8016DEA4(void *a0) { - D_80189D20[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80189D28[])(void); - -void func_8016DF20(void *a0) { - D_80189D28[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80189D7C[])(void); - -void func_8016E5B8(void *a0) { - D_80189D7C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80189D3C[4]; - extern s32 D_80189D5C; - extern s32 D_80189D64; - extern s32 D_80189D6C; - extern s32 D_80189D74; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80189D3C[0], pp, &tmp); - RotTransSV(&D_80189D3C[1], &prim.v[1], &tmp); - RotTransSV(&D_80189D3C[2], &prim.v[2], &tmp); - RotTransSV(&D_80189D3C[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80189D5C; - prim.f1 = D_80189D64; - prim.f2 = D_80189D6C; - prim.f3 = D_80189D74; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80189DBC[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80189DBC[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80189DB0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80189DB0[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80189DA0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80189DA0[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80189DB0[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80189DB0[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80189DB0[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80189DCC; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80189DCC; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80189E44[])(void); - -void func_8016F6E0(void *a0) { - D_80189E44[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80189E4C[])(void); - -void func_8016F798(void *a0) { - D_80189E4C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80189E54[])(void); - -void func_8016F834(void *a0) { - D_80189E54[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80189E5C[])(void); - -void func_8016F8E4(void *a0) { - D_80189E5C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80189E64[])(void); - -void func_8016F9C4(void *a0) { - D_80189E64[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80189E6C[])(void); - -void func_8016FA84(void *a0) { - D_80189E6C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80189E78[])(void); - -void func_8016FB7C(void *a0) { - D_80189E78[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80189E84[])(void); - -void func_8016FC90(void *a0) { - D_80189E84[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80189E90[])(void); - -void func_8016FDB4(void *a0) { - D_80189E90[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80189EA0[])(void); - -void func_8016FF30(void *a0) { - D_80189EA0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80189EB0[])(void); - -void func_8016FFDC(void *a0) { - D_80189EB0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80189EB8[])(void); - -void func_80170150(void *a0) { - D_80189EB8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80189EC0[])(void); - -void func_80170240(void *a0) { - D_80189EC0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80189EC8[])(void); - -void func_801702FC(void *a0) { - D_80189EC8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80189ED0[])(void); - -void func_801703E0(void *a0) { - D_80189ED0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80189ED8[])(void); - -void func_801704B0(void *a0) { - D_80189ED8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80189EE0[])(void); - -void func_80170548(void *a0) { - D_80189EE0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80189EE8[])(void); - -void func_801705F8(void *a0) { - D_80189EE8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80189EF0[])(void); - -void func_801706AC(void *a0) { - D_80189EF0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80189EF8[])(void); - -void func_80170748(void *a0) { - D_80189EF8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80189F00[])(void); - -void func_80170810(void *a0) { - D_80189F00[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80189F08[])(void); - -void func_80170AD8(void *a0) { - D_80189F08[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80189F10[])(void); - -void func_80170BD8(void *a0) { - D_80189F10[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80189F18[])(void); - -void func_80170C74(void *a0) { - D_80189F18[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80189F20[])(void); - -void func_80170D68(void *a0) { - D_80189F20[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80189F28[])(void); - -void func_80170E34(void *a0) { - D_80189F28[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80189F30[])(void); - -void func_80170EFC(void *a0) { - D_80189F30[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80189F38[])(void); - -void func_80170FB0(void *a0) { - D_80189F38[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80189F40[])(void); - -void func_80171064(void *a0) { - D_80189F40[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80189F48[])(void); - -void func_80171120(void *a0) { - D_80189F48[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80189F50[])(void); - -void func_801711C0(void *a0) { - D_80189F50[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80189F58[])(void); - -void func_80171260(void *a0) { - D_80189F58[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80189F60[])(void); - -void func_801714E4(void *a0) { - D_80189F60[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8015AE2C", func_80172C50); - - -extern void (*D_80189FA4[])(void); - -void func_80172CA0(void *a0) { - D_80189FA4[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80189F68; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80189F68); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC06_010/ov_SC06_010_jr_8016AB6C.c b/src/ov_SC06_010/ov_SC06_010_jr_8016AB6C.c new file mode 100644 index 000000000..627cce5bb --- /dev/null +++ b/src/ov_SC06_010/ov_SC06_010_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80188F28; +extern u8 D_80188E98; +extern u8 D_80188E74; +extern u8 D_80188E50; +extern u8 D_80188F04; +extern u8 D_80188EE0; +extern u8 D_80188EBC; +extern u8 D_80188E2C; +extern void func_80145934(void); +extern u8 D_80188FB8; +extern u8 D_80188F94; +extern u8 D_80188F70; +extern u8 D_80188F4C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801883B0[]; +extern unsigned char D_801883E0[]; +extern unsigned char D_80188430[]; +extern unsigned char D_80188460[]; +extern unsigned char D_80188490[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801884E0[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801885A8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80188630[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80188638; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801B0E80; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801B0E84; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80188668; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80188710[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80188734[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80188724; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80188748[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80188754[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80188764[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018877C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018876C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80188790[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801887AC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018879C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801887C0[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801887D4[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801887E8; +extern void (*D_80188810[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801887F0; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018885C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80188860[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80188CC4[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80188CD4[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801B0EB8; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80188CFC[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80188CDC; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80188CEC; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80188D3C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80188D44[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80188D10; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80188D50[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80188D20; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801B0EC0; +extern s32 D_801B0ECC; +extern s32 D_801B0ED0; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80188D8C[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80188D60[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801B0EC8; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80188FDC[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80188DFC[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80189080[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_801891D4[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80188FF0; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_801891DC[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80189000; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80189020; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_801891E4[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_8018920C[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80189218[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_8018908C[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_801892BC; +extern void func_8015D380(s32 a0); +extern unsigned char D_801883A0[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_801892D0[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_8018930C[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80189354; +extern u16 D_80189356; +extern u16 D_80189358; +extern s32 D_8018935C; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80189364; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80189070; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_801893E8[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80189498[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_801894C8[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_8018952C; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801B0ED8[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80189550[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801B0F30[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80189598[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80189588; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801B07C4[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_801895A0[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_801895F4[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_801895BC; +extern s16 D_801895F0; +extern s16 D_801895EE; +extern s16 D_801895EC; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80189600[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801B0F90; +extern u8 D_801B0F91; +extern u8 D_801B0F92; +extern u8 D_801B0F93; +extern u8 D_801B0F94; +extern u8 D_801B0F95; +extern u8 D_801B0F96; +extern u8 D_801B0F97; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80189610[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801B0FD0; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80189654[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_801896D0[]; +extern s32 D_801896F0[]; +extern u8 D_8018976C[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_8018978C[]; +extern u8 D_801897AC[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80189848[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_801898C4[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801B07D4; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_801898D0[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_801898D8[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_801899A0[])(void); +extern void func_80166618(void *a0); +extern void (*D_801899B0[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_801899C0[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_801899CC[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_8018992C[]; +extern u8 D_80189940[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_801899E4[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_801899EC[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_801899F4[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_801899FC[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80189A04[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80189A0C[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80189A14[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80189AC8[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80189AD0[])(void); +extern void func_80169F00(void *a0); +extern char D_80189A80[]; +extern char D_80189A40[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80189B08[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80189B14[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80189B5C[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80189B1C[]; + extern u8 D_80189B2C[]; + extern u8 D_801B12A0[]; + extern u8 D_801B12C8[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80189B1C, D_801B12A0) + 3; + func_8001CE28(obj, D_801B12A0); + } else { + var_s3 = func_80024054(D_80189B2C, D_801B12C8) + 9; + func_8001CE28(obj, D_801B12C8); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80189BD8[])(void); + +void func_8016B4BC(void *a0) { + D_80189BD8[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801B12F0; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801B12F0); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80189BCC[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80189BCC; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80189C10[]; +extern unsigned short D_80189C18[]; +extern unsigned short D_80189C20[]; +extern unsigned char D_801B12F8[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801B12F8 + param_2 * 0x40); + puVar3 = D_80189C10[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80189C18[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80189C20[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801B12F0; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801B12F0, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80189C28[])(void); + +void func_8016BBA4(void *a0) { + D_80189C28[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801B142C; + extern u8 D_801B142D; + extern u8 D_801B142E; + extern M2C_UNK D_801B1430; + extern u8 D_801B1431; + extern u8 D_801B1432; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801B142C) = 0x20; + D_801B142D = 0x20; + D_801B142E = 0; + (*(u8 *)&D_801B1430) = 0xc0; + D_801B1431 = 0xc0; + D_801B1432 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801B142C; +extern M2C_UNK D_801B1430; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801B142C, &D_801B1430, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801B142D; + extern u8 D_801B142E; + extern u8 D_801B1431; + extern u8 D_801B1432; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801B142C); + if (*p1 != 0) *p1 -= 4; + if (D_801B142D != 0) D_801B142D -= 4; + if (D_801B142E != 0) D_801B142E -= 4; + p2 = &(*(u8 *)&D_801B1430); + if (*p2 != 0) *p2 -= 4; + if (D_801B1431 != 0) D_801B1431 -= 4; + if (D_801B1432 != 0) D_801B1432 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801B142C), &(*(int *)&D_801B1430), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801B13B8; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801B13B8); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80189C38; + extern s32 D_80189C40; + extern s32 D_80189C48; + extern s32 D_80189C50; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80189C38, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80189C40, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80189C48, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80189C50, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80189C58[])(void); + +void func_8016C14C(void *a0) { + D_80189C58[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801B1434[]; +extern u8 D_801B143C[]; +extern u8 D_801B13EC[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801B1434, D_801B143C, D_801B13EC); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801B1448[]; + extern u8 D_801B1508; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801B1448[1] = 0xff; + D_801B1448[2] = 0x10; + D_801B1448[0] = 0x10; + D_801B1448[6] = 0; + D_801B1448[5] = 0; + D_801B1448[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801B1448, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801B1508, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801B1448); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8016AB6C", func_8016C998); + + +extern void (*D_80189C60[])(void); + +void func_8016CB84(void *a0) { + D_80189C60[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801B1508[]; + + + Blk_8016CF04_8016CF04 *p = &D_801B1508[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80189C7C[])(void); + +void func_8016D19C(void *a0) { + D_80189C7C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80189C84[])(void); + +void func_8016D428(void *a0) { + D_80189C84[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80189CEC[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80189CEC[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80189C90; +extern u8 D_80189C9C; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80189C90, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80189C9C); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80189D20[])(void); + +void func_8016DEA4(void *a0) { + D_80189D20[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80189D28[])(void); + +void func_8016DF20(void *a0) { + D_80189D28[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80189D7C[])(void); + +void func_8016E5B8(void *a0) { + D_80189D7C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80189D3C[4]; + extern s32 D_80189D5C; + extern s32 D_80189D64; + extern s32 D_80189D6C; + extern s32 D_80189D74; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80189D3C[0], pp, &tmp); + RotTransSV(&D_80189D3C[1], &prim.v[1], &tmp); + RotTransSV(&D_80189D3C[2], &prim.v[2], &tmp); + RotTransSV(&D_80189D3C[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80189D5C; + prim.f1 = D_80189D64; + prim.f2 = D_80189D6C; + prim.f3 = D_80189D74; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80189DBC[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80189DBC[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80189DB0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80189DB0[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80189DA0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80189DA0[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80189DB0[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80189DB0[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80189DB0[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80189DCC; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80189DCC; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80189E44[])(void); + +void func_8016F6E0(void *a0) { + D_80189E44[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80189E4C[])(void); + +void func_8016F798(void *a0) { + D_80189E4C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80189E54[])(void); + +void func_8016F834(void *a0) { + D_80189E54[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80189E5C[])(void); + +void func_8016F8E4(void *a0) { + D_80189E5C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80189E64[])(void); + +void func_8016F9C4(void *a0) { + D_80189E64[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80189E6C[])(void); + +void func_8016FA84(void *a0) { + D_80189E6C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80189E78[])(void); + +void func_8016FB7C(void *a0) { + D_80189E78[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80189E84[])(void); + +void func_8016FC90(void *a0) { + D_80189E84[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80189E90[])(void); + +void func_8016FDB4(void *a0) { + D_80189E90[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80189EA0[])(void); + +void func_8016FF30(void *a0) { + D_80189EA0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80189EB0[])(void); + +void func_8016FFDC(void *a0) { + D_80189EB0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80189EB8[])(void); + +void func_80170150(void *a0) { + D_80189EB8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80189EC0[])(void); + +void func_80170240(void *a0) { + D_80189EC0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80189EC8[])(void); + +void func_801702FC(void *a0) { + D_80189EC8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80189ED0[])(void); + +void func_801703E0(void *a0) { + D_80189ED0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80189ED8[])(void); + +void func_801704B0(void *a0) { + D_80189ED8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80189EE0[])(void); + +void func_80170548(void *a0) { + D_80189EE0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80189EE8[])(void); + +void func_801705F8(void *a0) { + D_80189EE8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80189EF0[])(void); + +void func_801706AC(void *a0) { + D_80189EF0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80189EF8[])(void); + +void func_80170748(void *a0) { + D_80189EF8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80189F00[])(void); + +void func_80170810(void *a0) { + D_80189F00[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80189F08[])(void); + +void func_80170AD8(void *a0) { + D_80189F08[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80189F10[])(void); + +void func_80170BD8(void *a0) { + D_80189F10[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80189F18[])(void); + +void func_80170C74(void *a0) { + D_80189F18[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80189F20[])(void); + +void func_80170D68(void *a0) { + D_80189F20[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80189F28[])(void); + +void func_80170E34(void *a0) { + D_80189F28[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80189F30[])(void); + +void func_80170EFC(void *a0) { + D_80189F30[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80189F38[])(void); + +void func_80170FB0(void *a0) { + D_80189F38[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80189F40[])(void); + +void func_80171064(void *a0) { + D_80189F40[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80189F48[])(void); + +void func_80171120(void *a0) { + D_80189F48[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80189F50[])(void); + +void func_801711C0(void *a0) { + D_80189F50[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80189F58[])(void); + +void func_80171260(void *a0) { + D_80189F58[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80189F60[])(void); + +void func_801714E4(void *a0) { + D_80189F60[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8016AB6C", func_80172C50); + + +extern void (*D_80189FA4[])(void); + +void func_80172CA0(void *a0) { + D_80189FA4[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80189F68; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80189F68); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC06_011/ov_SC06_011_jr_8015AE2C.c b/src/ov_SC06_011/ov_SC06_011_jr_8015AE2C.c index 7050ea406..79ebc237b 100644 --- a/src/ov_SC06_011/ov_SC06_011_jr_8015AE2C.c +++ b/src/ov_SC06_011/ov_SC06_011_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_801835BC[])(void); void func_8016AB30(void *a0) { D_801835BC[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80183638[])(void); - -void func_8016B4BC(void *a0) { - D_80183638[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801AAEA0; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801AAEA0); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_8018362C[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_8018362C; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80183670[]; -extern unsigned short D_80183678[]; -extern unsigned short D_80183680[]; -extern unsigned char D_801AAEA8[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801AAEA8 + param_2 * 0x40); - puVar3 = D_80183670[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80183678[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80183680[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801AAEA0; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801AAEA0, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80183688[])(void); - -void func_8016BBA4(void *a0) { - D_80183688[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801AAFDC; - extern u8 D_801AAFDD; - extern u8 D_801AAFDE; - extern M2C_UNK D_801AAFE0; - extern u8 D_801AAFE1; - extern u8 D_801AAFE2; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801AAFDC) = 0x20; - D_801AAFDD = 0x20; - D_801AAFDE = 0; - (*(u8 *)&D_801AAFE0) = 0xc0; - D_801AAFE1 = 0xc0; - D_801AAFE2 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801AAFDC; -extern M2C_UNK D_801AAFE0; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801AAFDC, &D_801AAFE0, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801AAFDD; - extern u8 D_801AAFDE; - extern u8 D_801AAFE1; - extern u8 D_801AAFE2; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801AAFDC); - if (*p1 != 0) *p1 -= 4; - if (D_801AAFDD != 0) D_801AAFDD -= 4; - if (D_801AAFDE != 0) D_801AAFDE -= 4; - p2 = &(*(u8 *)&D_801AAFE0); - if (*p2 != 0) *p2 -= 4; - if (D_801AAFE1 != 0) D_801AAFE1 -= 4; - if (D_801AAFE2 != 0) D_801AAFE2 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801AAFDC), &(*(int *)&D_801AAFE0), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801AAF68; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801AAF68); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80183698; - extern s32 D_801836A0; - extern s32 D_801836A8; - extern s32 D_801836B0; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80183698, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_801836A0, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_801836A8, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_801836B0, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_801836B8[])(void); - -void func_8016C14C(void *a0) { - D_801836B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801AAFE4[]; -extern u8 D_801AAFEC[]; -extern u8 D_801AAF9C[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801AAFE4, D_801AAFEC, D_801AAF9C); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801AAFF8[]; - extern u8 D_801AB0B8; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801AAFF8[1] = 0xff; - D_801AAFF8[2] = 0x10; - D_801AAFF8[0] = 0x10; - D_801AAFF8[6] = 0; - D_801AAFF8[5] = 0; - D_801AAFF8[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801AAFF8, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801AB0B8, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801AAFF8); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8015AE2C", func_8016C998); - - -extern void (*D_801836C0[])(void); - -void func_8016CB84(void *a0) { - D_801836C0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801AB0B8[]; - - - Blk_8016CF04_8016CF04 *p = &D_801AB0B8[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_801836DC[])(void); - -void func_8016D19C(void *a0) { - D_801836DC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_801836E4[])(void); - -void func_8016D428(void *a0) { - D_801836E4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_8018374C[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_8018374C[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_801836F0; -extern u8 D_801836FC; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801836F0, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801836FC); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80183780[])(void); - -void func_8016DEA4(void *a0) { - D_80183780[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80183788[])(void); - -void func_8016DF20(void *a0) { - D_80183788[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_801837DC[])(void); - -void func_8016E5B8(void *a0) { - D_801837DC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_8018379C[4]; - extern s32 D_801837BC; - extern s32 D_801837C4; - extern s32 D_801837CC; - extern s32 D_801837D4; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_8018379C[0], pp, &tmp); - RotTransSV(&D_8018379C[1], &prim.v[1], &tmp); - RotTransSV(&D_8018379C[2], &prim.v[2], &tmp); - RotTransSV(&D_8018379C[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_801837BC; - prim.f1 = D_801837C4; - prim.f2 = D_801837CC; - prim.f3 = D_801837D4; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_8018381C[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_8018381C[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80183810[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80183810[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80183800[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80183800[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80183810[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80183810[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80183810[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_8018382C; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_8018382C; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_801838A4[])(void); - -void func_8016F6E0(void *a0) { - D_801838A4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_801838AC[])(void); - -void func_8016F798(void *a0) { - D_801838AC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_801838B4[])(void); - -void func_8016F834(void *a0) { - D_801838B4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_801838BC[])(void); - -void func_8016F8E4(void *a0) { - D_801838BC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_801838C4[])(void); - -void func_8016F9C4(void *a0) { - D_801838C4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_801838CC[])(void); - -void func_8016FA84(void *a0) { - D_801838CC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_801838D8[])(void); - -void func_8016FB7C(void *a0) { - D_801838D8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_801838E4[])(void); - -void func_8016FC90(void *a0) { - D_801838E4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_801838F0[])(void); - -void func_8016FDB4(void *a0) { - D_801838F0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80183900[])(void); - -void func_8016FF30(void *a0) { - D_80183900[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80183910[])(void); - -void func_8016FFDC(void *a0) { - D_80183910[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80183918[])(void); - -void func_80170150(void *a0) { - D_80183918[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80183920[])(void); - -void func_80170240(void *a0) { - D_80183920[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80183928[])(void); - -void func_801702FC(void *a0) { - D_80183928[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80183930[])(void); - -void func_801703E0(void *a0) { - D_80183930[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80183938[])(void); - -void func_801704B0(void *a0) { - D_80183938[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80183940[])(void); - -void func_80170548(void *a0) { - D_80183940[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80183948[])(void); - -void func_801705F8(void *a0) { - D_80183948[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80183950[])(void); - -void func_801706AC(void *a0) { - D_80183950[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80183958[])(void); - -void func_80170748(void *a0) { - D_80183958[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80183960[])(void); - -void func_80170810(void *a0) { - D_80183960[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80183968[])(void); - -void func_80170AD8(void *a0) { - D_80183968[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80183970[])(void); - -void func_80170BD8(void *a0) { - D_80183970[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80183978[])(void); - -void func_80170C74(void *a0) { - D_80183978[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80183980[])(void); - -void func_80170D68(void *a0) { - D_80183980[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80183988[])(void); - -void func_80170E34(void *a0) { - D_80183988[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80183990[])(void); - -void func_80170EFC(void *a0) { - D_80183990[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80183998[])(void); - -void func_80170FB0(void *a0) { - D_80183998[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_801839A0[])(void); - -void func_80171064(void *a0) { - D_801839A0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_801839A8[])(void); - -void func_80171120(void *a0) { - D_801839A8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_801839B0[])(void); - -void func_801711C0(void *a0) { - D_801839B0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_801839B8[])(void); - -void func_80171260(void *a0) { - D_801839B8[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_801839C0[])(void); - -void func_801714E4(void *a0) { - D_801839C0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8015AE2C", func_80172C50); - - -extern void (*D_80183A04[])(void); - -void func_80172CA0(void *a0) { - D_80183A04[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_801839C8; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_801839C8); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC06_011/ov_SC06_011_jr_8016AB6C.c b/src/ov_SC06_011/ov_SC06_011_jr_8016AB6C.c new file mode 100644 index 000000000..e2e7fc1dd --- /dev/null +++ b/src/ov_SC06_011/ov_SC06_011_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80182988; +extern u8 D_801828F8; +extern u8 D_801828D4; +extern u8 D_801828B0; +extern u8 D_80182964; +extern u8 D_80182940; +extern u8 D_8018291C; +extern u8 D_8018288C; +extern void func_80145934(void); +extern u8 D_80182A18; +extern u8 D_801829F4; +extern u8 D_801829D0; +extern u8 D_801829AC; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80181E10[]; +extern unsigned char D_80181E40[]; +extern unsigned char D_80181E90[]; +extern unsigned char D_80181EC0[]; +extern unsigned char D_80181EF0[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80181F40[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80182008[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80182090[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80182098; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801AAA30; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801AAA34; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801820C8; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80182170[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80182194[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80182184; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801821A8[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801821B4[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801821C4[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801821DC[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801821CC; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801821F0[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018220C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801821FC; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80182220[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80182234[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80182248; +extern void (*D_80182270[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80182250; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801822BC[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801822C0[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80182724[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80182734[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801AAA68; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018275C[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018273C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018274C; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018279C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801827A4[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80182770; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801827B0[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80182780; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801AAA70; +extern s32 D_801AAA7C; +extern s32 D_801AAA80; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801827EC[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801827C0[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801AAA78; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80182A3C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018285C[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80182AE0[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80182C34[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80182A50; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80182C3C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80182A60; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80182A80; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80182C44[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80182C6C[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80182C78[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80182AEC[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80182D1C; +extern void func_8015D380(s32 a0); +extern unsigned char D_80181E00[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80182D30[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80182D6C[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80182DB4; +extern u16 D_80182DB6; +extern u16 D_80182DB8; +extern s32 D_80182DBC; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80182DC4; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80182AD0; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80182E48[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80182EF8[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80182F28[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80182F8C; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801AAA88[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80182FB0[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801AAAE0[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80182FF8[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80182FE8; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801AA324[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80183000[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80183054[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_8018301C; +extern s16 D_80183050; +extern s16 D_8018304E; +extern s16 D_8018304C; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80183060[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801AAB40; +extern u8 D_801AAB41; +extern u8 D_801AAB42; +extern u8 D_801AAB43; +extern u8 D_801AAB44; +extern u8 D_801AAB45; +extern u8 D_801AAB46; +extern u8 D_801AAB47; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80183070[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801AAB80; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_801830B4[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80183130[]; +extern s32 D_80183150[]; +extern u8 D_801831CC[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_801831EC[]; +extern u8 D_8018320C[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_801832A8[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80183324[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801AA334; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80183330[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80183338[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80183400[])(void); +extern void func_80166618(void *a0); +extern void (*D_80183410[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80183420[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_8018342C[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_8018338C[]; +extern u8 D_801833A0[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80183444[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_8018344C[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80183454[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_8018345C[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80183464[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_8018346C[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80183474[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80183528[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80183530[])(void); +extern void func_80169F00(void *a0); +extern char D_801834E0[]; +extern char D_801834A0[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80183568[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80183574[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_801835BC[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_8018357C[]; + extern u8 D_8018358C[]; + extern u8 D_801AAE50[]; + extern u8 D_801AAE78[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_8018357C, D_801AAE50) + 3; + func_8001CE28(obj, D_801AAE50); + } else { + var_s3 = func_80024054(D_8018358C, D_801AAE78) + 9; + func_8001CE28(obj, D_801AAE78); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80183638[])(void); + +void func_8016B4BC(void *a0) { + D_80183638[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801AAEA0; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801AAEA0); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_8018362C[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_8018362C; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80183670[]; +extern unsigned short D_80183678[]; +extern unsigned short D_80183680[]; +extern unsigned char D_801AAEA8[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801AAEA8 + param_2 * 0x40); + puVar3 = D_80183670[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80183678[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80183680[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801AAEA0; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801AAEA0, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80183688[])(void); + +void func_8016BBA4(void *a0) { + D_80183688[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801AAFDC; + extern u8 D_801AAFDD; + extern u8 D_801AAFDE; + extern M2C_UNK D_801AAFE0; + extern u8 D_801AAFE1; + extern u8 D_801AAFE2; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801AAFDC) = 0x20; + D_801AAFDD = 0x20; + D_801AAFDE = 0; + (*(u8 *)&D_801AAFE0) = 0xc0; + D_801AAFE1 = 0xc0; + D_801AAFE2 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801AAFDC; +extern M2C_UNK D_801AAFE0; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801AAFDC, &D_801AAFE0, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801AAFDD; + extern u8 D_801AAFDE; + extern u8 D_801AAFE1; + extern u8 D_801AAFE2; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801AAFDC); + if (*p1 != 0) *p1 -= 4; + if (D_801AAFDD != 0) D_801AAFDD -= 4; + if (D_801AAFDE != 0) D_801AAFDE -= 4; + p2 = &(*(u8 *)&D_801AAFE0); + if (*p2 != 0) *p2 -= 4; + if (D_801AAFE1 != 0) D_801AAFE1 -= 4; + if (D_801AAFE2 != 0) D_801AAFE2 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801AAFDC), &(*(int *)&D_801AAFE0), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801AAF68; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801AAF68); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80183698; + extern s32 D_801836A0; + extern s32 D_801836A8; + extern s32 D_801836B0; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80183698, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_801836A0, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_801836A8, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_801836B0, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_801836B8[])(void); + +void func_8016C14C(void *a0) { + D_801836B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801AAFE4[]; +extern u8 D_801AAFEC[]; +extern u8 D_801AAF9C[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801AAFE4, D_801AAFEC, D_801AAF9C); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801AAFF8[]; + extern u8 D_801AB0B8; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801AAFF8[1] = 0xff; + D_801AAFF8[2] = 0x10; + D_801AAFF8[0] = 0x10; + D_801AAFF8[6] = 0; + D_801AAFF8[5] = 0; + D_801AAFF8[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801AAFF8, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801AB0B8, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801AAFF8); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8016AB6C", func_8016C998); + + +extern void (*D_801836C0[])(void); + +void func_8016CB84(void *a0) { + D_801836C0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801AB0B8[]; + + + Blk_8016CF04_8016CF04 *p = &D_801AB0B8[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_801836DC[])(void); + +void func_8016D19C(void *a0) { + D_801836DC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_801836E4[])(void); + +void func_8016D428(void *a0) { + D_801836E4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018374C[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_8018374C[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_801836F0; +extern u8 D_801836FC; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801836F0, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801836FC); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80183780[])(void); + +void func_8016DEA4(void *a0) { + D_80183780[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80183788[])(void); + +void func_8016DF20(void *a0) { + D_80183788[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_801837DC[])(void); + +void func_8016E5B8(void *a0) { + D_801837DC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_8018379C[4]; + extern s32 D_801837BC; + extern s32 D_801837C4; + extern s32 D_801837CC; + extern s32 D_801837D4; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_8018379C[0], pp, &tmp); + RotTransSV(&D_8018379C[1], &prim.v[1], &tmp); + RotTransSV(&D_8018379C[2], &prim.v[2], &tmp); + RotTransSV(&D_8018379C[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_801837BC; + prim.f1 = D_801837C4; + prim.f2 = D_801837CC; + prim.f3 = D_801837D4; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_8018381C[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_8018381C[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80183810[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80183810[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80183800[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80183800[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80183810[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80183810[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80183810[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_8018382C; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_8018382C; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_801838A4[])(void); + +void func_8016F6E0(void *a0) { + D_801838A4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_801838AC[])(void); + +void func_8016F798(void *a0) { + D_801838AC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_801838B4[])(void); + +void func_8016F834(void *a0) { + D_801838B4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_801838BC[])(void); + +void func_8016F8E4(void *a0) { + D_801838BC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_801838C4[])(void); + +void func_8016F9C4(void *a0) { + D_801838C4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_801838CC[])(void); + +void func_8016FA84(void *a0) { + D_801838CC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_801838D8[])(void); + +void func_8016FB7C(void *a0) { + D_801838D8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_801838E4[])(void); + +void func_8016FC90(void *a0) { + D_801838E4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_801838F0[])(void); + +void func_8016FDB4(void *a0) { + D_801838F0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80183900[])(void); + +void func_8016FF30(void *a0) { + D_80183900[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80183910[])(void); + +void func_8016FFDC(void *a0) { + D_80183910[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80183918[])(void); + +void func_80170150(void *a0) { + D_80183918[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80183920[])(void); + +void func_80170240(void *a0) { + D_80183920[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80183928[])(void); + +void func_801702FC(void *a0) { + D_80183928[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80183930[])(void); + +void func_801703E0(void *a0) { + D_80183930[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80183938[])(void); + +void func_801704B0(void *a0) { + D_80183938[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80183940[])(void); + +void func_80170548(void *a0) { + D_80183940[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80183948[])(void); + +void func_801705F8(void *a0) { + D_80183948[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80183950[])(void); + +void func_801706AC(void *a0) { + D_80183950[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80183958[])(void); + +void func_80170748(void *a0) { + D_80183958[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80183960[])(void); + +void func_80170810(void *a0) { + D_80183960[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80183968[])(void); + +void func_80170AD8(void *a0) { + D_80183968[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80183970[])(void); + +void func_80170BD8(void *a0) { + D_80183970[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80183978[])(void); + +void func_80170C74(void *a0) { + D_80183978[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80183980[])(void); + +void func_80170D68(void *a0) { + D_80183980[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80183988[])(void); + +void func_80170E34(void *a0) { + D_80183988[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80183990[])(void); + +void func_80170EFC(void *a0) { + D_80183990[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80183998[])(void); + +void func_80170FB0(void *a0) { + D_80183998[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_801839A0[])(void); + +void func_80171064(void *a0) { + D_801839A0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_801839A8[])(void); + +void func_80171120(void *a0) { + D_801839A8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_801839B0[])(void); + +void func_801711C0(void *a0) { + D_801839B0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_801839B8[])(void); + +void func_80171260(void *a0) { + D_801839B8[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_801839C0[])(void); + +void func_801714E4(void *a0) { + D_801839C0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8016AB6C", func_80172C50); + + +extern void (*D_80183A04[])(void); + +void func_80172CA0(void *a0) { + D_80183A04[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_801839C8; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_801839C8); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC06_013/ov_SC06_013_jr_8015AE2C.c b/src/ov_SC06_013/ov_SC06_013_jr_8015AE2C.c index 9eeb680b7..5c096bf37 100644 --- a/src/ov_SC06_013/ov_SC06_013_jr_8015AE2C.c +++ b/src/ov_SC06_013/ov_SC06_013_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_80181D38[])(void); void func_8016AB30(void *a0) { D_80181D38[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80181DB4[])(void); - -void func_8016B4BC(void *a0) { - D_80181DB4[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_80199D58; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_80199D58); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80181DA8[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80181DA8; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80181DEC[]; -extern unsigned short D_80181DF4[]; -extern unsigned short D_80181DFC[]; -extern unsigned char D_80199D60[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_80199D60 + param_2 * 0x40); - puVar3 = D_80181DEC[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80181DF4[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80181DFC[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_80199D58; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_80199D58, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80181E04[])(void); - -void func_8016BBA4(void *a0) { - D_80181E04[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_80199E94; - extern u8 D_80199E95; - extern u8 D_80199E96; - extern M2C_UNK D_80199E98; - extern u8 D_80199E99; - extern u8 D_80199E9A; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_80199E94) = 0x20; - D_80199E95 = 0x20; - D_80199E96 = 0; - (*(u8 *)&D_80199E98) = 0xc0; - D_80199E99 = 0xc0; - D_80199E9A = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_80199E94; -extern M2C_UNK D_80199E98; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_80199E94, &D_80199E98, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_80199E95; - extern u8 D_80199E96; - extern u8 D_80199E99; - extern u8 D_80199E9A; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_80199E94); - if (*p1 != 0) *p1 -= 4; - if (D_80199E95 != 0) D_80199E95 -= 4; - if (D_80199E96 != 0) D_80199E96 -= 4; - p2 = &(*(u8 *)&D_80199E98); - if (*p2 != 0) *p2 -= 4; - if (D_80199E99 != 0) D_80199E99 -= 4; - if (D_80199E9A != 0) D_80199E9A -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_80199E94), &(*(int *)&D_80199E98), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_80199E20; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_80199E20); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80181E14; - extern s32 D_80181E1C; - extern s32 D_80181E24; - extern s32 D_80181E2C; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80181E14, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80181E1C, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80181E24, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80181E2C, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80181E34[])(void); - -void func_8016C14C(void *a0) { - D_80181E34[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_80199E9C[]; -extern u8 D_80199EA4[]; -extern u8 D_80199E54[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_80199E9C, D_80199EA4, D_80199E54); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_80199EB0[]; - extern u8 D_80199F70; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_80199EB0[1] = 0xff; - D_80199EB0[2] = 0x10; - D_80199EB0[0] = 0x10; - D_80199EB0[6] = 0; - D_80199EB0[5] = 0; - D_80199EB0[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_80199EB0, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_80199F70, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_80199EB0); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8015AE2C", func_8016C998); - - -extern void (*D_80181E3C[])(void); - -void func_8016CB84(void *a0) { - D_80181E3C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_80199F70[]; - - - Blk_8016CF04_8016CF04 *p = &D_80199F70[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80181E58[])(void); - -void func_8016D19C(void *a0) { - D_80181E58[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80181E60[])(void); - -void func_8016D428(void *a0) { - D_80181E60[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80181EC8[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80181EC8[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80181E6C; -extern u8 D_80181E78; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80181E6C, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80181E78); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80181EFC[])(void); - -void func_8016DEA4(void *a0) { - D_80181EFC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80181F04[])(void); - -void func_8016DF20(void *a0) { - D_80181F04[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80181F58[])(void); - -void func_8016E5B8(void *a0) { - D_80181F58[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80181F18[4]; - extern s32 D_80181F38; - extern s32 D_80181F40; - extern s32 D_80181F48; - extern s32 D_80181F50; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80181F18[0], pp, &tmp); - RotTransSV(&D_80181F18[1], &prim.v[1], &tmp); - RotTransSV(&D_80181F18[2], &prim.v[2], &tmp); - RotTransSV(&D_80181F18[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80181F38; - prim.f1 = D_80181F40; - prim.f2 = D_80181F48; - prim.f3 = D_80181F50; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80181F98[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80181F98[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80181F8C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80181F8C[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80181F7C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80181F7C[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80181F8C[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80181F8C[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80181F8C[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80181FA8; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80181FA8; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80182020[])(void); - -void func_8016F6E0(void *a0) { - D_80182020[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80182028[])(void); - -void func_8016F798(void *a0) { - D_80182028[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80182030[])(void); - -void func_8016F834(void *a0) { - D_80182030[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80182038[])(void); - -void func_8016F8E4(void *a0) { - D_80182038[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80182040[])(void); - -void func_8016F9C4(void *a0) { - D_80182040[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80182048[])(void); - -void func_8016FA84(void *a0) { - D_80182048[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80182054[])(void); - -void func_8016FB7C(void *a0) { - D_80182054[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80182060[])(void); - -void func_8016FC90(void *a0) { - D_80182060[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_8018206C[])(void); - -void func_8016FDB4(void *a0) { - D_8018206C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_8018207C[])(void); - -void func_8016FF30(void *a0) { - D_8018207C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_8018208C[])(void); - -void func_8016FFDC(void *a0) { - D_8018208C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80182094[])(void); - -void func_80170150(void *a0) { - D_80182094[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_8018209C[])(void); - -void func_80170240(void *a0) { - D_8018209C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_801820A4[])(void); - -void func_801702FC(void *a0) { - D_801820A4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_801820AC[])(void); - -void func_801703E0(void *a0) { - D_801820AC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_801820B4[])(void); - -void func_801704B0(void *a0) { - D_801820B4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_801820BC[])(void); - -void func_80170548(void *a0) { - D_801820BC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_801820C4[])(void); - -void func_801705F8(void *a0) { - D_801820C4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_801820CC[])(void); - -void func_801706AC(void *a0) { - D_801820CC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_801820D4[])(void); - -void func_80170748(void *a0) { - D_801820D4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_801820DC[])(void); - -void func_80170810(void *a0) { - D_801820DC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_801820E4[])(void); - -void func_80170AD8(void *a0) { - D_801820E4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_801820EC[])(void); - -void func_80170BD8(void *a0) { - D_801820EC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_801820F4[])(void); - -void func_80170C74(void *a0) { - D_801820F4[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8015AE2C", func_80170CF0); - - -extern void (*D_801820FC[])(void); - -void func_80170D68(void *a0) { - D_801820FC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80182104[])(void); - -void func_80170E34(void *a0) { - D_80182104[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_8018210C[])(void); - -void func_80170EFC(void *a0) { - D_8018210C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80182114[])(void); - -void func_80170FB0(void *a0) { - D_80182114[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_8018211C[])(void); - -void func_80171064(void *a0) { - D_8018211C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80182124[])(void); - -void func_80171120(void *a0) { - D_80182124[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_8018212C[])(void); - -void func_801711C0(void *a0) { - D_8018212C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80182134[])(void); - -void func_80171260(void *a0) { - D_80182134[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_8018213C[])(void); - -void func_801714E4(void *a0) { - D_8018213C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8015AE2C", func_80172C50); - - -extern void (*D_80182180[])(void); - -void func_80172CA0(void *a0) { - D_80182180[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80182144; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80182144); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC06_013/ov_SC06_013_jr_8016AB6C.c b/src/ov_SC06_013/ov_SC06_013_jr_8016AB6C.c new file mode 100644 index 000000000..4882e6f20 --- /dev/null +++ b/src/ov_SC06_013/ov_SC06_013_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80181104; +extern u8 D_80181074; +extern u8 D_80181050; +extern u8 D_8018102C; +extern u8 D_801810E0; +extern u8 D_801810BC; +extern u8 D_80181098; +extern u8 D_80181008; +extern void func_80145934(void); +extern u8 D_80181194; +extern u8 D_80181170; +extern u8 D_8018114C; +extern u8 D_80181128; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018058C[]; +extern unsigned char D_801805BC[]; +extern unsigned char D_8018060C[]; +extern unsigned char D_8018063C[]; +extern unsigned char D_8018066C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801806BC[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80180784[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018080C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80180814; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801998E8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801998EC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80180844; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801808EC[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80180910[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80180900; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80180924[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80180930[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80180940[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80180958[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80180948; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018096C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80180988[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80180978; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018099C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801809B0[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801809C4; +extern void (*D_801809EC[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801809CC; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80180A38[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80180A3C[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80180EA0[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80180EB0[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_80199920; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80180ED8[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80180EB8; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80180EC8; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80180F18[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80180F20[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80180EEC; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80180F2C[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80180EFC; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_80199928; +extern s32 D_80199934; +extern s32 D_80199938; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80180F68[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80180F3C[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_80199930; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_801811B8[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80180FD8[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018125C[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_801813B0[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_801811CC; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_801813B8[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_801811DC; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801811FC; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_801813C0[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_801813E8[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_801813F4[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80181268[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80181498; +extern void func_8015D380(s32 a0); +extern unsigned char D_8018057C[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_801814AC[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_801814E8[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80181530; +extern u16 D_80181532; +extern u16 D_80181534; +extern s32 D_80181538; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80181540; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_8018124C; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_801815C4[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80181674[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_801816A4[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80181708; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_80199940[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_8018172C[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_80199998[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80181774[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80181764; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801991F8[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_8018177C[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_801817D0[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80181798; +extern s16 D_801817CC; +extern s16 D_801817CA; +extern s16 D_801817C8; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_801817DC[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801999F8; +extern u8 D_801999F9; +extern u8 D_801999FA; +extern u8 D_801999FB; +extern u8 D_801999FC; +extern u8 D_801999FD; +extern u8 D_801999FE; +extern u8 D_801999FF; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_801817EC[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_80199A38; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80181830[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_801818AC[]; +extern s32 D_801818CC[]; +extern u8 D_80181948[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80181968[]; +extern u8 D_80181988[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80181A24[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80181AA0[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_80199208; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80181AAC[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80181AB4[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80181B7C[])(void); +extern void func_80166618(void *a0); +extern void (*D_80181B8C[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80181B9C[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80181BA8[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80181B08[]; +extern u8 D_80181B1C[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80181BC0[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80181BC8[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80181BD0[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80181BD8[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80181BE0[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80181BE8[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80181BF0[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80181CA4[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80181CAC[])(void); +extern void func_80169F00(void *a0); +extern char D_80181C5C[]; +extern char D_80181C1C[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80181CE4[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80181CF0[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80181D38[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80181CF8[]; + extern u8 D_80181D08[]; + extern u8 D_80199D08[]; + extern u8 D_80199D30[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80181CF8, D_80199D08) + 3; + func_8001CE28(obj, D_80199D08); + } else { + var_s3 = func_80024054(D_80181D08, D_80199D30) + 9; + func_8001CE28(obj, D_80199D30); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80181DB4[])(void); + +void func_8016B4BC(void *a0) { + D_80181DB4[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_80199D58; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_80199D58); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80181DA8[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80181DA8; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80181DEC[]; +extern unsigned short D_80181DF4[]; +extern unsigned short D_80181DFC[]; +extern unsigned char D_80199D60[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_80199D60 + param_2 * 0x40); + puVar3 = D_80181DEC[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80181DF4[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80181DFC[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_80199D58; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_80199D58, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80181E04[])(void); + +void func_8016BBA4(void *a0) { + D_80181E04[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_80199E94; + extern u8 D_80199E95; + extern u8 D_80199E96; + extern M2C_UNK D_80199E98; + extern u8 D_80199E99; + extern u8 D_80199E9A; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_80199E94) = 0x20; + D_80199E95 = 0x20; + D_80199E96 = 0; + (*(u8 *)&D_80199E98) = 0xc0; + D_80199E99 = 0xc0; + D_80199E9A = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_80199E94; +extern M2C_UNK D_80199E98; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_80199E94, &D_80199E98, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_80199E95; + extern u8 D_80199E96; + extern u8 D_80199E99; + extern u8 D_80199E9A; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_80199E94); + if (*p1 != 0) *p1 -= 4; + if (D_80199E95 != 0) D_80199E95 -= 4; + if (D_80199E96 != 0) D_80199E96 -= 4; + p2 = &(*(u8 *)&D_80199E98); + if (*p2 != 0) *p2 -= 4; + if (D_80199E99 != 0) D_80199E99 -= 4; + if (D_80199E9A != 0) D_80199E9A -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_80199E94), &(*(int *)&D_80199E98), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_80199E20; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_80199E20); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80181E14; + extern s32 D_80181E1C; + extern s32 D_80181E24; + extern s32 D_80181E2C; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80181E14, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80181E1C, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80181E24, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80181E2C, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80181E34[])(void); + +void func_8016C14C(void *a0) { + D_80181E34[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_80199E9C[]; +extern u8 D_80199EA4[]; +extern u8 D_80199E54[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_80199E9C, D_80199EA4, D_80199E54); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_80199EB0[]; + extern u8 D_80199F70; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_80199EB0[1] = 0xff; + D_80199EB0[2] = 0x10; + D_80199EB0[0] = 0x10; + D_80199EB0[6] = 0; + D_80199EB0[5] = 0; + D_80199EB0[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_80199EB0, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_80199F70, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_80199EB0); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8016AB6C", func_8016C998); + + +extern void (*D_80181E3C[])(void); + +void func_8016CB84(void *a0) { + D_80181E3C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_80199F70[]; + + + Blk_8016CF04_8016CF04 *p = &D_80199F70[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80181E58[])(void); + +void func_8016D19C(void *a0) { + D_80181E58[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80181E60[])(void); + +void func_8016D428(void *a0) { + D_80181E60[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80181EC8[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80181EC8[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80181E6C; +extern u8 D_80181E78; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80181E6C, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80181E78); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80181EFC[])(void); + +void func_8016DEA4(void *a0) { + D_80181EFC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80181F04[])(void); + +void func_8016DF20(void *a0) { + D_80181F04[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80181F58[])(void); + +void func_8016E5B8(void *a0) { + D_80181F58[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80181F18[4]; + extern s32 D_80181F38; + extern s32 D_80181F40; + extern s32 D_80181F48; + extern s32 D_80181F50; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80181F18[0], pp, &tmp); + RotTransSV(&D_80181F18[1], &prim.v[1], &tmp); + RotTransSV(&D_80181F18[2], &prim.v[2], &tmp); + RotTransSV(&D_80181F18[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80181F38; + prim.f1 = D_80181F40; + prim.f2 = D_80181F48; + prim.f3 = D_80181F50; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80181F98[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80181F98[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80181F8C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80181F8C[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80181F7C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80181F7C[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80181F8C[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80181F8C[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80181F8C[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80181FA8; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80181FA8; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80182020[])(void); + +void func_8016F6E0(void *a0) { + D_80182020[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80182028[])(void); + +void func_8016F798(void *a0) { + D_80182028[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80182030[])(void); + +void func_8016F834(void *a0) { + D_80182030[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80182038[])(void); + +void func_8016F8E4(void *a0) { + D_80182038[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80182040[])(void); + +void func_8016F9C4(void *a0) { + D_80182040[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80182048[])(void); + +void func_8016FA84(void *a0) { + D_80182048[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80182054[])(void); + +void func_8016FB7C(void *a0) { + D_80182054[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80182060[])(void); + +void func_8016FC90(void *a0) { + D_80182060[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_8018206C[])(void); + +void func_8016FDB4(void *a0) { + D_8018206C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_8018207C[])(void); + +void func_8016FF30(void *a0) { + D_8018207C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_8018208C[])(void); + +void func_8016FFDC(void *a0) { + D_8018208C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80182094[])(void); + +void func_80170150(void *a0) { + D_80182094[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_8018209C[])(void); + +void func_80170240(void *a0) { + D_8018209C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_801820A4[])(void); + +void func_801702FC(void *a0) { + D_801820A4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_801820AC[])(void); + +void func_801703E0(void *a0) { + D_801820AC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_801820B4[])(void); + +void func_801704B0(void *a0) { + D_801820B4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_801820BC[])(void); + +void func_80170548(void *a0) { + D_801820BC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_801820C4[])(void); + +void func_801705F8(void *a0) { + D_801820C4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_801820CC[])(void); + +void func_801706AC(void *a0) { + D_801820CC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_801820D4[])(void); + +void func_80170748(void *a0) { + D_801820D4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_801820DC[])(void); + +void func_80170810(void *a0) { + D_801820DC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_801820E4[])(void); + +void func_80170AD8(void *a0) { + D_801820E4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_801820EC[])(void); + +void func_80170BD8(void *a0) { + D_801820EC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_801820F4[])(void); + +void func_80170C74(void *a0) { + D_801820F4[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8016AB6C", func_80170CF0); + + +extern void (*D_801820FC[])(void); + +void func_80170D68(void *a0) { + D_801820FC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80182104[])(void); + +void func_80170E34(void *a0) { + D_80182104[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_8018210C[])(void); + +void func_80170EFC(void *a0) { + D_8018210C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80182114[])(void); + +void func_80170FB0(void *a0) { + D_80182114[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_8018211C[])(void); + +void func_80171064(void *a0) { + D_8018211C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80182124[])(void); + +void func_80171120(void *a0) { + D_80182124[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_8018212C[])(void); + +void func_801711C0(void *a0) { + D_8018212C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80182134[])(void); + +void func_80171260(void *a0) { + D_80182134[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_8018213C[])(void); + +void func_801714E4(void *a0) { + D_8018213C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8016AB6C", func_80172C50); + + +extern void (*D_80182180[])(void); + +void func_80172CA0(void *a0) { + D_80182180[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80182144; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80182144); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC06_014/ov_SC06_014_jr_8015AE2C.c b/src/ov_SC06_014/ov_SC06_014_jr_8015AE2C.c index c40a9a2a2..ac89ebe7e 100644 --- a/src/ov_SC06_014/ov_SC06_014_jr_8015AE2C.c +++ b/src/ov_SC06_014/ov_SC06_014_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_8018309C[])(void); void func_8016AB30(void *a0) { D_8018309C[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80183118[])(void); - -void func_8016B4BC(void *a0) { - D_80183118[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801A0748; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801A0748); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_8018310C[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_8018310C; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80183150[]; -extern unsigned short D_80183158[]; -extern unsigned short D_80183160[]; -extern unsigned char D_801A0750[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801A0750 + param_2 * 0x40); - puVar3 = D_80183150[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80183158[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80183160[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801A0748; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801A0748, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80183168[])(void); - -void func_8016BBA4(void *a0) { - D_80183168[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801A0884; - extern u8 D_801A0885; - extern u8 D_801A0886; - extern M2C_UNK D_801A0888; - extern u8 D_801A0889; - extern u8 D_801A088A; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801A0884) = 0x20; - D_801A0885 = 0x20; - D_801A0886 = 0; - (*(u8 *)&D_801A0888) = 0xc0; - D_801A0889 = 0xc0; - D_801A088A = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801A0884; -extern M2C_UNK D_801A0888; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801A0884, &D_801A0888, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801A0885; - extern u8 D_801A0886; - extern u8 D_801A0889; - extern u8 D_801A088A; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801A0884); - if (*p1 != 0) *p1 -= 4; - if (D_801A0885 != 0) D_801A0885 -= 4; - if (D_801A0886 != 0) D_801A0886 -= 4; - p2 = &(*(u8 *)&D_801A0888); - if (*p2 != 0) *p2 -= 4; - if (D_801A0889 != 0) D_801A0889 -= 4; - if (D_801A088A != 0) D_801A088A -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801A0884), &(*(int *)&D_801A0888), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801A0810; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801A0810); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80183178; - extern s32 D_80183180; - extern s32 D_80183188; - extern s32 D_80183190; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80183178, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80183180, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80183188, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80183190, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80183198[])(void); - -void func_8016C14C(void *a0) { - D_80183198[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801A088C[]; -extern u8 D_801A0894[]; -extern u8 D_801A0844[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801A088C, D_801A0894, D_801A0844); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801A08A0[]; - extern u8 D_801A0960; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801A08A0[1] = 0xff; - D_801A08A0[2] = 0x10; - D_801A08A0[0] = 0x10; - D_801A08A0[6] = 0; - D_801A08A0[5] = 0; - D_801A08A0[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801A08A0, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801A0960, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801A08A0); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8015AE2C", func_8016C998); - - -extern void (*D_801831A0[])(void); - -void func_8016CB84(void *a0) { - D_801831A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801A0960[]; - - - Blk_8016CF04_8016CF04 *p = &D_801A0960[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_801831BC[])(void); - -void func_8016D19C(void *a0) { - D_801831BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_801831C4[])(void); - -void func_8016D428(void *a0) { - D_801831C4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_8018322C[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_8018322C[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_801831D0; -extern u8 D_801831DC; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801831D0, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801831DC); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80183260[])(void); - -void func_8016DEA4(void *a0) { - D_80183260[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80183268[])(void); - -void func_8016DF20(void *a0) { - D_80183268[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_801832BC[])(void); - -void func_8016E5B8(void *a0) { - D_801832BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_8018327C[4]; - extern s32 D_8018329C; - extern s32 D_801832A4; - extern s32 D_801832AC; - extern s32 D_801832B4; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_8018327C[0], pp, &tmp); - RotTransSV(&D_8018327C[1], &prim.v[1], &tmp); - RotTransSV(&D_8018327C[2], &prim.v[2], &tmp); - RotTransSV(&D_8018327C[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_8018329C; - prim.f1 = D_801832A4; - prim.f2 = D_801832AC; - prim.f3 = D_801832B4; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_801832FC[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_801832FC[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_801832F0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_801832F0[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_801832E0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_801832E0[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801832F0[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_801832F0[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_801832F0[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_8018330C; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_8018330C; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80183384[])(void); - -void func_8016F6E0(void *a0) { - D_80183384[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_8018338C[])(void); - -void func_8016F798(void *a0) { - D_8018338C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80183394[])(void); - -void func_8016F834(void *a0) { - D_80183394[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_8018339C[])(void); - -void func_8016F8E4(void *a0) { - D_8018339C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_801833A4[])(void); - -void func_8016F9C4(void *a0) { - D_801833A4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_801833AC[])(void); - -void func_8016FA84(void *a0) { - D_801833AC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_801833B8[])(void); - -void func_8016FB7C(void *a0) { - D_801833B8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_801833C4[])(void); - -void func_8016FC90(void *a0) { - D_801833C4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_801833D0[])(void); - -void func_8016FDB4(void *a0) { - D_801833D0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_801833E0[])(void); - -void func_8016FF30(void *a0) { - D_801833E0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_801833F0[])(void); - -void func_8016FFDC(void *a0) { - D_801833F0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_801833F8[])(void); - -void func_80170150(void *a0) { - D_801833F8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80183400[])(void); - -void func_80170240(void *a0) { - D_80183400[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80183408[])(void); - -void func_801702FC(void *a0) { - D_80183408[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80183410[])(void); - -void func_801703E0(void *a0) { - D_80183410[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80183418[])(void); - -void func_801704B0(void *a0) { - D_80183418[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80183420[])(void); - -void func_80170548(void *a0) { - D_80183420[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80183428[])(void); - -void func_801705F8(void *a0) { - D_80183428[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80183430[])(void); - -void func_801706AC(void *a0) { - D_80183430[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80183438[])(void); - -void func_80170748(void *a0) { - D_80183438[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80183440[])(void); - -void func_80170810(void *a0) { - D_80183440[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80183448[])(void); - -void func_80170AD8(void *a0) { - D_80183448[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80183450[])(void); - -void func_80170BD8(void *a0) { - D_80183450[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80183458[])(void); - -void func_80170C74(void *a0) { - D_80183458[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80183460[])(void); - -void func_80170D68(void *a0) { - D_80183460[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80183468[])(void); - -void func_80170E34(void *a0) { - D_80183468[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80183470[])(void); - -void func_80170EFC(void *a0) { - D_80183470[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80183478[])(void); - -void func_80170FB0(void *a0) { - D_80183478[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80183480[])(void); - -void func_80171064(void *a0) { - D_80183480[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80183488[])(void); - -void func_80171120(void *a0) { - D_80183488[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80183490[])(void); - -void func_801711C0(void *a0) { - D_80183490[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80183498[])(void); - -void func_80171260(void *a0) { - D_80183498[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_801834A0[])(void); - -void func_801714E4(void *a0) { - D_801834A0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8015AE2C", func_80172C50); - - -extern void (*D_801834E4[])(void); - -void func_80172CA0(void *a0) { - D_801834E4[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_801834A8; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_801834A8); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC06_014/ov_SC06_014_jr_8016AB6C.c b/src/ov_SC06_014/ov_SC06_014_jr_8016AB6C.c new file mode 100644 index 000000000..eebd4f46f --- /dev/null +++ b/src/ov_SC06_014/ov_SC06_014_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80182468; +extern u8 D_801823D8; +extern u8 D_801823B4; +extern u8 D_80182390; +extern u8 D_80182444; +extern u8 D_80182420; +extern u8 D_801823FC; +extern u8 D_8018236C; +extern void func_80145934(void); +extern u8 D_801824F8; +extern u8 D_801824D4; +extern u8 D_801824B0; +extern u8 D_8018248C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801818F0[]; +extern unsigned char D_80181920[]; +extern unsigned char D_80181970[]; +extern unsigned char D_801819A0[]; +extern unsigned char D_801819D0[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80181A20[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80181AE8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80181B70[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80181B78; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801A02D8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801A02DC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80181BA8; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80181C50[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80181C74[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80181C64; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80181C88[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80181C94[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80181CA4[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80181CBC[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80181CAC; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80181CD0[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80181CEC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80181CDC; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80181D00[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80181D14[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80181D28; +extern void (*D_80181D50[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80181D30; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80181D9C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80181DA0[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80182204[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80182214[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801A0310; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018223C[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018221C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018222C; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018227C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80182284[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80182250; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80182290[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80182260; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801A0318; +extern s32 D_801A0324; +extern s32 D_801A0328; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801822CC[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801822A0[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801A0320; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018251C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018233C[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_801825C0[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80182714[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80182530; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018271C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80182540; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80182560; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80182724[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_8018274C[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80182758[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_801825CC[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_801827FC; +extern void func_8015D380(s32 a0); +extern unsigned char D_801818E0[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80182810[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_8018284C[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80182894; +extern u16 D_80182896; +extern u16 D_80182898; +extern s32 D_8018289C; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_801828A4; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_801825B0; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80182928[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_801829D8[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80182A08[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80182A6C; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801A0330[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80182A90[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801A0388[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80182AD8[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80182AC8; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_8019FBE8[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80182AE0[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80182B34[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80182AFC; +extern s16 D_80182B30; +extern s16 D_80182B2E; +extern s16 D_80182B2C; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80182B40[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801A03E8; +extern u8 D_801A03E9; +extern u8 D_801A03EA; +extern u8 D_801A03EB; +extern u8 D_801A03EC; +extern u8 D_801A03ED; +extern u8 D_801A03EE; +extern u8 D_801A03EF; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80182B50[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801A0428; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80182B94[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80182C10[]; +extern s32 D_80182C30[]; +extern u8 D_80182CAC[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80182CCC[]; +extern u8 D_80182CEC[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80182D88[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80182E04[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_8019FBF8; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80182E10[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80182E18[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80182EE0[])(void); +extern void func_80166618(void *a0); +extern void (*D_80182EF0[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80182F00[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80182F0C[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80182E6C[]; +extern u8 D_80182E80[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80182F24[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80182F2C[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80182F34[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80182F3C[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80182F44[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80182F4C[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80182F54[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80183008[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80183010[])(void); +extern void func_80169F00(void *a0); +extern char D_80182FC0[]; +extern char D_80182F80[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80183048[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80183054[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_8018309C[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_8018305C[]; + extern u8 D_8018306C[]; + extern u8 D_801A06F8[]; + extern u8 D_801A0720[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_8018305C, D_801A06F8) + 3; + func_8001CE28(obj, D_801A06F8); + } else { + var_s3 = func_80024054(D_8018306C, D_801A0720) + 9; + func_8001CE28(obj, D_801A0720); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80183118[])(void); + +void func_8016B4BC(void *a0) { + D_80183118[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801A0748; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801A0748); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_8018310C[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_8018310C; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80183150[]; +extern unsigned short D_80183158[]; +extern unsigned short D_80183160[]; +extern unsigned char D_801A0750[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801A0750 + param_2 * 0x40); + puVar3 = D_80183150[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80183158[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80183160[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801A0748; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801A0748, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80183168[])(void); + +void func_8016BBA4(void *a0) { + D_80183168[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801A0884; + extern u8 D_801A0885; + extern u8 D_801A0886; + extern M2C_UNK D_801A0888; + extern u8 D_801A0889; + extern u8 D_801A088A; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801A0884) = 0x20; + D_801A0885 = 0x20; + D_801A0886 = 0; + (*(u8 *)&D_801A0888) = 0xc0; + D_801A0889 = 0xc0; + D_801A088A = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801A0884; +extern M2C_UNK D_801A0888; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801A0884, &D_801A0888, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801A0885; + extern u8 D_801A0886; + extern u8 D_801A0889; + extern u8 D_801A088A; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801A0884); + if (*p1 != 0) *p1 -= 4; + if (D_801A0885 != 0) D_801A0885 -= 4; + if (D_801A0886 != 0) D_801A0886 -= 4; + p2 = &(*(u8 *)&D_801A0888); + if (*p2 != 0) *p2 -= 4; + if (D_801A0889 != 0) D_801A0889 -= 4; + if (D_801A088A != 0) D_801A088A -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801A0884), &(*(int *)&D_801A0888), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801A0810; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801A0810); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80183178; + extern s32 D_80183180; + extern s32 D_80183188; + extern s32 D_80183190; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80183178, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80183180, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80183188, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80183190, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80183198[])(void); + +void func_8016C14C(void *a0) { + D_80183198[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801A088C[]; +extern u8 D_801A0894[]; +extern u8 D_801A0844[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801A088C, D_801A0894, D_801A0844); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801A08A0[]; + extern u8 D_801A0960; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801A08A0[1] = 0xff; + D_801A08A0[2] = 0x10; + D_801A08A0[0] = 0x10; + D_801A08A0[6] = 0; + D_801A08A0[5] = 0; + D_801A08A0[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801A08A0, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801A0960, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801A08A0); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8016AB6C", func_8016C998); + + +extern void (*D_801831A0[])(void); + +void func_8016CB84(void *a0) { + D_801831A0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801A0960[]; + + + Blk_8016CF04_8016CF04 *p = &D_801A0960[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_801831BC[])(void); + +void func_8016D19C(void *a0) { + D_801831BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_801831C4[])(void); + +void func_8016D428(void *a0) { + D_801831C4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018322C[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_8018322C[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_801831D0; +extern u8 D_801831DC; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801831D0, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801831DC); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80183260[])(void); + +void func_8016DEA4(void *a0) { + D_80183260[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80183268[])(void); + +void func_8016DF20(void *a0) { + D_80183268[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_801832BC[])(void); + +void func_8016E5B8(void *a0) { + D_801832BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_8018327C[4]; + extern s32 D_8018329C; + extern s32 D_801832A4; + extern s32 D_801832AC; + extern s32 D_801832B4; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_8018327C[0], pp, &tmp); + RotTransSV(&D_8018327C[1], &prim.v[1], &tmp); + RotTransSV(&D_8018327C[2], &prim.v[2], &tmp); + RotTransSV(&D_8018327C[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_8018329C; + prim.f1 = D_801832A4; + prim.f2 = D_801832AC; + prim.f3 = D_801832B4; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_801832FC[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_801832FC[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_801832F0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_801832F0[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_801832E0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_801832E0[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801832F0[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_801832F0[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_801832F0[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_8018330C; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_8018330C; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80183384[])(void); + +void func_8016F6E0(void *a0) { + D_80183384[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_8018338C[])(void); + +void func_8016F798(void *a0) { + D_8018338C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80183394[])(void); + +void func_8016F834(void *a0) { + D_80183394[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_8018339C[])(void); + +void func_8016F8E4(void *a0) { + D_8018339C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_801833A4[])(void); + +void func_8016F9C4(void *a0) { + D_801833A4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_801833AC[])(void); + +void func_8016FA84(void *a0) { + D_801833AC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_801833B8[])(void); + +void func_8016FB7C(void *a0) { + D_801833B8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_801833C4[])(void); + +void func_8016FC90(void *a0) { + D_801833C4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_801833D0[])(void); + +void func_8016FDB4(void *a0) { + D_801833D0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_801833E0[])(void); + +void func_8016FF30(void *a0) { + D_801833E0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_801833F0[])(void); + +void func_8016FFDC(void *a0) { + D_801833F0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_801833F8[])(void); + +void func_80170150(void *a0) { + D_801833F8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80183400[])(void); + +void func_80170240(void *a0) { + D_80183400[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80183408[])(void); + +void func_801702FC(void *a0) { + D_80183408[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80183410[])(void); + +void func_801703E0(void *a0) { + D_80183410[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80183418[])(void); + +void func_801704B0(void *a0) { + D_80183418[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80183420[])(void); + +void func_80170548(void *a0) { + D_80183420[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80183428[])(void); + +void func_801705F8(void *a0) { + D_80183428[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80183430[])(void); + +void func_801706AC(void *a0) { + D_80183430[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80183438[])(void); + +void func_80170748(void *a0) { + D_80183438[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80183440[])(void); + +void func_80170810(void *a0) { + D_80183440[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80183448[])(void); + +void func_80170AD8(void *a0) { + D_80183448[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80183450[])(void); + +void func_80170BD8(void *a0) { + D_80183450[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80183458[])(void); + +void func_80170C74(void *a0) { + D_80183458[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80183460[])(void); + +void func_80170D68(void *a0) { + D_80183460[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80183468[])(void); + +void func_80170E34(void *a0) { + D_80183468[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80183470[])(void); + +void func_80170EFC(void *a0) { + D_80183470[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80183478[])(void); + +void func_80170FB0(void *a0) { + D_80183478[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80183480[])(void); + +void func_80171064(void *a0) { + D_80183480[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80183488[])(void); + +void func_80171120(void *a0) { + D_80183488[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80183490[])(void); + +void func_801711C0(void *a0) { + D_80183490[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80183498[])(void); + +void func_80171260(void *a0) { + D_80183498[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_801834A0[])(void); + +void func_801714E4(void *a0) { + D_801834A0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8016AB6C", func_80172C50); + + +extern void (*D_801834E4[])(void); + +void func_80172CA0(void *a0) { + D_801834E4[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_801834A8; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_801834A8); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC06_015/ov_SC06_015_jr_8015AE2C.c b/src/ov_SC06_015/ov_SC06_015_jr_8015AE2C.c index 4cc81665f..87d428bbb 100644 --- a/src/ov_SC06_015/ov_SC06_015_jr_8015AE2C.c +++ b/src/ov_SC06_015/ov_SC06_015_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_80181BF4[])(void); void func_8016AB30(void *a0) { D_80181BF4[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80181C70[])(void); - -void func_8016B4BC(void *a0) { - D_80181C70[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_80193B28; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_80193B28); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80181C64[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80181C64; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80181CA8[]; -extern unsigned short D_80181CB0[]; -extern unsigned short D_80181CB8[]; -extern unsigned char D_80193B30[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_80193B30 + param_2 * 0x40); - puVar3 = D_80181CA8[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80181CB0[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80181CB8[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_80193B28; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_80193B28, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80181CC0[])(void); - -void func_8016BBA4(void *a0) { - D_80181CC0[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_80193C64; - extern u8 D_80193C65; - extern u8 D_80193C66; - extern M2C_UNK D_80193C68; - extern u8 D_80193C69; - extern u8 D_80193C6A; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_80193C64) = 0x20; - D_80193C65 = 0x20; - D_80193C66 = 0; - (*(u8 *)&D_80193C68) = 0xc0; - D_80193C69 = 0xc0; - D_80193C6A = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_80193C64; -extern M2C_UNK D_80193C68; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_80193C64, &D_80193C68, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_80193C65; - extern u8 D_80193C66; - extern u8 D_80193C69; - extern u8 D_80193C6A; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_80193C64); - if (*p1 != 0) *p1 -= 4; - if (D_80193C65 != 0) D_80193C65 -= 4; - if (D_80193C66 != 0) D_80193C66 -= 4; - p2 = &(*(u8 *)&D_80193C68); - if (*p2 != 0) *p2 -= 4; - if (D_80193C69 != 0) D_80193C69 -= 4; - if (D_80193C6A != 0) D_80193C6A -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_80193C64), &(*(int *)&D_80193C68), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_80193BF0; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_80193BF0); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80181CD0; - extern s32 D_80181CD8; - extern s32 D_80181CE0; - extern s32 D_80181CE8; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80181CD0, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80181CD8, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80181CE0, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80181CE8, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80181CF0[])(void); - -void func_8016C14C(void *a0) { - D_80181CF0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_80193C6C[]; -extern u8 D_80193C74[]; -extern u8 D_80193C24[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_80193C6C, D_80193C74, D_80193C24); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_80193C80[]; - extern u8 D_80193D40; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_80193C80[1] = 0xff; - D_80193C80[2] = 0x10; - D_80193C80[0] = 0x10; - D_80193C80[6] = 0; - D_80193C80[5] = 0; - D_80193C80[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_80193C80, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_80193D40, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_80193C80); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8015AE2C", func_8016C998); - - -extern void (*D_80181CF8[])(void); - -void func_8016CB84(void *a0) { - D_80181CF8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_80193D40[]; - - - Blk_8016CF04_8016CF04 *p = &D_80193D40[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80181D14[])(void); - -void func_8016D19C(void *a0) { - D_80181D14[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80181D1C[])(void); - -void func_8016D428(void *a0) { - D_80181D1C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80181D84[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80181D84[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80181D28; -extern u8 D_80181D34; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80181D28, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80181D34); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80181DB8[])(void); - -void func_8016DEA4(void *a0) { - D_80181DB8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80181DC0[])(void); - -void func_8016DF20(void *a0) { - D_80181DC0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80181E14[])(void); - -void func_8016E5B8(void *a0) { - D_80181E14[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80181DD4[4]; - extern s32 D_80181DF4; - extern s32 D_80181DFC; - extern s32 D_80181E04; - extern s32 D_80181E0C; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80181DD4[0], pp, &tmp); - RotTransSV(&D_80181DD4[1], &prim.v[1], &tmp); - RotTransSV(&D_80181DD4[2], &prim.v[2], &tmp); - RotTransSV(&D_80181DD4[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80181DF4; - prim.f1 = D_80181DFC; - prim.f2 = D_80181E04; - prim.f3 = D_80181E0C; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80181E54[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80181E54[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80181E48[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80181E48[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80181E38[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80181E38[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80181E48[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80181E48[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80181E48[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80181E64; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80181E64; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80181EDC[])(void); - -void func_8016F6E0(void *a0) { - D_80181EDC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80181EE4[])(void); - -void func_8016F798(void *a0) { - D_80181EE4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80181EEC[])(void); - -void func_8016F834(void *a0) { - D_80181EEC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80181EF4[])(void); - -void func_8016F8E4(void *a0) { - D_80181EF4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80181EFC[])(void); - -void func_8016F9C4(void *a0) { - D_80181EFC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80181F04[])(void); - -void func_8016FA84(void *a0) { - D_80181F04[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80181F10[])(void); - -void func_8016FB7C(void *a0) { - D_80181F10[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80181F1C[])(void); - -void func_8016FC90(void *a0) { - D_80181F1C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80181F28[])(void); - -void func_8016FDB4(void *a0) { - D_80181F28[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80181F38[])(void); - -void func_8016FF30(void *a0) { - D_80181F38[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80181F48[])(void); - -void func_8016FFDC(void *a0) { - D_80181F48[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80181F50[])(void); - -void func_80170150(void *a0) { - D_80181F50[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80181F58[])(void); - -void func_80170240(void *a0) { - D_80181F58[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80181F60[])(void); - -void func_801702FC(void *a0) { - D_80181F60[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80181F68[])(void); - -void func_801703E0(void *a0) { - D_80181F68[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80181F70[])(void); - -void func_801704B0(void *a0) { - D_80181F70[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80181F78[])(void); - -void func_80170548(void *a0) { - D_80181F78[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80181F80[])(void); - -void func_801705F8(void *a0) { - D_80181F80[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80181F88[])(void); - -void func_801706AC(void *a0) { - D_80181F88[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80181F90[])(void); - -void func_80170748(void *a0) { - D_80181F90[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80181F98[])(void); - -void func_80170810(void *a0) { - D_80181F98[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80181FA0[])(void); - -void func_80170AD8(void *a0) { - D_80181FA0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80181FA8[])(void); - -void func_80170BD8(void *a0) { - D_80181FA8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80181FB0[])(void); - -void func_80170C74(void *a0) { - D_80181FB0[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80181FB8[])(void); - -void func_80170D68(void *a0) { - D_80181FB8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80181FC0[])(void); - -void func_80170E34(void *a0) { - D_80181FC0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80181FC8[])(void); - -void func_80170EFC(void *a0) { - D_80181FC8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80181FD0[])(void); - -void func_80170FB0(void *a0) { - D_80181FD0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80181FD8[])(void); - -void func_80171064(void *a0) { - D_80181FD8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80181FE0[])(void); - -void func_80171120(void *a0) { - D_80181FE0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80181FE8[])(void); - -void func_801711C0(void *a0) { - D_80181FE8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80181FF0[])(void); - -void func_80171260(void *a0) { - D_80181FF0[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80181FF8[])(void); - -void func_801714E4(void *a0) { - D_80181FF8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8015AE2C", func_80172C50); - - -extern void (*D_8018203C[])(void); - -void func_80172CA0(void *a0) { - D_8018203C[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80182000; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80182000); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC06_015/ov_SC06_015_jr_8016AB6C.c b/src/ov_SC06_015/ov_SC06_015_jr_8016AB6C.c new file mode 100644 index 000000000..ab64f255b --- /dev/null +++ b/src/ov_SC06_015/ov_SC06_015_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80180FC0; +extern u8 D_80180F30; +extern u8 D_80180F0C; +extern u8 D_80180EE8; +extern u8 D_80180F9C; +extern u8 D_80180F78; +extern u8 D_80180F54; +extern u8 D_80180EC4; +extern void func_80145934(void); +extern u8 D_80181050; +extern u8 D_8018102C; +extern u8 D_80181008; +extern u8 D_80180FE4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80180448[]; +extern unsigned char D_80180478[]; +extern unsigned char D_801804C8[]; +extern unsigned char D_801804F8[]; +extern unsigned char D_80180528[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80180578[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80180640[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801806C8[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801806D0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801936B8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801936BC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80180700; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801807A8[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801807CC[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801807BC; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801807E0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801807EC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801807FC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80180814[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80180804; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80180828[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80180844[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80180834; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80180858[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018086C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80180880; +extern void (*D_801808A8[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80180888; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801808F4[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801808F8[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80180D5C[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80180D6C[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801936F0; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80180D94[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80180D74; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80180D84; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80180DD4[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80180DDC[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80180DA8; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80180DE8[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80180DB8; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801936F8; +extern s32 D_80193704; +extern s32 D_80193708; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80180E24[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80180DF8[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_80193700; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80181074[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80180E94[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80181118[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018126C[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80181088; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80181274[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80181098; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801810B8; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_8018127C[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_801812A4[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_801812B0[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80181124[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80181354; +extern void func_8015D380(s32 a0); +extern unsigned char D_80180438[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80181368[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_801813A4[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_801813EC; +extern u16 D_801813EE; +extern u16 D_801813F0; +extern s32 D_801813F4; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_801813FC; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80181108; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80181480[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80181530[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80181560[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_801815C4; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_80193710[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_801815E8[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_80193768[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80181630[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80181620; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_80192FC8[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80181638[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_8018168C[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80181654; +extern s16 D_80181688; +extern s16 D_80181686; +extern s16 D_80181684; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80181698[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801937C8; +extern u8 D_801937C9; +extern u8 D_801937CA; +extern u8 D_801937CB; +extern u8 D_801937CC; +extern u8 D_801937CD; +extern u8 D_801937CE; +extern u8 D_801937CF; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_801816A8[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_80193808; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_801816EC[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80181768[]; +extern s32 D_80181788[]; +extern u8 D_80181804[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80181824[]; +extern u8 D_80181844[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_801818E0[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_8018195C[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_80192FD8; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80181968[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80181970[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80181A38[])(void); +extern void func_80166618(void *a0); +extern void (*D_80181A48[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80181A58[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80181A64[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_801819C4[]; +extern u8 D_801819D8[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80181A7C[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80181A84[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80181A8C[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80181A94[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80181A9C[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80181AA4[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80181AAC[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80181B60[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80181B68[])(void); +extern void func_80169F00(void *a0); +extern char D_80181B18[]; +extern char D_80181AD8[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80181BA0[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80181BAC[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80181BF4[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80181BB4[]; + extern u8 D_80181BC4[]; + extern u8 D_80193AD8[]; + extern u8 D_80193B00[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80181BB4, D_80193AD8) + 3; + func_8001CE28(obj, D_80193AD8); + } else { + var_s3 = func_80024054(D_80181BC4, D_80193B00) + 9; + func_8001CE28(obj, D_80193B00); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80181C70[])(void); + +void func_8016B4BC(void *a0) { + D_80181C70[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_80193B28; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_80193B28); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80181C64[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80181C64; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80181CA8[]; +extern unsigned short D_80181CB0[]; +extern unsigned short D_80181CB8[]; +extern unsigned char D_80193B30[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_80193B30 + param_2 * 0x40); + puVar3 = D_80181CA8[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80181CB0[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80181CB8[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_80193B28; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_80193B28, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80181CC0[])(void); + +void func_8016BBA4(void *a0) { + D_80181CC0[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_80193C64; + extern u8 D_80193C65; + extern u8 D_80193C66; + extern M2C_UNK D_80193C68; + extern u8 D_80193C69; + extern u8 D_80193C6A; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_80193C64) = 0x20; + D_80193C65 = 0x20; + D_80193C66 = 0; + (*(u8 *)&D_80193C68) = 0xc0; + D_80193C69 = 0xc0; + D_80193C6A = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_80193C64; +extern M2C_UNK D_80193C68; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_80193C64, &D_80193C68, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_80193C65; + extern u8 D_80193C66; + extern u8 D_80193C69; + extern u8 D_80193C6A; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_80193C64); + if (*p1 != 0) *p1 -= 4; + if (D_80193C65 != 0) D_80193C65 -= 4; + if (D_80193C66 != 0) D_80193C66 -= 4; + p2 = &(*(u8 *)&D_80193C68); + if (*p2 != 0) *p2 -= 4; + if (D_80193C69 != 0) D_80193C69 -= 4; + if (D_80193C6A != 0) D_80193C6A -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_80193C64), &(*(int *)&D_80193C68), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_80193BF0; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_80193BF0); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80181CD0; + extern s32 D_80181CD8; + extern s32 D_80181CE0; + extern s32 D_80181CE8; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80181CD0, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80181CD8, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80181CE0, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80181CE8, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80181CF0[])(void); + +void func_8016C14C(void *a0) { + D_80181CF0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_80193C6C[]; +extern u8 D_80193C74[]; +extern u8 D_80193C24[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_80193C6C, D_80193C74, D_80193C24); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_80193C80[]; + extern u8 D_80193D40; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_80193C80[1] = 0xff; + D_80193C80[2] = 0x10; + D_80193C80[0] = 0x10; + D_80193C80[6] = 0; + D_80193C80[5] = 0; + D_80193C80[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_80193C80, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_80193D40, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_80193C80); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8016AB6C", func_8016C998); + + +extern void (*D_80181CF8[])(void); + +void func_8016CB84(void *a0) { + D_80181CF8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_80193D40[]; + + + Blk_8016CF04_8016CF04 *p = &D_80193D40[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80181D14[])(void); + +void func_8016D19C(void *a0) { + D_80181D14[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80181D1C[])(void); + +void func_8016D428(void *a0) { + D_80181D1C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80181D84[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80181D84[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80181D28; +extern u8 D_80181D34; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80181D28, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80181D34); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80181DB8[])(void); + +void func_8016DEA4(void *a0) { + D_80181DB8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80181DC0[])(void); + +void func_8016DF20(void *a0) { + D_80181DC0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80181E14[])(void); + +void func_8016E5B8(void *a0) { + D_80181E14[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80181DD4[4]; + extern s32 D_80181DF4; + extern s32 D_80181DFC; + extern s32 D_80181E04; + extern s32 D_80181E0C; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80181DD4[0], pp, &tmp); + RotTransSV(&D_80181DD4[1], &prim.v[1], &tmp); + RotTransSV(&D_80181DD4[2], &prim.v[2], &tmp); + RotTransSV(&D_80181DD4[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80181DF4; + prim.f1 = D_80181DFC; + prim.f2 = D_80181E04; + prim.f3 = D_80181E0C; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80181E54[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80181E54[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80181E48[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80181E48[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80181E38[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80181E38[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80181E48[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80181E48[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80181E48[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80181E64; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80181E64; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80181EDC[])(void); + +void func_8016F6E0(void *a0) { + D_80181EDC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80181EE4[])(void); + +void func_8016F798(void *a0) { + D_80181EE4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80181EEC[])(void); + +void func_8016F834(void *a0) { + D_80181EEC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80181EF4[])(void); + +void func_8016F8E4(void *a0) { + D_80181EF4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80181EFC[])(void); + +void func_8016F9C4(void *a0) { + D_80181EFC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80181F04[])(void); + +void func_8016FA84(void *a0) { + D_80181F04[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80181F10[])(void); + +void func_8016FB7C(void *a0) { + D_80181F10[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80181F1C[])(void); + +void func_8016FC90(void *a0) { + D_80181F1C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80181F28[])(void); + +void func_8016FDB4(void *a0) { + D_80181F28[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80181F38[])(void); + +void func_8016FF30(void *a0) { + D_80181F38[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80181F48[])(void); + +void func_8016FFDC(void *a0) { + D_80181F48[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80181F50[])(void); + +void func_80170150(void *a0) { + D_80181F50[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80181F58[])(void); + +void func_80170240(void *a0) { + D_80181F58[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80181F60[])(void); + +void func_801702FC(void *a0) { + D_80181F60[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80181F68[])(void); + +void func_801703E0(void *a0) { + D_80181F68[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80181F70[])(void); + +void func_801704B0(void *a0) { + D_80181F70[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80181F78[])(void); + +void func_80170548(void *a0) { + D_80181F78[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80181F80[])(void); + +void func_801705F8(void *a0) { + D_80181F80[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80181F88[])(void); + +void func_801706AC(void *a0) { + D_80181F88[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80181F90[])(void); + +void func_80170748(void *a0) { + D_80181F90[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80181F98[])(void); + +void func_80170810(void *a0) { + D_80181F98[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80181FA0[])(void); + +void func_80170AD8(void *a0) { + D_80181FA0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80181FA8[])(void); + +void func_80170BD8(void *a0) { + D_80181FA8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80181FB0[])(void); + +void func_80170C74(void *a0) { + D_80181FB0[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80181FB8[])(void); + +void func_80170D68(void *a0) { + D_80181FB8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80181FC0[])(void); + +void func_80170E34(void *a0) { + D_80181FC0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80181FC8[])(void); + +void func_80170EFC(void *a0) { + D_80181FC8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80181FD0[])(void); + +void func_80170FB0(void *a0) { + D_80181FD0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80181FD8[])(void); + +void func_80171064(void *a0) { + D_80181FD8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80181FE0[])(void); + +void func_80171120(void *a0) { + D_80181FE0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80181FE8[])(void); + +void func_801711C0(void *a0) { + D_80181FE8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80181FF0[])(void); + +void func_80171260(void *a0) { + D_80181FF0[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80181FF8[])(void); + +void func_801714E4(void *a0) { + D_80181FF8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8016AB6C", func_80172C50); + + +extern void (*D_8018203C[])(void); + +void func_80172CA0(void *a0) { + D_8018203C[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80182000; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80182000); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC06_016/ov_SC06_016_jr_8015AE2C.c b/src/ov_SC06_016/ov_SC06_016_jr_8015AE2C.c index 8500c316a..1b607dd82 100644 --- a/src/ov_SC06_016/ov_SC06_016_jr_8015AE2C.c +++ b/src/ov_SC06_016/ov_SC06_016_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_80188004[])(void); void func_8016AB30(void *a0) { D_80188004[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80188080[])(void); - -void func_8016B4BC(void *a0) { - D_80188080[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_8019E8F8; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_8019E8F8); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80188074[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80188074; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_801880B8[]; -extern unsigned short D_801880C0[]; -extern unsigned short D_801880C8[]; -extern unsigned char D_8019E900[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_8019E900 + param_2 * 0x40); - puVar3 = D_801880B8[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_801880C0[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_801880C8[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_8019E8F8; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_8019E8F8, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_801880D0[])(void); - -void func_8016BBA4(void *a0) { - D_801880D0[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_8019EA34; - extern u8 D_8019EA35; - extern u8 D_8019EA36; - extern M2C_UNK D_8019EA38; - extern u8 D_8019EA39; - extern u8 D_8019EA3A; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_8019EA34) = 0x20; - D_8019EA35 = 0x20; - D_8019EA36 = 0; - (*(u8 *)&D_8019EA38) = 0xc0; - D_8019EA39 = 0xc0; - D_8019EA3A = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_8019EA34; -extern M2C_UNK D_8019EA38; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_8019EA34, &D_8019EA38, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_8019EA35; - extern u8 D_8019EA36; - extern u8 D_8019EA39; - extern u8 D_8019EA3A; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_8019EA34); - if (*p1 != 0) *p1 -= 4; - if (D_8019EA35 != 0) D_8019EA35 -= 4; - if (D_8019EA36 != 0) D_8019EA36 -= 4; - p2 = &(*(u8 *)&D_8019EA38); - if (*p2 != 0) *p2 -= 4; - if (D_8019EA39 != 0) D_8019EA39 -= 4; - if (D_8019EA3A != 0) D_8019EA3A -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_8019EA34), &(*(int *)&D_8019EA38), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_8019E9C0; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_8019E9C0); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_801880E0; - extern s32 D_801880E8; - extern s32 D_801880F0; - extern s32 D_801880F8; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_801880E0, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_801880E8, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_801880F0, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_801880F8, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80188100[])(void); - -void func_8016C14C(void *a0) { - D_80188100[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_8019EA3C[]; -extern u8 D_8019EA44[]; -extern u8 D_8019E9F4[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_8019EA3C, D_8019EA44, D_8019E9F4); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_8019EA50[]; - extern u8 D_8019EB10; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_8019EA50[1] = 0xff; - D_8019EA50[2] = 0x10; - D_8019EA50[0] = 0x10; - D_8019EA50[6] = 0; - D_8019EA50[5] = 0; - D_8019EA50[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_8019EA50, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_8019EB10, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_8019EA50); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8015AE2C", func_8016C998); - - -extern void (*D_80188108[])(void); - -void func_8016CB84(void *a0) { - D_80188108[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_8019EB10[]; - - - Blk_8016CF04_8016CF04 *p = &D_8019EB10[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80188124[])(void); - -void func_8016D19C(void *a0) { - D_80188124[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_8018812C[])(void); - -void func_8016D428(void *a0) { - D_8018812C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80188194[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80188194[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80188138; -extern u8 D_80188144; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80188138, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80188144); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8015AE2C", func_8016DC20); - - -extern void (*D_801881C8[])(void); - -void func_8016DEA4(void *a0) { - D_801881C8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_801881D0[])(void); - -void func_8016DF20(void *a0) { - D_801881D0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80188224[])(void); - -void func_8016E5B8(void *a0) { - D_80188224[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_801881E4[4]; - extern s32 D_80188204; - extern s32 D_8018820C; - extern s32 D_80188214; - extern s32 D_8018821C; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_801881E4[0], pp, &tmp); - RotTransSV(&D_801881E4[1], &prim.v[1], &tmp); - RotTransSV(&D_801881E4[2], &prim.v[2], &tmp); - RotTransSV(&D_801881E4[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80188204; - prim.f1 = D_8018820C; - prim.f2 = D_80188214; - prim.f3 = D_8018821C; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80188264[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80188264[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80188258[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80188258[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80188248[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80188248[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80188258[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80188258[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80188258[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80188274; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80188274; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_801882EC[])(void); - -void func_8016F6E0(void *a0) { - D_801882EC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_801882F4[])(void); - -void func_8016F798(void *a0) { - D_801882F4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_801882FC[])(void); - -void func_8016F834(void *a0) { - D_801882FC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80188304[])(void); - -void func_8016F8E4(void *a0) { - D_80188304[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_8018830C[])(void); - -void func_8016F9C4(void *a0) { - D_8018830C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80188314[])(void); - -void func_8016FA84(void *a0) { - D_80188314[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80188320[])(void); - -void func_8016FB7C(void *a0) { - D_80188320[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_8018832C[])(void); - -void func_8016FC90(void *a0) { - D_8018832C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80188338[])(void); - -void func_8016FDB4(void *a0) { - D_80188338[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80188348[])(void); - -void func_8016FF30(void *a0) { - D_80188348[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80188358[])(void); - -void func_8016FFDC(void *a0) { - D_80188358[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80188360[])(void); - -void func_80170150(void *a0) { - D_80188360[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80188368[])(void); - -void func_80170240(void *a0) { - D_80188368[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80188370[])(void); - -void func_801702FC(void *a0) { - D_80188370[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80188378[])(void); - -void func_801703E0(void *a0) { - D_80188378[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80188380[])(void); - -void func_801704B0(void *a0) { - D_80188380[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80188388[])(void); - -void func_80170548(void *a0) { - D_80188388[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80188390[])(void); - -void func_801705F8(void *a0) { - D_80188390[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80188398[])(void); - -void func_801706AC(void *a0) { - D_80188398[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_801883A0[])(void); - -void func_80170748(void *a0) { - D_801883A0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_801883A8[])(void); - -void func_80170810(void *a0) { - D_801883A8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_801883B0[])(void); - -void func_80170AD8(void *a0) { - D_801883B0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_801883B8[])(void); - -void func_80170BD8(void *a0) { - D_801883B8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_801883C0[])(void); - -void func_80170C74(void *a0) { - D_801883C0[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8015AE2C", func_80170CF0); - - -extern void (*D_801883C8[])(void); - -void func_80170D68(void *a0) { - D_801883C8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_801883D0[])(void); - -void func_80170E34(void *a0) { - D_801883D0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_801883D8[])(void); - -void func_80170EFC(void *a0) { - D_801883D8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_801883E0[])(void); - -void func_80170FB0(void *a0) { - D_801883E0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_801883E8[])(void); - -void func_80171064(void *a0) { - D_801883E8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_801883F0[])(void); - -void func_80171120(void *a0) { - D_801883F0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_801883F8[])(void); - -void func_801711C0(void *a0) { - D_801883F8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80188400[])(void); - -void func_80171260(void *a0) { - D_80188400[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80188408[])(void); - -void func_801714E4(void *a0) { - D_80188408[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8015AE2C", func_80172C50); - - -extern void (*D_8018844C[])(void); - -void func_80172CA0(void *a0) { - D_8018844C[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80188410; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80188410); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC06_016/ov_SC06_016_jr_8016AB6C.c b/src/ov_SC06_016/ov_SC06_016_jr_8016AB6C.c new file mode 100644 index 000000000..413648b63 --- /dev/null +++ b/src/ov_SC06_016/ov_SC06_016_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801873D0; +extern u8 D_80187340; +extern u8 D_8018731C; +extern u8 D_801872F8; +extern u8 D_801873AC; +extern u8 D_80187388; +extern u8 D_80187364; +extern u8 D_801872D4; +extern void func_80145934(void); +extern u8 D_80187460; +extern u8 D_8018743C; +extern u8 D_80187418; +extern u8 D_801873F4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80186858[]; +extern unsigned char D_80186888[]; +extern unsigned char D_801868D8[]; +extern unsigned char D_80186908[]; +extern unsigned char D_80186938[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80186988[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80186A50[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80186AD8[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80186AE0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8019E488; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019E48C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80186B10; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80186BB8[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80186BDC[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80186BCC; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80186BF0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80186BFC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80186C0C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80186C24[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80186C14; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80186C38[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80186C54[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80186C44; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80186C68[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80186C7C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80186C90; +extern void (*D_80186CB8[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80186C98; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80186D04[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80186D08[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018716C[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018717C[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_8019E4C0; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_801871A4[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80187184; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80187194; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801871E4[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801871EC[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_801871B8; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801871F8[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_801871C8; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_8019E4C8; +extern s32 D_8019E4D4; +extern s32 D_8019E4D8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80187234[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80187208[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_8019E4D0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80187484[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_801872A4[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80187528[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018767C[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80187498; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80187684[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_801874A8; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801874C8; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_8018768C[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_801876B4[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_801876C0[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80187534[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80187764; +extern void func_8015D380(s32 a0); +extern unsigned char D_80186848[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80187778[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_801877B4[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_801877FC; +extern u16 D_801877FE; +extern u16 D_80187800; +extern s32 D_80187804; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_8018780C; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80187518; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80187890[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80187940[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80187970[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_801879D4; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_8019E4E0[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_801879F8[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_8019E538[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80187A40[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80187A30; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_8019DC10[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80187A48[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80187A9C[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80187A64; +extern s16 D_80187A98; +extern s16 D_80187A96; +extern s16 D_80187A94; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80187AA8[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_8019E598; +extern u8 D_8019E599; +extern u8 D_8019E59A; +extern u8 D_8019E59B; +extern u8 D_8019E59C; +extern u8 D_8019E59D; +extern u8 D_8019E59E; +extern u8 D_8019E59F; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80187AB8[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_8019E5D8; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80187AFC[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80187B78[]; +extern s32 D_80187B98[]; +extern u8 D_80187C14[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80187C34[]; +extern u8 D_80187C54[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80187CF0[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80187D6C[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_8019DC20; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80187D78[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80187D80[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80187E48[])(void); +extern void func_80166618(void *a0); +extern void (*D_80187E58[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80187E68[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80187E74[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80187DD4[]; +extern u8 D_80187DE8[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80187E8C[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80187E94[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80187E9C[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80187EA4[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80187EAC[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80187EB4[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80187EBC[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80187F70[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80187F78[])(void); +extern void func_80169F00(void *a0); +extern char D_80187F28[]; +extern char D_80187EE8[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80187FB0[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80187FBC[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80188004[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80187FC4[]; + extern u8 D_80187FD4[]; + extern u8 D_8019E8A8[]; + extern u8 D_8019E8D0[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80187FC4, D_8019E8A8) + 3; + func_8001CE28(obj, D_8019E8A8); + } else { + var_s3 = func_80024054(D_80187FD4, D_8019E8D0) + 9; + func_8001CE28(obj, D_8019E8D0); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80188080[])(void); + +void func_8016B4BC(void *a0) { + D_80188080[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_8019E8F8; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_8019E8F8); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80188074[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80188074; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_801880B8[]; +extern unsigned short D_801880C0[]; +extern unsigned short D_801880C8[]; +extern unsigned char D_8019E900[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_8019E900 + param_2 * 0x40); + puVar3 = D_801880B8[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_801880C0[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_801880C8[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_8019E8F8; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_8019E8F8, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_801880D0[])(void); + +void func_8016BBA4(void *a0) { + D_801880D0[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_8019EA34; + extern u8 D_8019EA35; + extern u8 D_8019EA36; + extern M2C_UNK D_8019EA38; + extern u8 D_8019EA39; + extern u8 D_8019EA3A; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_8019EA34) = 0x20; + D_8019EA35 = 0x20; + D_8019EA36 = 0; + (*(u8 *)&D_8019EA38) = 0xc0; + D_8019EA39 = 0xc0; + D_8019EA3A = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_8019EA34; +extern M2C_UNK D_8019EA38; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_8019EA34, &D_8019EA38, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_8019EA35; + extern u8 D_8019EA36; + extern u8 D_8019EA39; + extern u8 D_8019EA3A; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_8019EA34); + if (*p1 != 0) *p1 -= 4; + if (D_8019EA35 != 0) D_8019EA35 -= 4; + if (D_8019EA36 != 0) D_8019EA36 -= 4; + p2 = &(*(u8 *)&D_8019EA38); + if (*p2 != 0) *p2 -= 4; + if (D_8019EA39 != 0) D_8019EA39 -= 4; + if (D_8019EA3A != 0) D_8019EA3A -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_8019EA34), &(*(int *)&D_8019EA38), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_8019E9C0; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_8019E9C0); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_801880E0; + extern s32 D_801880E8; + extern s32 D_801880F0; + extern s32 D_801880F8; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_801880E0, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_801880E8, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_801880F0, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_801880F8, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80188100[])(void); + +void func_8016C14C(void *a0) { + D_80188100[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_8019EA3C[]; +extern u8 D_8019EA44[]; +extern u8 D_8019E9F4[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_8019EA3C, D_8019EA44, D_8019E9F4); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_8019EA50[]; + extern u8 D_8019EB10; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_8019EA50[1] = 0xff; + D_8019EA50[2] = 0x10; + D_8019EA50[0] = 0x10; + D_8019EA50[6] = 0; + D_8019EA50[5] = 0; + D_8019EA50[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_8019EA50, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_8019EB10, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_8019EA50); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8016AB6C", func_8016C998); + + +extern void (*D_80188108[])(void); + +void func_8016CB84(void *a0) { + D_80188108[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_8019EB10[]; + + + Blk_8016CF04_8016CF04 *p = &D_8019EB10[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80188124[])(void); + +void func_8016D19C(void *a0) { + D_80188124[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_8018812C[])(void); + +void func_8016D428(void *a0) { + D_8018812C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80188194[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80188194[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80188138; +extern u8 D_80188144; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80188138, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80188144); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8016AB6C", func_8016DC20); + + +extern void (*D_801881C8[])(void); + +void func_8016DEA4(void *a0) { + D_801881C8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_801881D0[])(void); + +void func_8016DF20(void *a0) { + D_801881D0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80188224[])(void); + +void func_8016E5B8(void *a0) { + D_80188224[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_801881E4[4]; + extern s32 D_80188204; + extern s32 D_8018820C; + extern s32 D_80188214; + extern s32 D_8018821C; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_801881E4[0], pp, &tmp); + RotTransSV(&D_801881E4[1], &prim.v[1], &tmp); + RotTransSV(&D_801881E4[2], &prim.v[2], &tmp); + RotTransSV(&D_801881E4[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80188204; + prim.f1 = D_8018820C; + prim.f2 = D_80188214; + prim.f3 = D_8018821C; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80188264[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80188264[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80188258[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80188258[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80188248[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80188248[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80188258[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80188258[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80188258[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80188274; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80188274; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_801882EC[])(void); + +void func_8016F6E0(void *a0) { + D_801882EC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_801882F4[])(void); + +void func_8016F798(void *a0) { + D_801882F4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_801882FC[])(void); + +void func_8016F834(void *a0) { + D_801882FC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80188304[])(void); + +void func_8016F8E4(void *a0) { + D_80188304[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_8018830C[])(void); + +void func_8016F9C4(void *a0) { + D_8018830C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80188314[])(void); + +void func_8016FA84(void *a0) { + D_80188314[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80188320[])(void); + +void func_8016FB7C(void *a0) { + D_80188320[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_8018832C[])(void); + +void func_8016FC90(void *a0) { + D_8018832C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80188338[])(void); + +void func_8016FDB4(void *a0) { + D_80188338[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80188348[])(void); + +void func_8016FF30(void *a0) { + D_80188348[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80188358[])(void); + +void func_8016FFDC(void *a0) { + D_80188358[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80188360[])(void); + +void func_80170150(void *a0) { + D_80188360[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80188368[])(void); + +void func_80170240(void *a0) { + D_80188368[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80188370[])(void); + +void func_801702FC(void *a0) { + D_80188370[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80188378[])(void); + +void func_801703E0(void *a0) { + D_80188378[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80188380[])(void); + +void func_801704B0(void *a0) { + D_80188380[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80188388[])(void); + +void func_80170548(void *a0) { + D_80188388[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80188390[])(void); + +void func_801705F8(void *a0) { + D_80188390[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80188398[])(void); + +void func_801706AC(void *a0) { + D_80188398[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_801883A0[])(void); + +void func_80170748(void *a0) { + D_801883A0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_801883A8[])(void); + +void func_80170810(void *a0) { + D_801883A8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_801883B0[])(void); + +void func_80170AD8(void *a0) { + D_801883B0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_801883B8[])(void); + +void func_80170BD8(void *a0) { + D_801883B8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_801883C0[])(void); + +void func_80170C74(void *a0) { + D_801883C0[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8016AB6C", func_80170CF0); + + +extern void (*D_801883C8[])(void); + +void func_80170D68(void *a0) { + D_801883C8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_801883D0[])(void); + +void func_80170E34(void *a0) { + D_801883D0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_801883D8[])(void); + +void func_80170EFC(void *a0) { + D_801883D8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_801883E0[])(void); + +void func_80170FB0(void *a0) { + D_801883E0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_801883E8[])(void); + +void func_80171064(void *a0) { + D_801883E8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_801883F0[])(void); + +void func_80171120(void *a0) { + D_801883F0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_801883F8[])(void); + +void func_801711C0(void *a0) { + D_801883F8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80188400[])(void); + +void func_80171260(void *a0) { + D_80188400[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80188408[])(void); + +void func_801714E4(void *a0) { + D_80188408[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8016AB6C", func_80172C50); + + +extern void (*D_8018844C[])(void); + +void func_80172CA0(void *a0) { + D_8018844C[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80188410; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80188410); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC06_018/ov_SC06_018_jr_8015AE2C.c b/src/ov_SC06_018/ov_SC06_018_jr_8015AE2C.c index 13912672e..0e8f4fb8d 100644 --- a/src/ov_SC06_018/ov_SC06_018_jr_8015AE2C.c +++ b/src/ov_SC06_018/ov_SC06_018_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_80196740[])(void); void func_8016AB30(void *a0) { D_80196740[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_801967BC[])(void); - -void func_8016B4BC(void *a0) { - D_801967BC[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801D41E0; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801D41E0); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_801967B0[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_801967B0; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_801967F4[]; -extern unsigned short D_801967FC[]; -extern unsigned short D_80196804[]; -extern unsigned char D_801D41E8[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801D41E8 + param_2 * 0x40); - puVar3 = D_801967F4[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_801967FC[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80196804[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801D41E0; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801D41E0, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_8019680C[])(void); - -void func_8016BBA4(void *a0) { - D_8019680C[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801D431C; - extern u8 D_801D431D; - extern u8 D_801D431E; - extern M2C_UNK D_801D4320; - extern u8 D_801D4321; - extern u8 D_801D4322; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801D431C) = 0x20; - D_801D431D = 0x20; - D_801D431E = 0; - (*(u8 *)&D_801D4320) = 0xc0; - D_801D4321 = 0xc0; - D_801D4322 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801D431C; -extern M2C_UNK D_801D4320; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801D431C, &D_801D4320, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801D431D; - extern u8 D_801D431E; - extern u8 D_801D4321; - extern u8 D_801D4322; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801D431C); - if (*p1 != 0) *p1 -= 4; - if (D_801D431D != 0) D_801D431D -= 4; - if (D_801D431E != 0) D_801D431E -= 4; - p2 = &(*(u8 *)&D_801D4320); - if (*p2 != 0) *p2 -= 4; - if (D_801D4321 != 0) D_801D4321 -= 4; - if (D_801D4322 != 0) D_801D4322 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801D431C), &(*(int *)&D_801D4320), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801D42A8; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801D42A8); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_8019681C; - extern s32 D_80196824; - extern s32 D_8019682C; - extern s32 D_80196834; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_8019681C, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80196824, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_8019682C, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80196834, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_8019683C[])(void); - -void func_8016C14C(void *a0) { - D_8019683C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801D4324[]; -extern u8 D_801D432C[]; -extern u8 D_801D42DC[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801D4324, D_801D432C, D_801D42DC); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801D4338[]; - extern u8 D_801D43F8; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801D4338[1] = 0xff; - D_801D4338[2] = 0x10; - D_801D4338[0] = 0x10; - D_801D4338[6] = 0; - D_801D4338[5] = 0; - D_801D4338[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801D4338, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801D43F8, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801D4338); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8015AE2C", func_8016C998); - - -extern void (*D_80196844[])(void); - -void func_8016CB84(void *a0) { - D_80196844[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801D43F8[]; - - - Blk_8016CF04_8016CF04 *p = &D_801D43F8[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80196860[])(void); - -void func_8016D19C(void *a0) { - D_80196860[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80196868[])(void); - -void func_8016D428(void *a0) { - D_80196868[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_801968D0[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_801968D0[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80196874; -extern u8 D_80196880; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80196874, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80196880); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80196904[])(void); - -void func_8016DEA4(void *a0) { - D_80196904[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_8019690C[])(void); - -void func_8016DF20(void *a0) { - D_8019690C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80196960[])(void); - -void func_8016E5B8(void *a0) { - D_80196960[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80196920[4]; - extern s32 D_80196940; - extern s32 D_80196948; - extern s32 D_80196950; - extern s32 D_80196958; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80196920[0], pp, &tmp); - RotTransSV(&D_80196920[1], &prim.v[1], &tmp); - RotTransSV(&D_80196920[2], &prim.v[2], &tmp); - RotTransSV(&D_80196920[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80196940; - prim.f1 = D_80196948; - prim.f2 = D_80196950; - prim.f3 = D_80196958; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_801969A0[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_801969A0[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80196994[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80196994[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80196984[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80196984[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80196994[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80196994[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80196994[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_801969B0; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_801969B0; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80196A28[])(void); - -void func_8016F6E0(void *a0) { - D_80196A28[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80196A30[])(void); - -void func_8016F798(void *a0) { - D_80196A30[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80196A38[])(void); - -void func_8016F834(void *a0) { - D_80196A38[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80196A40[])(void); - -void func_8016F8E4(void *a0) { - D_80196A40[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80196A48[])(void); - -void func_8016F9C4(void *a0) { - D_80196A48[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80196A50[])(void); - -void func_8016FA84(void *a0) { - D_80196A50[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80196A5C[])(void); - -void func_8016FB7C(void *a0) { - D_80196A5C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80196A68[])(void); - -void func_8016FC90(void *a0) { - D_80196A68[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80196A74[])(void); - -void func_8016FDB4(void *a0) { - D_80196A74[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80196A84[])(void); - -void func_8016FF30(void *a0) { - D_80196A84[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80196A94[])(void); - -void func_8016FFDC(void *a0) { - D_80196A94[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80196A9C[])(void); - -void func_80170150(void *a0) { - D_80196A9C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80196AA4[])(void); - -void func_80170240(void *a0) { - D_80196AA4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80196AAC[])(void); - -void func_801702FC(void *a0) { - D_80196AAC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80196AB4[])(void); - -void func_801703E0(void *a0) { - D_80196AB4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80196ABC[])(void); - -void func_801704B0(void *a0) { - D_80196ABC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80196AC4[])(void); - -void func_80170548(void *a0) { - D_80196AC4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80196ACC[])(void); - -void func_801705F8(void *a0) { - D_80196ACC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80196AD4[])(void); - -void func_801706AC(void *a0) { - D_80196AD4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80196ADC[])(void); - -void func_80170748(void *a0) { - D_80196ADC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80196AE4[])(void); - -void func_80170810(void *a0) { - D_80196AE4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80196AEC[])(void); - -void func_80170AD8(void *a0) { - D_80196AEC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80196AF4[])(void); - -void func_80170BD8(void *a0) { - D_80196AF4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80196AFC[])(void); - -void func_80170C74(void *a0) { - D_80196AFC[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80196B04[])(void); - -void func_80170D68(void *a0) { - D_80196B04[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80196B0C[])(void); - -void func_80170E34(void *a0) { - D_80196B0C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80196B14[])(void); - -void func_80170EFC(void *a0) { - D_80196B14[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80196B1C[])(void); - -void func_80170FB0(void *a0) { - D_80196B1C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80196B24[])(void); - -void func_80171064(void *a0) { - D_80196B24[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80196B2C[])(void); - -void func_80171120(void *a0) { - D_80196B2C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80196B34[])(void); - -void func_801711C0(void *a0) { - D_80196B34[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80196B3C[])(void); - -void func_80171260(void *a0) { - D_80196B3C[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80196B44[])(void); - -void func_801714E4(void *a0) { - D_80196B44[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8015AE2C", func_80172C50); - - -extern void (*D_80196B88[])(void); - -void func_80172CA0(void *a0) { - D_80196B88[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80196B4C; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80196B4C); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC06_018/ov_SC06_018_jr_8016AB6C.c b/src/ov_SC06_018/ov_SC06_018_jr_8016AB6C.c new file mode 100644 index 000000000..b8110b526 --- /dev/null +++ b/src/ov_SC06_018/ov_SC06_018_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80195B0C; +extern u8 D_80195A7C; +extern u8 D_80195A58; +extern u8 D_80195A34; +extern u8 D_80195AE8; +extern u8 D_80195AC4; +extern u8 D_80195AA0; +extern u8 D_80195A10; +extern void func_80145934(void); +extern u8 D_80195B9C; +extern u8 D_80195B78; +extern u8 D_80195B54; +extern u8 D_80195B30; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80194F94[]; +extern unsigned char D_80194FC4[]; +extern unsigned char D_80195014[]; +extern unsigned char D_80195044[]; +extern unsigned char D_80195074[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801950C4[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8019518C[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80195214[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8019521C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801D3D70; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801D3D74; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8019524C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801952F4[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80195318[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80195308; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8019532C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80195338[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80195348[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80195360[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80195350; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80195374[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80195390[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80195380; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801953A4[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801953B8[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801953CC; +extern void (*D_801953F4[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801953D4; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80195440[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80195444[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_801958A8[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_801958B8[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801D3DA8; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_801958E0[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801958C0; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_801958D0; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80195920[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80195928[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_801958F4; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80195934[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80195904; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801D3DB0; +extern s32 D_801D3DBC; +extern s32 D_801D3DC0; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80195970[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80195944[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801D3DB8; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80195BC0[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_801959E0[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80195C64[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80195DB8[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80195BD4; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80195DC0[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80195BE4; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80195C04; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80195DC8[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80195DF0[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80195DFC[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80195C70[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80195EA0; +extern void func_8015D380(s32 a0); +extern unsigned char D_80194F84[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80195EB4[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80195EF0[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80195F38; +extern u16 D_80195F3A; +extern u16 D_80195F3C; +extern s32 D_80195F40; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80195F48; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80195C54; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80195FCC[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_8019607C[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_801960AC[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80196110; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801D3DC8[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80196134[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801D3E20[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_8019617C[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_8019616C; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801D34A0[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80196184[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_801961D8[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_801961A0; +extern s16 D_801961D4; +extern s16 D_801961D2; +extern s16 D_801961D0; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_801961E4[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801D3E80; +extern u8 D_801D3E81; +extern u8 D_801D3E82; +extern u8 D_801D3E83; +extern u8 D_801D3E84; +extern u8 D_801D3E85; +extern u8 D_801D3E86; +extern u8 D_801D3E87; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_801961F4[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801D3EC0; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80196238[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_801962B4[]; +extern s32 D_801962D4[]; +extern u8 D_80196350[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80196370[]; +extern u8 D_80196390[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_8019642C[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_801964A8[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801D34B0; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_801964B4[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_801964BC[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80196584[])(void); +extern void func_80166618(void *a0); +extern void (*D_80196594[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_801965A4[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_801965B0[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80196510[]; +extern u8 D_80196524[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_801965C8[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_801965D0[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_801965D8[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_801965E0[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_801965E8[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_801965F0[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_801965F8[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_801966AC[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_801966B4[])(void); +extern void func_80169F00(void *a0); +extern char D_80196664[]; +extern char D_80196624[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_801966EC[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_801966F8[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80196740[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80196700[]; + extern u8 D_80196710[]; + extern u8 D_801D4190[]; + extern u8 D_801D41B8[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80196700, D_801D4190) + 3; + func_8001CE28(obj, D_801D4190); + } else { + var_s3 = func_80024054(D_80196710, D_801D41B8) + 9; + func_8001CE28(obj, D_801D41B8); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_801967BC[])(void); + +void func_8016B4BC(void *a0) { + D_801967BC[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801D41E0; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801D41E0); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_801967B0[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_801967B0; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_801967F4[]; +extern unsigned short D_801967FC[]; +extern unsigned short D_80196804[]; +extern unsigned char D_801D41E8[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801D41E8 + param_2 * 0x40); + puVar3 = D_801967F4[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_801967FC[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80196804[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801D41E0; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801D41E0, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_8019680C[])(void); + +void func_8016BBA4(void *a0) { + D_8019680C[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801D431C; + extern u8 D_801D431D; + extern u8 D_801D431E; + extern M2C_UNK D_801D4320; + extern u8 D_801D4321; + extern u8 D_801D4322; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801D431C) = 0x20; + D_801D431D = 0x20; + D_801D431E = 0; + (*(u8 *)&D_801D4320) = 0xc0; + D_801D4321 = 0xc0; + D_801D4322 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801D431C; +extern M2C_UNK D_801D4320; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801D431C, &D_801D4320, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801D431D; + extern u8 D_801D431E; + extern u8 D_801D4321; + extern u8 D_801D4322; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801D431C); + if (*p1 != 0) *p1 -= 4; + if (D_801D431D != 0) D_801D431D -= 4; + if (D_801D431E != 0) D_801D431E -= 4; + p2 = &(*(u8 *)&D_801D4320); + if (*p2 != 0) *p2 -= 4; + if (D_801D4321 != 0) D_801D4321 -= 4; + if (D_801D4322 != 0) D_801D4322 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801D431C), &(*(int *)&D_801D4320), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801D42A8; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801D42A8); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_8019681C; + extern s32 D_80196824; + extern s32 D_8019682C; + extern s32 D_80196834; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_8019681C, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80196824, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_8019682C, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80196834, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_8019683C[])(void); + +void func_8016C14C(void *a0) { + D_8019683C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801D4324[]; +extern u8 D_801D432C[]; +extern u8 D_801D42DC[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801D4324, D_801D432C, D_801D42DC); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801D4338[]; + extern u8 D_801D43F8; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801D4338[1] = 0xff; + D_801D4338[2] = 0x10; + D_801D4338[0] = 0x10; + D_801D4338[6] = 0; + D_801D4338[5] = 0; + D_801D4338[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801D4338, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801D43F8, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801D4338); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8016AB6C", func_8016C998); + + +extern void (*D_80196844[])(void); + +void func_8016CB84(void *a0) { + D_80196844[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801D43F8[]; + + + Blk_8016CF04_8016CF04 *p = &D_801D43F8[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80196860[])(void); + +void func_8016D19C(void *a0) { + D_80196860[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80196868[])(void); + +void func_8016D428(void *a0) { + D_80196868[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_801968D0[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_801968D0[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80196874; +extern u8 D_80196880; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80196874, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80196880); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80196904[])(void); + +void func_8016DEA4(void *a0) { + D_80196904[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_8019690C[])(void); + +void func_8016DF20(void *a0) { + D_8019690C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80196960[])(void); + +void func_8016E5B8(void *a0) { + D_80196960[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80196920[4]; + extern s32 D_80196940; + extern s32 D_80196948; + extern s32 D_80196950; + extern s32 D_80196958; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80196920[0], pp, &tmp); + RotTransSV(&D_80196920[1], &prim.v[1], &tmp); + RotTransSV(&D_80196920[2], &prim.v[2], &tmp); + RotTransSV(&D_80196920[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80196940; + prim.f1 = D_80196948; + prim.f2 = D_80196950; + prim.f3 = D_80196958; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_801969A0[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_801969A0[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80196994[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80196994[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80196984[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80196984[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80196994[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80196994[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80196994[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_801969B0; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_801969B0; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80196A28[])(void); + +void func_8016F6E0(void *a0) { + D_80196A28[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80196A30[])(void); + +void func_8016F798(void *a0) { + D_80196A30[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80196A38[])(void); + +void func_8016F834(void *a0) { + D_80196A38[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80196A40[])(void); + +void func_8016F8E4(void *a0) { + D_80196A40[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80196A48[])(void); + +void func_8016F9C4(void *a0) { + D_80196A48[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80196A50[])(void); + +void func_8016FA84(void *a0) { + D_80196A50[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80196A5C[])(void); + +void func_8016FB7C(void *a0) { + D_80196A5C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80196A68[])(void); + +void func_8016FC90(void *a0) { + D_80196A68[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80196A74[])(void); + +void func_8016FDB4(void *a0) { + D_80196A74[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80196A84[])(void); + +void func_8016FF30(void *a0) { + D_80196A84[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80196A94[])(void); + +void func_8016FFDC(void *a0) { + D_80196A94[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80196A9C[])(void); + +void func_80170150(void *a0) { + D_80196A9C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80196AA4[])(void); + +void func_80170240(void *a0) { + D_80196AA4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80196AAC[])(void); + +void func_801702FC(void *a0) { + D_80196AAC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80196AB4[])(void); + +void func_801703E0(void *a0) { + D_80196AB4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80196ABC[])(void); + +void func_801704B0(void *a0) { + D_80196ABC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80196AC4[])(void); + +void func_80170548(void *a0) { + D_80196AC4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80196ACC[])(void); + +void func_801705F8(void *a0) { + D_80196ACC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80196AD4[])(void); + +void func_801706AC(void *a0) { + D_80196AD4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80196ADC[])(void); + +void func_80170748(void *a0) { + D_80196ADC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80196AE4[])(void); + +void func_80170810(void *a0) { + D_80196AE4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80196AEC[])(void); + +void func_80170AD8(void *a0) { + D_80196AEC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80196AF4[])(void); + +void func_80170BD8(void *a0) { + D_80196AF4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80196AFC[])(void); + +void func_80170C74(void *a0) { + D_80196AFC[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80196B04[])(void); + +void func_80170D68(void *a0) { + D_80196B04[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80196B0C[])(void); + +void func_80170E34(void *a0) { + D_80196B0C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80196B14[])(void); + +void func_80170EFC(void *a0) { + D_80196B14[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80196B1C[])(void); + +void func_80170FB0(void *a0) { + D_80196B1C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80196B24[])(void); + +void func_80171064(void *a0) { + D_80196B24[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80196B2C[])(void); + +void func_80171120(void *a0) { + D_80196B2C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80196B34[])(void); + +void func_801711C0(void *a0) { + D_80196B34[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80196B3C[])(void); + +void func_80171260(void *a0) { + D_80196B3C[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80196B44[])(void); + +void func_801714E4(void *a0) { + D_80196B44[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8016AB6C", func_80172C50); + + +extern void (*D_80196B88[])(void); + +void func_80172CA0(void *a0) { + D_80196B88[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80196B4C; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80196B4C); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC06_020/ov_SC06_020_jr_8015AE2C.c b/src/ov_SC06_020/ov_SC06_020_jr_8015AE2C.c index 4864bf2f9..c97d2f090 100644 --- a/src/ov_SC06_020/ov_SC06_020_jr_8015AE2C.c +++ b/src/ov_SC06_020/ov_SC06_020_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_801881C8[])(void); void func_8016AB30(void *a0) { D_801881C8[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80188244[])(void); - -void func_8016B4BC(void *a0) { - D_80188244[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801B99F8; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801B99F8); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80188238[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80188238; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_8018827C[]; -extern unsigned short D_80188284[]; -extern unsigned short D_8018828C[]; -extern unsigned char D_801B9A00[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801B9A00 + param_2 * 0x40); - puVar3 = D_8018827C[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80188284[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_8018828C[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801B99F8; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801B99F8, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80188294[])(void); - -void func_8016BBA4(void *a0) { - D_80188294[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801B9B34; - extern u8 D_801B9B35; - extern u8 D_801B9B36; - extern M2C_UNK D_801B9B38; - extern u8 D_801B9B39; - extern u8 D_801B9B3A; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801B9B34) = 0x20; - D_801B9B35 = 0x20; - D_801B9B36 = 0; - (*(u8 *)&D_801B9B38) = 0xc0; - D_801B9B39 = 0xc0; - D_801B9B3A = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801B9B34; -extern M2C_UNK D_801B9B38; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801B9B34, &D_801B9B38, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801B9B35; - extern u8 D_801B9B36; - extern u8 D_801B9B39; - extern u8 D_801B9B3A; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801B9B34); - if (*p1 != 0) *p1 -= 4; - if (D_801B9B35 != 0) D_801B9B35 -= 4; - if (D_801B9B36 != 0) D_801B9B36 -= 4; - p2 = &(*(u8 *)&D_801B9B38); - if (*p2 != 0) *p2 -= 4; - if (D_801B9B39 != 0) D_801B9B39 -= 4; - if (D_801B9B3A != 0) D_801B9B3A -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801B9B34), &(*(int *)&D_801B9B38), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801B9AC0; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801B9AC0); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_801882A4; - extern s32 D_801882AC; - extern s32 D_801882B4; - extern s32 D_801882BC; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_801882A4, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_801882AC, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_801882B4, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_801882BC, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_801882C4[])(void); - -void func_8016C14C(void *a0) { - D_801882C4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801B9B3C[]; -extern u8 D_801B9B44[]; -extern u8 D_801B9AF4[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801B9B3C, D_801B9B44, D_801B9AF4); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801B9B50[]; - extern u8 D_801B9C10; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801B9B50[1] = 0xff; - D_801B9B50[2] = 0x10; - D_801B9B50[0] = 0x10; - D_801B9B50[6] = 0; - D_801B9B50[5] = 0; - D_801B9B50[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801B9B50, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801B9C10, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801B9B50); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8015AE2C", func_8016C998); - - -extern void (*D_801882CC[])(void); - -void func_8016CB84(void *a0) { - D_801882CC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801B9C10[]; - - - Blk_8016CF04_8016CF04 *p = &D_801B9C10[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_801882E8[])(void); - -void func_8016D19C(void *a0) { - D_801882E8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_801882F0[])(void); - -void func_8016D428(void *a0) { - D_801882F0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80188358[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80188358[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_801882FC; -extern u8 D_80188308; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801882FC, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80188308); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8015AE2C", func_8016DC20); - - -extern void (*D_8018838C[])(void); - -void func_8016DEA4(void *a0) { - D_8018838C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80188394[])(void); - -void func_8016DF20(void *a0) { - D_80188394[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_801883E8[])(void); - -void func_8016E5B8(void *a0) { - D_801883E8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_801883A8[4]; - extern s32 D_801883C8; - extern s32 D_801883D0; - extern s32 D_801883D8; - extern s32 D_801883E0; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_801883A8[0], pp, &tmp); - RotTransSV(&D_801883A8[1], &prim.v[1], &tmp); - RotTransSV(&D_801883A8[2], &prim.v[2], &tmp); - RotTransSV(&D_801883A8[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_801883C8; - prim.f1 = D_801883D0; - prim.f2 = D_801883D8; - prim.f3 = D_801883E0; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80188428[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80188428[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_8018841C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_8018841C[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_8018840C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_8018840C[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018841C[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_8018841C[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_8018841C[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80188438; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80188438; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_801884B0[])(void); - -void func_8016F6E0(void *a0) { - D_801884B0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_801884B8[])(void); - -void func_8016F798(void *a0) { - D_801884B8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_801884C0[])(void); - -void func_8016F834(void *a0) { - D_801884C0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_801884C8[])(void); - -void func_8016F8E4(void *a0) { - D_801884C8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_801884D0[])(void); - -void func_8016F9C4(void *a0) { - D_801884D0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_801884D8[])(void); - -void func_8016FA84(void *a0) { - D_801884D8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_801884E4[])(void); - -void func_8016FB7C(void *a0) { - D_801884E4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_801884F0[])(void); - -void func_8016FC90(void *a0) { - D_801884F0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_801884FC[])(void); - -void func_8016FDB4(void *a0) { - D_801884FC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_8018850C[])(void); - -void func_8016FF30(void *a0) { - D_8018850C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_8018851C[])(void); - -void func_8016FFDC(void *a0) { - D_8018851C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80188524[])(void); - -void func_80170150(void *a0) { - D_80188524[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_8018852C[])(void); - -void func_80170240(void *a0) { - D_8018852C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80188534[])(void); - -void func_801702FC(void *a0) { - D_80188534[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_8018853C[])(void); - -void func_801703E0(void *a0) { - D_8018853C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80188544[])(void); - -void func_801704B0(void *a0) { - D_80188544[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_8018854C[])(void); - -void func_80170548(void *a0) { - D_8018854C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80188554[])(void); - -void func_801705F8(void *a0) { - D_80188554[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_8018855C[])(void); - -void func_801706AC(void *a0) { - D_8018855C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80188564[])(void); - -void func_80170748(void *a0) { - D_80188564[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_8018856C[])(void); - -void func_80170810(void *a0) { - D_8018856C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80188574[])(void); - -void func_80170AD8(void *a0) { - D_80188574[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_8018857C[])(void); - -void func_80170BD8(void *a0) { - D_8018857C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80188584[])(void); - -void func_80170C74(void *a0) { - D_80188584[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8015AE2C", func_80170CF0); - - -extern void (*D_8018858C[])(void); - -void func_80170D68(void *a0) { - D_8018858C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80188594[])(void); - -void func_80170E34(void *a0) { - D_80188594[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_8018859C[])(void); - -void func_80170EFC(void *a0) { - D_8018859C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_801885A4[])(void); - -void func_80170FB0(void *a0) { - D_801885A4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_801885AC[])(void); - -void func_80171064(void *a0) { - D_801885AC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_801885B4[])(void); - -void func_80171120(void *a0) { - D_801885B4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_801885BC[])(void); - -void func_801711C0(void *a0) { - D_801885BC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_801885C4[])(void); - -void func_80171260(void *a0) { - D_801885C4[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_801885CC[])(void); - -void func_801714E4(void *a0) { - D_801885CC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8015AE2C", func_80172C50); - - -extern void (*D_80188610[])(void); - -void func_80172CA0(void *a0) { - D_80188610[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_801885D4; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_801885D4); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC06_020/ov_SC06_020_jr_8016AB6C.c b/src/ov_SC06_020/ov_SC06_020_jr_8016AB6C.c new file mode 100644 index 000000000..e216cbe54 --- /dev/null +++ b/src/ov_SC06_020/ov_SC06_020_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80187594; +extern u8 D_80187504; +extern u8 D_801874E0; +extern u8 D_801874BC; +extern u8 D_80187570; +extern u8 D_8018754C; +extern u8 D_80187528; +extern u8 D_80187498; +extern void func_80145934(void); +extern u8 D_80187624; +extern u8 D_80187600; +extern u8 D_801875DC; +extern u8 D_801875B8; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80186A1C[]; +extern unsigned char D_80186A4C[]; +extern unsigned char D_80186A9C[]; +extern unsigned char D_80186ACC[]; +extern unsigned char D_80186AFC[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80186B4C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80186C14[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80186C9C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80186CA4; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801B9588; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801B958C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80186CD4; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80186D7C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80186DA0[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80186D90; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80186DB4[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80186DC0[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80186DD0[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80186DE8[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80186DD8; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80186DFC[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80186E18[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80186E08; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80186E2C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80186E40[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80186E54; +extern void (*D_80186E7C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80186E5C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80186EC8[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80186ECC[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80187330[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80187340[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801B95C0; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80187368[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80187348; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80187358; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801873A8[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801873B0[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018737C; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801873BC[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018738C; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801B95C8; +extern s32 D_801B95D4; +extern s32 D_801B95D8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801873F8[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801873CC[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801B95D0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80187648[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80187468[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_801876EC[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80187840[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018765C; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80187848[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018766C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018768C; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80187850[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80187878[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80187884[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_801876F8[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80187928; +extern void func_8015D380(s32 a0); +extern unsigned char D_80186A0C[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_8018793C[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80187978[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_801879C0; +extern u16 D_801879C2; +extern u16 D_801879C4; +extern s32 D_801879C8; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_801879D0; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_801876DC; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80187A54[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80187B04[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80187B34[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80187B98; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801B95E0[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80187BBC[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801B9638[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80187C04[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80187BF4; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801B8D88[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80187C0C[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80187C60[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80187C28; +extern s16 D_80187C5C; +extern s16 D_80187C5A; +extern s16 D_80187C58; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80187C6C[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801B9698; +extern u8 D_801B9699; +extern u8 D_801B969A; +extern u8 D_801B969B; +extern u8 D_801B969C; +extern u8 D_801B969D; +extern u8 D_801B969E; +extern u8 D_801B969F; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80187C7C[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801B96D8; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80187CC0[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80187D3C[]; +extern s32 D_80187D5C[]; +extern u8 D_80187DD8[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80187DF8[]; +extern u8 D_80187E18[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80187EB4[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80187F30[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801B8D98; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80187F3C[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80187F44[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_8018800C[])(void); +extern void func_80166618(void *a0); +extern void (*D_8018801C[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_8018802C[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80188038[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80187F98[]; +extern u8 D_80187FAC[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80188050[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80188058[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80188060[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80188068[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80188070[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80188078[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80188080[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80188134[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_8018813C[])(void); +extern void func_80169F00(void *a0); +extern char D_801880EC[]; +extern char D_801880AC[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80188174[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80188180[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_801881C8[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80188188[]; + extern u8 D_80188198[]; + extern u8 D_801B99A8[]; + extern u8 D_801B99D0[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80188188, D_801B99A8) + 3; + func_8001CE28(obj, D_801B99A8); + } else { + var_s3 = func_80024054(D_80188198, D_801B99D0) + 9; + func_8001CE28(obj, D_801B99D0); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80188244[])(void); + +void func_8016B4BC(void *a0) { + D_80188244[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801B99F8; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801B99F8); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80188238[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80188238; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_8018827C[]; +extern unsigned short D_80188284[]; +extern unsigned short D_8018828C[]; +extern unsigned char D_801B9A00[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801B9A00 + param_2 * 0x40); + puVar3 = D_8018827C[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80188284[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_8018828C[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801B99F8; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801B99F8, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80188294[])(void); + +void func_8016BBA4(void *a0) { + D_80188294[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801B9B34; + extern u8 D_801B9B35; + extern u8 D_801B9B36; + extern M2C_UNK D_801B9B38; + extern u8 D_801B9B39; + extern u8 D_801B9B3A; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801B9B34) = 0x20; + D_801B9B35 = 0x20; + D_801B9B36 = 0; + (*(u8 *)&D_801B9B38) = 0xc0; + D_801B9B39 = 0xc0; + D_801B9B3A = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801B9B34; +extern M2C_UNK D_801B9B38; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801B9B34, &D_801B9B38, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801B9B35; + extern u8 D_801B9B36; + extern u8 D_801B9B39; + extern u8 D_801B9B3A; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801B9B34); + if (*p1 != 0) *p1 -= 4; + if (D_801B9B35 != 0) D_801B9B35 -= 4; + if (D_801B9B36 != 0) D_801B9B36 -= 4; + p2 = &(*(u8 *)&D_801B9B38); + if (*p2 != 0) *p2 -= 4; + if (D_801B9B39 != 0) D_801B9B39 -= 4; + if (D_801B9B3A != 0) D_801B9B3A -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801B9B34), &(*(int *)&D_801B9B38), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801B9AC0; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801B9AC0); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_801882A4; + extern s32 D_801882AC; + extern s32 D_801882B4; + extern s32 D_801882BC; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_801882A4, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_801882AC, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_801882B4, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_801882BC, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_801882C4[])(void); + +void func_8016C14C(void *a0) { + D_801882C4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801B9B3C[]; +extern u8 D_801B9B44[]; +extern u8 D_801B9AF4[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801B9B3C, D_801B9B44, D_801B9AF4); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801B9B50[]; + extern u8 D_801B9C10; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801B9B50[1] = 0xff; + D_801B9B50[2] = 0x10; + D_801B9B50[0] = 0x10; + D_801B9B50[6] = 0; + D_801B9B50[5] = 0; + D_801B9B50[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801B9B50, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801B9C10, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801B9B50); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8016AB6C", func_8016C998); + + +extern void (*D_801882CC[])(void); + +void func_8016CB84(void *a0) { + D_801882CC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801B9C10[]; + + + Blk_8016CF04_8016CF04 *p = &D_801B9C10[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_801882E8[])(void); + +void func_8016D19C(void *a0) { + D_801882E8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_801882F0[])(void); + +void func_8016D428(void *a0) { + D_801882F0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80188358[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80188358[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_801882FC; +extern u8 D_80188308; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801882FC, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80188308); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8016AB6C", func_8016DC20); + + +extern void (*D_8018838C[])(void); + +void func_8016DEA4(void *a0) { + D_8018838C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80188394[])(void); + +void func_8016DF20(void *a0) { + D_80188394[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_801883E8[])(void); + +void func_8016E5B8(void *a0) { + D_801883E8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_801883A8[4]; + extern s32 D_801883C8; + extern s32 D_801883D0; + extern s32 D_801883D8; + extern s32 D_801883E0; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_801883A8[0], pp, &tmp); + RotTransSV(&D_801883A8[1], &prim.v[1], &tmp); + RotTransSV(&D_801883A8[2], &prim.v[2], &tmp); + RotTransSV(&D_801883A8[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_801883C8; + prim.f1 = D_801883D0; + prim.f2 = D_801883D8; + prim.f3 = D_801883E0; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80188428[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80188428[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_8018841C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_8018841C[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_8018840C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_8018840C[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018841C[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_8018841C[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_8018841C[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80188438; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80188438; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_801884B0[])(void); + +void func_8016F6E0(void *a0) { + D_801884B0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_801884B8[])(void); + +void func_8016F798(void *a0) { + D_801884B8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_801884C0[])(void); + +void func_8016F834(void *a0) { + D_801884C0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_801884C8[])(void); + +void func_8016F8E4(void *a0) { + D_801884C8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_801884D0[])(void); + +void func_8016F9C4(void *a0) { + D_801884D0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_801884D8[])(void); + +void func_8016FA84(void *a0) { + D_801884D8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_801884E4[])(void); + +void func_8016FB7C(void *a0) { + D_801884E4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_801884F0[])(void); + +void func_8016FC90(void *a0) { + D_801884F0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_801884FC[])(void); + +void func_8016FDB4(void *a0) { + D_801884FC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_8018850C[])(void); + +void func_8016FF30(void *a0) { + D_8018850C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_8018851C[])(void); + +void func_8016FFDC(void *a0) { + D_8018851C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80188524[])(void); + +void func_80170150(void *a0) { + D_80188524[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_8018852C[])(void); + +void func_80170240(void *a0) { + D_8018852C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80188534[])(void); + +void func_801702FC(void *a0) { + D_80188534[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_8018853C[])(void); + +void func_801703E0(void *a0) { + D_8018853C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80188544[])(void); + +void func_801704B0(void *a0) { + D_80188544[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_8018854C[])(void); + +void func_80170548(void *a0) { + D_8018854C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80188554[])(void); + +void func_801705F8(void *a0) { + D_80188554[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_8018855C[])(void); + +void func_801706AC(void *a0) { + D_8018855C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80188564[])(void); + +void func_80170748(void *a0) { + D_80188564[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_8018856C[])(void); + +void func_80170810(void *a0) { + D_8018856C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80188574[])(void); + +void func_80170AD8(void *a0) { + D_80188574[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_8018857C[])(void); + +void func_80170BD8(void *a0) { + D_8018857C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80188584[])(void); + +void func_80170C74(void *a0) { + D_80188584[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8016AB6C", func_80170CF0); + + +extern void (*D_8018858C[])(void); + +void func_80170D68(void *a0) { + D_8018858C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80188594[])(void); + +void func_80170E34(void *a0) { + D_80188594[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_8018859C[])(void); + +void func_80170EFC(void *a0) { + D_8018859C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_801885A4[])(void); + +void func_80170FB0(void *a0) { + D_801885A4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_801885AC[])(void); + +void func_80171064(void *a0) { + D_801885AC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_801885B4[])(void); + +void func_80171120(void *a0) { + D_801885B4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_801885BC[])(void); + +void func_801711C0(void *a0) { + D_801885BC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_801885C4[])(void); + +void func_80171260(void *a0) { + D_801885C4[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_801885CC[])(void); + +void func_801714E4(void *a0) { + D_801885CC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8016AB6C", func_80172C50); + + +extern void (*D_80188610[])(void); + +void func_80172CA0(void *a0) { + D_80188610[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_801885D4; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_801885D4); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC06_022/ov_SC06_022_jr_8015AE2C.c b/src/ov_SC06_022/ov_SC06_022_jr_8015AE2C.c index 3ad799ac3..3ffa47c1b 100644 --- a/src/ov_SC06_022/ov_SC06_022_jr_8015AE2C.c +++ b/src/ov_SC06_022/ov_SC06_022_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_80190484[])(void); void func_8016AB30(void *a0) { D_80190484[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80190500[])(void); - -void func_8016B4BC(void *a0) { - D_80190500[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801E1260; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801E1260); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_801904F4[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_801904F4; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80190538[]; -extern unsigned short D_80190540[]; -extern unsigned short D_80190548[]; -extern unsigned char D_801E1268[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801E1268 + param_2 * 0x40); - puVar3 = D_80190538[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80190540[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80190548[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801E1260; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801E1260, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80190550[])(void); - -void func_8016BBA4(void *a0) { - D_80190550[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801E139C; - extern u8 D_801E139D; - extern u8 D_801E139E; - extern M2C_UNK D_801E13A0; - extern u8 D_801E13A1; - extern u8 D_801E13A2; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801E139C) = 0x20; - D_801E139D = 0x20; - D_801E139E = 0; - (*(u8 *)&D_801E13A0) = 0xc0; - D_801E13A1 = 0xc0; - D_801E13A2 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801E139C; -extern M2C_UNK D_801E13A0; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801E139C, &D_801E13A0, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801E139D; - extern u8 D_801E139E; - extern u8 D_801E13A1; - extern u8 D_801E13A2; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801E139C); - if (*p1 != 0) *p1 -= 4; - if (D_801E139D != 0) D_801E139D -= 4; - if (D_801E139E != 0) D_801E139E -= 4; - p2 = &(*(u8 *)&D_801E13A0); - if (*p2 != 0) *p2 -= 4; - if (D_801E13A1 != 0) D_801E13A1 -= 4; - if (D_801E13A2 != 0) D_801E13A2 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801E139C), &(*(int *)&D_801E13A0), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801E1328; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801E1328); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80190560; - extern s32 D_80190568; - extern s32 D_80190570; - extern s32 D_80190578; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80190560, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80190568, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80190570, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80190578, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80190580[])(void); - -void func_8016C14C(void *a0) { - D_80190580[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801E13A4[]; -extern u8 D_801E13AC[]; -extern u8 D_801E135C[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801E13A4, D_801E13AC, D_801E135C); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801E13B8[]; - extern u8 D_801E1478; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801E13B8[1] = 0xff; - D_801E13B8[2] = 0x10; - D_801E13B8[0] = 0x10; - D_801E13B8[6] = 0; - D_801E13B8[5] = 0; - D_801E13B8[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801E13B8, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801E1478, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801E13B8); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8015AE2C", func_8016C998); - - -extern void (*D_80190588[])(void); - -void func_8016CB84(void *a0) { - D_80190588[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801E1478[]; - - - Blk_8016CF04_8016CF04 *p = &D_801E1478[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_801905A4[])(void); - -void func_8016D19C(void *a0) { - D_801905A4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_801905AC[])(void); - -void func_8016D428(void *a0) { - D_801905AC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80190614[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80190614[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_801905B8; -extern u8 D_801905C4; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801905B8, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801905C4); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80190648[])(void); - -void func_8016DEA4(void *a0) { - D_80190648[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80190650[])(void); - -void func_8016DF20(void *a0) { - D_80190650[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_801906A4[])(void); - -void func_8016E5B8(void *a0) { - D_801906A4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80190664[4]; - extern s32 D_80190684; - extern s32 D_8019068C; - extern s32 D_80190694; - extern s32 D_8019069C; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80190664[0], pp, &tmp); - RotTransSV(&D_80190664[1], &prim.v[1], &tmp); - RotTransSV(&D_80190664[2], &prim.v[2], &tmp); - RotTransSV(&D_80190664[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80190684; - prim.f1 = D_8019068C; - prim.f2 = D_80190694; - prim.f3 = D_8019069C; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_801906E4[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_801906E4[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_801906D8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_801906D8[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_801906C8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_801906C8[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801906D8[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_801906D8[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_801906D8[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_801906F4; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_801906F4; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_8019076C[])(void); - -void func_8016F6E0(void *a0) { - D_8019076C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80190774[])(void); - -void func_8016F798(void *a0) { - D_80190774[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_8019077C[])(void); - -void func_8016F834(void *a0) { - D_8019077C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80190784[])(void); - -void func_8016F8E4(void *a0) { - D_80190784[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_8019078C[])(void); - -void func_8016F9C4(void *a0) { - D_8019078C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80190794[])(void); - -void func_8016FA84(void *a0) { - D_80190794[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_801907A0[])(void); - -void func_8016FB7C(void *a0) { - D_801907A0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_801907AC[])(void); - -void func_8016FC90(void *a0) { - D_801907AC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_801907B8[])(void); - -void func_8016FDB4(void *a0) { - D_801907B8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_801907C8[])(void); - -void func_8016FF30(void *a0) { - D_801907C8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_801907D8[])(void); - -void func_8016FFDC(void *a0) { - D_801907D8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_801907E0[])(void); - -void func_80170150(void *a0) { - D_801907E0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_801907E8[])(void); - -void func_80170240(void *a0) { - D_801907E8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_801907F0[])(void); - -void func_801702FC(void *a0) { - D_801907F0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_801907F8[])(void); - -void func_801703E0(void *a0) { - D_801907F8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80190800[])(void); - -void func_801704B0(void *a0) { - D_80190800[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80190808[])(void); - -void func_80170548(void *a0) { - D_80190808[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80190810[])(void); - -void func_801705F8(void *a0) { - D_80190810[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80190818[])(void); - -void func_801706AC(void *a0) { - D_80190818[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80190820[])(void); - -void func_80170748(void *a0) { - D_80190820[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80190828[])(void); - -void func_80170810(void *a0) { - D_80190828[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80190830[])(void); - -void func_80170AD8(void *a0) { - D_80190830[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80190838[])(void); - -void func_80170BD8(void *a0) { - D_80190838[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80190840[])(void); - -void func_80170C74(void *a0) { - D_80190840[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80190848[])(void); - -void func_80170D68(void *a0) { - D_80190848[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80190850[])(void); - -void func_80170E34(void *a0) { - D_80190850[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80190858[])(void); - -void func_80170EFC(void *a0) { - D_80190858[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80190860[])(void); - -void func_80170FB0(void *a0) { - D_80190860[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80190868[])(void); - -void func_80171064(void *a0) { - D_80190868[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80190870[])(void); - -void func_80171120(void *a0) { - D_80190870[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80190878[])(void); - -void func_801711C0(void *a0) { - D_80190878[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80190880[])(void); - -void func_80171260(void *a0) { - D_80190880[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80190888[])(void); - -void func_801714E4(void *a0) { - D_80190888[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8015AE2C", func_80172C50); - - -extern void (*D_801908CC[])(void); - -void func_80172CA0(void *a0) { - D_801908CC[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80190890; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80190890); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC06_022/ov_SC06_022_jr_8016AB6C.c b/src/ov_SC06_022/ov_SC06_022_jr_8016AB6C.c new file mode 100644 index 000000000..006e90313 --- /dev/null +++ b/src/ov_SC06_022/ov_SC06_022_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018F850; +extern u8 D_8018F7C0; +extern u8 D_8018F79C; +extern u8 D_8018F778; +extern u8 D_8018F82C; +extern u8 D_8018F808; +extern u8 D_8018F7E4; +extern u8 D_8018F754; +extern void func_80145934(void); +extern u8 D_8018F8E0; +extern u8 D_8018F8BC; +extern u8 D_8018F898; +extern u8 D_8018F874; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018ECD8[]; +extern unsigned char D_8018ED08[]; +extern unsigned char D_8018ED58[]; +extern unsigned char D_8018ED88[]; +extern unsigned char D_8018EDB8[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018EE08[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018EED0[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018EF58[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018EF60; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801E0DF0; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801E0DF4; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018EF90; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018F038[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018F05C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018F04C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018F070[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018F07C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018F08C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018F0A4[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018F094; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018F0B8[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018F0D4[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018F0C4; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018F0E8[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018F0FC[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018F110; +extern void (*D_8018F138[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018F118; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018F184[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018F188[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018F5EC[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018F5FC[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801E0E28; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018F624[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018F604; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018F614; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018F664[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018F66C[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018F638; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018F678[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018F648; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801E0E30; +extern s32 D_801E0E3C; +extern s32 D_801E0E40; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018F6B4[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018F688[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801E0E38; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018F904[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018F724[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018F9A8[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018FAFC[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018F918; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018FB04[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018F928; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018F948; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_8018FB0C[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_8018FB34[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_8018FB40[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_8018F9B4[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_8018FBE4; +extern void func_8015D380(s32 a0); +extern unsigned char D_8018ECC8[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_8018FBF8[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_8018FC34[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_8018FC7C; +extern u16 D_8018FC7E; +extern u16 D_8018FC80; +extern s32 D_8018FC84; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_8018FC8C; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_8018F998; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_8018FD10[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_8018FDC0[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_8018FDF0[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_8018FE54; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801E0E48[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_8018FE78[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801E0EA0[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_8018FEC0[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_8018FEB0; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801E0598[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_8018FEC8[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_8018FF1C[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_8018FEE4; +extern s16 D_8018FF18; +extern s16 D_8018FF16; +extern s16 D_8018FF14; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_8018FF28[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801E0F00; +extern u8 D_801E0F01; +extern u8 D_801E0F02; +extern u8 D_801E0F03; +extern u8 D_801E0F04; +extern u8 D_801E0F05; +extern u8 D_801E0F06; +extern u8 D_801E0F07; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_8018FF38[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801E0F40; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_8018FF7C[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_8018FFF8[]; +extern s32 D_80190018[]; +extern u8 D_80190094[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_801900B4[]; +extern u8 D_801900D4[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80190170[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_801901EC[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801E05A8; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_801901F8[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80190200[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_801902C8[])(void); +extern void func_80166618(void *a0); +extern void (*D_801902D8[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_801902E8[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_801902F4[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80190254[]; +extern u8 D_80190268[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_8019030C[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80190314[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_8019031C[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80190324[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_8019032C[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80190334[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_8019033C[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_801903F0[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_801903F8[])(void); +extern void func_80169F00(void *a0); +extern char D_801903A8[]; +extern char D_80190368[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80190430[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_8019043C[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80190484[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80190444[]; + extern u8 D_80190454[]; + extern u8 D_801E1210[]; + extern u8 D_801E1238[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80190444, D_801E1210) + 3; + func_8001CE28(obj, D_801E1210); + } else { + var_s3 = func_80024054(D_80190454, D_801E1238) + 9; + func_8001CE28(obj, D_801E1238); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80190500[])(void); + +void func_8016B4BC(void *a0) { + D_80190500[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801E1260; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801E1260); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_801904F4[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_801904F4; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80190538[]; +extern unsigned short D_80190540[]; +extern unsigned short D_80190548[]; +extern unsigned char D_801E1268[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801E1268 + param_2 * 0x40); + puVar3 = D_80190538[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80190540[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80190548[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801E1260; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801E1260, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80190550[])(void); + +void func_8016BBA4(void *a0) { + D_80190550[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801E139C; + extern u8 D_801E139D; + extern u8 D_801E139E; + extern M2C_UNK D_801E13A0; + extern u8 D_801E13A1; + extern u8 D_801E13A2; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801E139C) = 0x20; + D_801E139D = 0x20; + D_801E139E = 0; + (*(u8 *)&D_801E13A0) = 0xc0; + D_801E13A1 = 0xc0; + D_801E13A2 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801E139C; +extern M2C_UNK D_801E13A0; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801E139C, &D_801E13A0, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801E139D; + extern u8 D_801E139E; + extern u8 D_801E13A1; + extern u8 D_801E13A2; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801E139C); + if (*p1 != 0) *p1 -= 4; + if (D_801E139D != 0) D_801E139D -= 4; + if (D_801E139E != 0) D_801E139E -= 4; + p2 = &(*(u8 *)&D_801E13A0); + if (*p2 != 0) *p2 -= 4; + if (D_801E13A1 != 0) D_801E13A1 -= 4; + if (D_801E13A2 != 0) D_801E13A2 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801E139C), &(*(int *)&D_801E13A0), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801E1328; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801E1328); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80190560; + extern s32 D_80190568; + extern s32 D_80190570; + extern s32 D_80190578; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80190560, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80190568, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80190570, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80190578, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80190580[])(void); + +void func_8016C14C(void *a0) { + D_80190580[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801E13A4[]; +extern u8 D_801E13AC[]; +extern u8 D_801E135C[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801E13A4, D_801E13AC, D_801E135C); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801E13B8[]; + extern u8 D_801E1478; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801E13B8[1] = 0xff; + D_801E13B8[2] = 0x10; + D_801E13B8[0] = 0x10; + D_801E13B8[6] = 0; + D_801E13B8[5] = 0; + D_801E13B8[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801E13B8, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801E1478, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801E13B8); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8016AB6C", func_8016C998); + + +extern void (*D_80190588[])(void); + +void func_8016CB84(void *a0) { + D_80190588[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801E1478[]; + + + Blk_8016CF04_8016CF04 *p = &D_801E1478[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_801905A4[])(void); + +void func_8016D19C(void *a0) { + D_801905A4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_801905AC[])(void); + +void func_8016D428(void *a0) { + D_801905AC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80190614[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80190614[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_801905B8; +extern u8 D_801905C4; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801905B8, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801905C4); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80190648[])(void); + +void func_8016DEA4(void *a0) { + D_80190648[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80190650[])(void); + +void func_8016DF20(void *a0) { + D_80190650[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_801906A4[])(void); + +void func_8016E5B8(void *a0) { + D_801906A4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80190664[4]; + extern s32 D_80190684; + extern s32 D_8019068C; + extern s32 D_80190694; + extern s32 D_8019069C; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80190664[0], pp, &tmp); + RotTransSV(&D_80190664[1], &prim.v[1], &tmp); + RotTransSV(&D_80190664[2], &prim.v[2], &tmp); + RotTransSV(&D_80190664[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80190684; + prim.f1 = D_8019068C; + prim.f2 = D_80190694; + prim.f3 = D_8019069C; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_801906E4[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_801906E4[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_801906D8[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_801906D8[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_801906C8[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_801906C8[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801906D8[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_801906D8[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_801906D8[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_801906F4; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_801906F4; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_8019076C[])(void); + +void func_8016F6E0(void *a0) { + D_8019076C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80190774[])(void); + +void func_8016F798(void *a0) { + D_80190774[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_8019077C[])(void); + +void func_8016F834(void *a0) { + D_8019077C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80190784[])(void); + +void func_8016F8E4(void *a0) { + D_80190784[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_8019078C[])(void); + +void func_8016F9C4(void *a0) { + D_8019078C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80190794[])(void); + +void func_8016FA84(void *a0) { + D_80190794[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_801907A0[])(void); + +void func_8016FB7C(void *a0) { + D_801907A0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_801907AC[])(void); + +void func_8016FC90(void *a0) { + D_801907AC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_801907B8[])(void); + +void func_8016FDB4(void *a0) { + D_801907B8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_801907C8[])(void); + +void func_8016FF30(void *a0) { + D_801907C8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_801907D8[])(void); + +void func_8016FFDC(void *a0) { + D_801907D8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_801907E0[])(void); + +void func_80170150(void *a0) { + D_801907E0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_801907E8[])(void); + +void func_80170240(void *a0) { + D_801907E8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_801907F0[])(void); + +void func_801702FC(void *a0) { + D_801907F0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_801907F8[])(void); + +void func_801703E0(void *a0) { + D_801907F8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80190800[])(void); + +void func_801704B0(void *a0) { + D_80190800[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80190808[])(void); + +void func_80170548(void *a0) { + D_80190808[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80190810[])(void); + +void func_801705F8(void *a0) { + D_80190810[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80190818[])(void); + +void func_801706AC(void *a0) { + D_80190818[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80190820[])(void); + +void func_80170748(void *a0) { + D_80190820[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80190828[])(void); + +void func_80170810(void *a0) { + D_80190828[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80190830[])(void); + +void func_80170AD8(void *a0) { + D_80190830[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80190838[])(void); + +void func_80170BD8(void *a0) { + D_80190838[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80190840[])(void); + +void func_80170C74(void *a0) { + D_80190840[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80190848[])(void); + +void func_80170D68(void *a0) { + D_80190848[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80190850[])(void); + +void func_80170E34(void *a0) { + D_80190850[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80190858[])(void); + +void func_80170EFC(void *a0) { + D_80190858[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80190860[])(void); + +void func_80170FB0(void *a0) { + D_80190860[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80190868[])(void); + +void func_80171064(void *a0) { + D_80190868[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80190870[])(void); + +void func_80171120(void *a0) { + D_80190870[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80190878[])(void); + +void func_801711C0(void *a0) { + D_80190878[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80190880[])(void); + +void func_80171260(void *a0) { + D_80190880[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80190888[])(void); + +void func_801714E4(void *a0) { + D_80190888[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8016AB6C", func_80172C50); + + +extern void (*D_801908CC[])(void); + +void func_80172CA0(void *a0) { + D_801908CC[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80190890; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80190890); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC06_024/ov_SC06_024_jr_8015AE2C.c b/src/ov_SC06_024/ov_SC06_024_jr_8015AE2C.c index 5497b58dc..f6731c7b6 100644 --- a/src/ov_SC06_024/ov_SC06_024_jr_8015AE2C.c +++ b/src/ov_SC06_024/ov_SC06_024_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_8019295C[])(void); void func_8016AB30(void *a0) { D_8019295C[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_801929D8[])(void); - -void func_8016B4BC(void *a0) { - D_801929D8[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801E03E0; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801E03E0); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_801929CC[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_801929CC; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80192A10[]; -extern unsigned short D_80192A18[]; -extern unsigned short D_80192A20[]; -extern unsigned char D_801E03E8[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801E03E8 + param_2 * 0x40); - puVar3 = D_80192A10[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80192A18[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80192A20[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801E03E0; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801E03E0, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80192A28[])(void); - -void func_8016BBA4(void *a0) { - D_80192A28[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801E051C; - extern u8 D_801E051D; - extern u8 D_801E051E; - extern M2C_UNK D_801E0520; - extern u8 D_801E0521; - extern u8 D_801E0522; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801E051C) = 0x20; - D_801E051D = 0x20; - D_801E051E = 0; - (*(u8 *)&D_801E0520) = 0xc0; - D_801E0521 = 0xc0; - D_801E0522 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801E051C; -extern M2C_UNK D_801E0520; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801E051C, &D_801E0520, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801E051D; - extern u8 D_801E051E; - extern u8 D_801E0521; - extern u8 D_801E0522; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801E051C); - if (*p1 != 0) *p1 -= 4; - if (D_801E051D != 0) D_801E051D -= 4; - if (D_801E051E != 0) D_801E051E -= 4; - p2 = &(*(u8 *)&D_801E0520); - if (*p2 != 0) *p2 -= 4; - if (D_801E0521 != 0) D_801E0521 -= 4; - if (D_801E0522 != 0) D_801E0522 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801E051C), &(*(int *)&D_801E0520), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801E04A8; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801E04A8); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80192A38; - extern s32 D_80192A40; - extern s32 D_80192A48; - extern s32 D_80192A50; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80192A38, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80192A40, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80192A48, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80192A50, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80192A58[])(void); - -void func_8016C14C(void *a0) { - D_80192A58[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801E0524[]; -extern u8 D_801E052C[]; -extern u8 D_801E04DC[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801E0524, D_801E052C, D_801E04DC); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801E0538[]; - extern u8 D_801E05F8; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801E0538[1] = 0xff; - D_801E0538[2] = 0x10; - D_801E0538[0] = 0x10; - D_801E0538[6] = 0; - D_801E0538[5] = 0; - D_801E0538[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801E0538, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801E05F8, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801E0538); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8015AE2C", func_8016C998); - - -extern void (*D_80192A60[])(void); - -void func_8016CB84(void *a0) { - D_80192A60[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801E05F8[]; - - - Blk_8016CF04_8016CF04 *p = &D_801E05F8[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80192A7C[])(void); - -void func_8016D19C(void *a0) { - D_80192A7C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80192A84[])(void); - -void func_8016D428(void *a0) { - D_80192A84[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80192AEC[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80192AEC[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80192A90; -extern u8 D_80192A9C; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80192A90, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80192A9C); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80192B20[])(void); - -void func_8016DEA4(void *a0) { - D_80192B20[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80192B28[])(void); - -void func_8016DF20(void *a0) { - D_80192B28[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80192B7C[])(void); - -void func_8016E5B8(void *a0) { - D_80192B7C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80192B3C[4]; - extern s32 D_80192B5C; - extern s32 D_80192B64; - extern s32 D_80192B6C; - extern s32 D_80192B74; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80192B3C[0], pp, &tmp); - RotTransSV(&D_80192B3C[1], &prim.v[1], &tmp); - RotTransSV(&D_80192B3C[2], &prim.v[2], &tmp); - RotTransSV(&D_80192B3C[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80192B5C; - prim.f1 = D_80192B64; - prim.f2 = D_80192B6C; - prim.f3 = D_80192B74; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80192BBC[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80192BBC[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80192BB0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80192BB0[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80192BA0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80192BA0[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80192BB0[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80192BB0[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80192BB0[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80192BCC; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80192BCC; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80192C44[])(void); - -void func_8016F6E0(void *a0) { - D_80192C44[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80192C4C[])(void); - -void func_8016F798(void *a0) { - D_80192C4C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80192C54[])(void); - -void func_8016F834(void *a0) { - D_80192C54[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80192C5C[])(void); - -void func_8016F8E4(void *a0) { - D_80192C5C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80192C64[])(void); - -void func_8016F9C4(void *a0) { - D_80192C64[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80192C6C[])(void); - -void func_8016FA84(void *a0) { - D_80192C6C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80192C78[])(void); - -void func_8016FB7C(void *a0) { - D_80192C78[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80192C84[])(void); - -void func_8016FC90(void *a0) { - D_80192C84[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80192C90[])(void); - -void func_8016FDB4(void *a0) { - D_80192C90[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80192CA0[])(void); - -void func_8016FF30(void *a0) { - D_80192CA0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80192CB0[])(void); - -void func_8016FFDC(void *a0) { - D_80192CB0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80192CB8[])(void); - -void func_80170150(void *a0) { - D_80192CB8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80192CC0[])(void); - -void func_80170240(void *a0) { - D_80192CC0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80192CC8[])(void); - -void func_801702FC(void *a0) { - D_80192CC8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80192CD0[])(void); - -void func_801703E0(void *a0) { - D_80192CD0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80192CD8[])(void); - -void func_801704B0(void *a0) { - D_80192CD8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80192CE0[])(void); - -void func_80170548(void *a0) { - D_80192CE0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80192CE8[])(void); - -void func_801705F8(void *a0) { - D_80192CE8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80192CF0[])(void); - -void func_801706AC(void *a0) { - D_80192CF0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80192CF8[])(void); - -void func_80170748(void *a0) { - D_80192CF8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80192D00[])(void); - -void func_80170810(void *a0) { - D_80192D00[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80192D08[])(void); - -void func_80170AD8(void *a0) { - D_80192D08[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80192D10[])(void); - -void func_80170BD8(void *a0) { - D_80192D10[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80192D18[])(void); - -void func_80170C74(void *a0) { - D_80192D18[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80192D20[])(void); - -void func_80170D68(void *a0) { - D_80192D20[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80192D28[])(void); - -void func_80170E34(void *a0) { - D_80192D28[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80192D30[])(void); - -void func_80170EFC(void *a0) { - D_80192D30[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80192D38[])(void); - -void func_80170FB0(void *a0) { - D_80192D38[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80192D40[])(void); - -void func_80171064(void *a0) { - D_80192D40[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80192D48[])(void); - -void func_80171120(void *a0) { - D_80192D48[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80192D50[])(void); - -void func_801711C0(void *a0) { - D_80192D50[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80192D58[])(void); - -void func_80171260(void *a0) { - D_80192D58[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80192D60[])(void); - -void func_801714E4(void *a0) { - D_80192D60[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8015AE2C", func_80172C50); - - -extern void (*D_80192DA4[])(void); - -void func_80172CA0(void *a0) { - D_80192DA4[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80192D68; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80192D68); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC06_024/ov_SC06_024_jr_8016AB6C.c b/src/ov_SC06_024/ov_SC06_024_jr_8016AB6C.c new file mode 100644 index 000000000..29e8757d6 --- /dev/null +++ b/src/ov_SC06_024/ov_SC06_024_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80191D28; +extern u8 D_80191C98; +extern u8 D_80191C74; +extern u8 D_80191C50; +extern u8 D_80191D04; +extern u8 D_80191CE0; +extern u8 D_80191CBC; +extern u8 D_80191C2C; +extern void func_80145934(void); +extern u8 D_80191DB8; +extern u8 D_80191D94; +extern u8 D_80191D70; +extern u8 D_80191D4C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801911B0[]; +extern unsigned char D_801911E0[]; +extern unsigned char D_80191230[]; +extern unsigned char D_80191260[]; +extern unsigned char D_80191290[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801912E0[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801913A8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80191430[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80191438; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801DFF70; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801DFF74; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80191468; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80191510[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80191534[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80191524; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80191548[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80191554[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80191564[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8019157C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8019156C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80191590[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801915AC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8019159C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801915C0[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801915D4[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801915E8; +extern void (*D_80191610[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801915F0; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8019165C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80191660[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80191AC4[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80191AD4[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801DFFA8; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80191AFC[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80191ADC; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80191AEC; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80191B3C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80191B44[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80191B10; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80191B50[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80191B20; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801DFFB0; +extern s32 D_801DFFBC; +extern s32 D_801DFFC0; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80191B8C[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80191B60[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801DFFB8; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80191DDC[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80191BFC[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80191E80[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80191FD4[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80191DF0; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80191FDC[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80191E00; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80191E20; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80191FE4[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_8019200C[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80192018[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80191E8C[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_801920BC; +extern void func_8015D380(s32 a0); +extern unsigned char D_801911A0[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_801920D0[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_8019210C[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80192154; +extern u16 D_80192156; +extern u16 D_80192158; +extern s32 D_8019215C; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80192164; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80191E70; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_801921E8[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80192298[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_801922C8[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_8019232C; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801DFFC8[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80192350[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801E0020[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80192398[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80192388; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801DF6DC[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_801923A0[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_801923F4[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_801923BC; +extern s16 D_801923F0; +extern s16 D_801923EE; +extern s16 D_801923EC; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80192400[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801E0080; +extern u8 D_801E0081; +extern u8 D_801E0082; +extern u8 D_801E0083; +extern u8 D_801E0084; +extern u8 D_801E0085; +extern u8 D_801E0086; +extern u8 D_801E0087; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80192410[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801E00C0; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80192454[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_801924D0[]; +extern s32 D_801924F0[]; +extern u8 D_8019256C[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_8019258C[]; +extern u8 D_801925AC[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80192648[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_801926C4[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801DF6EC; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_801926D0[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_801926D8[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_801927A0[])(void); +extern void func_80166618(void *a0); +extern void (*D_801927B0[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_801927C0[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_801927CC[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_8019272C[]; +extern u8 D_80192740[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_801927E4[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_801927EC[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_801927F4[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_801927FC[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80192804[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_8019280C[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80192814[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_801928C8[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_801928D0[])(void); +extern void func_80169F00(void *a0); +extern char D_80192880[]; +extern char D_80192840[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80192908[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80192914[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_8019295C[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_8019291C[]; + extern u8 D_8019292C[]; + extern u8 D_801E0390[]; + extern u8 D_801E03B8[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_8019291C, D_801E0390) + 3; + func_8001CE28(obj, D_801E0390); + } else { + var_s3 = func_80024054(D_8019292C, D_801E03B8) + 9; + func_8001CE28(obj, D_801E03B8); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_801929D8[])(void); + +void func_8016B4BC(void *a0) { + D_801929D8[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801E03E0; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801E03E0); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_801929CC[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_801929CC; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80192A10[]; +extern unsigned short D_80192A18[]; +extern unsigned short D_80192A20[]; +extern unsigned char D_801E03E8[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801E03E8 + param_2 * 0x40); + puVar3 = D_80192A10[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80192A18[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80192A20[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801E03E0; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801E03E0, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80192A28[])(void); + +void func_8016BBA4(void *a0) { + D_80192A28[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801E051C; + extern u8 D_801E051D; + extern u8 D_801E051E; + extern M2C_UNK D_801E0520; + extern u8 D_801E0521; + extern u8 D_801E0522; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801E051C) = 0x20; + D_801E051D = 0x20; + D_801E051E = 0; + (*(u8 *)&D_801E0520) = 0xc0; + D_801E0521 = 0xc0; + D_801E0522 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801E051C; +extern M2C_UNK D_801E0520; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801E051C, &D_801E0520, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801E051D; + extern u8 D_801E051E; + extern u8 D_801E0521; + extern u8 D_801E0522; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801E051C); + if (*p1 != 0) *p1 -= 4; + if (D_801E051D != 0) D_801E051D -= 4; + if (D_801E051E != 0) D_801E051E -= 4; + p2 = &(*(u8 *)&D_801E0520); + if (*p2 != 0) *p2 -= 4; + if (D_801E0521 != 0) D_801E0521 -= 4; + if (D_801E0522 != 0) D_801E0522 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801E051C), &(*(int *)&D_801E0520), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801E04A8; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801E04A8); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80192A38; + extern s32 D_80192A40; + extern s32 D_80192A48; + extern s32 D_80192A50; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80192A38, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80192A40, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80192A48, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80192A50, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80192A58[])(void); + +void func_8016C14C(void *a0) { + D_80192A58[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801E0524[]; +extern u8 D_801E052C[]; +extern u8 D_801E04DC[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801E0524, D_801E052C, D_801E04DC); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801E0538[]; + extern u8 D_801E05F8; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801E0538[1] = 0xff; + D_801E0538[2] = 0x10; + D_801E0538[0] = 0x10; + D_801E0538[6] = 0; + D_801E0538[5] = 0; + D_801E0538[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801E0538, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801E05F8, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801E0538); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8016AB6C", func_8016C998); + + +extern void (*D_80192A60[])(void); + +void func_8016CB84(void *a0) { + D_80192A60[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801E05F8[]; + + + Blk_8016CF04_8016CF04 *p = &D_801E05F8[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80192A7C[])(void); + +void func_8016D19C(void *a0) { + D_80192A7C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80192A84[])(void); + +void func_8016D428(void *a0) { + D_80192A84[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80192AEC[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80192AEC[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80192A90; +extern u8 D_80192A9C; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80192A90, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80192A9C); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80192B20[])(void); + +void func_8016DEA4(void *a0) { + D_80192B20[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80192B28[])(void); + +void func_8016DF20(void *a0) { + D_80192B28[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80192B7C[])(void); + +void func_8016E5B8(void *a0) { + D_80192B7C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80192B3C[4]; + extern s32 D_80192B5C; + extern s32 D_80192B64; + extern s32 D_80192B6C; + extern s32 D_80192B74; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80192B3C[0], pp, &tmp); + RotTransSV(&D_80192B3C[1], &prim.v[1], &tmp); + RotTransSV(&D_80192B3C[2], &prim.v[2], &tmp); + RotTransSV(&D_80192B3C[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80192B5C; + prim.f1 = D_80192B64; + prim.f2 = D_80192B6C; + prim.f3 = D_80192B74; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80192BBC[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80192BBC[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80192BB0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80192BB0[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80192BA0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80192BA0[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80192BB0[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80192BB0[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80192BB0[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80192BCC; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80192BCC; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80192C44[])(void); + +void func_8016F6E0(void *a0) { + D_80192C44[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80192C4C[])(void); + +void func_8016F798(void *a0) { + D_80192C4C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80192C54[])(void); + +void func_8016F834(void *a0) { + D_80192C54[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80192C5C[])(void); + +void func_8016F8E4(void *a0) { + D_80192C5C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80192C64[])(void); + +void func_8016F9C4(void *a0) { + D_80192C64[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80192C6C[])(void); + +void func_8016FA84(void *a0) { + D_80192C6C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80192C78[])(void); + +void func_8016FB7C(void *a0) { + D_80192C78[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80192C84[])(void); + +void func_8016FC90(void *a0) { + D_80192C84[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80192C90[])(void); + +void func_8016FDB4(void *a0) { + D_80192C90[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80192CA0[])(void); + +void func_8016FF30(void *a0) { + D_80192CA0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80192CB0[])(void); + +void func_8016FFDC(void *a0) { + D_80192CB0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80192CB8[])(void); + +void func_80170150(void *a0) { + D_80192CB8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80192CC0[])(void); + +void func_80170240(void *a0) { + D_80192CC0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80192CC8[])(void); + +void func_801702FC(void *a0) { + D_80192CC8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80192CD0[])(void); + +void func_801703E0(void *a0) { + D_80192CD0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80192CD8[])(void); + +void func_801704B0(void *a0) { + D_80192CD8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80192CE0[])(void); + +void func_80170548(void *a0) { + D_80192CE0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80192CE8[])(void); + +void func_801705F8(void *a0) { + D_80192CE8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80192CF0[])(void); + +void func_801706AC(void *a0) { + D_80192CF0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80192CF8[])(void); + +void func_80170748(void *a0) { + D_80192CF8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80192D00[])(void); + +void func_80170810(void *a0) { + D_80192D00[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80192D08[])(void); + +void func_80170AD8(void *a0) { + D_80192D08[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80192D10[])(void); + +void func_80170BD8(void *a0) { + D_80192D10[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80192D18[])(void); + +void func_80170C74(void *a0) { + D_80192D18[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80192D20[])(void); + +void func_80170D68(void *a0) { + D_80192D20[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80192D28[])(void); + +void func_80170E34(void *a0) { + D_80192D28[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80192D30[])(void); + +void func_80170EFC(void *a0) { + D_80192D30[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80192D38[])(void); + +void func_80170FB0(void *a0) { + D_80192D38[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80192D40[])(void); + +void func_80171064(void *a0) { + D_80192D40[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80192D48[])(void); + +void func_80171120(void *a0) { + D_80192D48[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80192D50[])(void); + +void func_801711C0(void *a0) { + D_80192D50[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80192D58[])(void); + +void func_80171260(void *a0) { + D_80192D58[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80192D60[])(void); + +void func_801714E4(void *a0) { + D_80192D60[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8016AB6C", func_80172C50); + + +extern void (*D_80192DA4[])(void); + +void func_80172CA0(void *a0) { + D_80192DA4[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80192D68; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80192D68); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC06_025/ov_SC06_025_jr_8015AE2C.c b/src/ov_SC06_025/ov_SC06_025_jr_8015AE2C.c index 87759629e..89dab2160 100644 --- a/src/ov_SC06_025/ov_SC06_025_jr_8015AE2C.c +++ b/src/ov_SC06_025/ov_SC06_025_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_80187E00[])(void); void func_8016AB30(void *a0) { D_80187E00[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80187E7C[])(void); - -void func_8016B4BC(void *a0) { - D_80187E7C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801B05A8; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801B05A8); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80187E70[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80187E70; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80187EB4[]; -extern unsigned short D_80187EBC[]; -extern unsigned short D_80187EC4[]; -extern unsigned char D_801B05B0[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801B05B0 + param_2 * 0x40); - puVar3 = D_80187EB4[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80187EBC[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80187EC4[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801B05A8; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801B05A8, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80187ECC[])(void); - -void func_8016BBA4(void *a0) { - D_80187ECC[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801B06E4; - extern u8 D_801B06E5; - extern u8 D_801B06E6; - extern M2C_UNK D_801B06E8; - extern u8 D_801B06E9; - extern u8 D_801B06EA; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801B06E4) = 0x20; - D_801B06E5 = 0x20; - D_801B06E6 = 0; - (*(u8 *)&D_801B06E8) = 0xc0; - D_801B06E9 = 0xc0; - D_801B06EA = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801B06E4; -extern M2C_UNK D_801B06E8; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801B06E4, &D_801B06E8, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801B06E5; - extern u8 D_801B06E6; - extern u8 D_801B06E9; - extern u8 D_801B06EA; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801B06E4); - if (*p1 != 0) *p1 -= 4; - if (D_801B06E5 != 0) D_801B06E5 -= 4; - if (D_801B06E6 != 0) D_801B06E6 -= 4; - p2 = &(*(u8 *)&D_801B06E8); - if (*p2 != 0) *p2 -= 4; - if (D_801B06E9 != 0) D_801B06E9 -= 4; - if (D_801B06EA != 0) D_801B06EA -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801B06E4), &(*(int *)&D_801B06E8), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801B0670; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801B0670); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80187EDC; - extern s32 D_80187EE4; - extern s32 D_80187EEC; - extern s32 D_80187EF4; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80187EDC, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80187EE4, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80187EEC, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80187EF4, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80187EFC[])(void); - -void func_8016C14C(void *a0) { - D_80187EFC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801B06EC[]; -extern u8 D_801B06F4[]; -extern u8 D_801B06A4[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801B06EC, D_801B06F4, D_801B06A4); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801B0700[]; - extern u8 D_801B07C0; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801B0700[1] = 0xff; - D_801B0700[2] = 0x10; - D_801B0700[0] = 0x10; - D_801B0700[6] = 0; - D_801B0700[5] = 0; - D_801B0700[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801B0700, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801B07C0, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801B0700); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8015AE2C", func_8016C998); - - -extern void (*D_80187F04[])(void); - -void func_8016CB84(void *a0) { - D_80187F04[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801B07C0[]; - - - Blk_8016CF04_8016CF04 *p = &D_801B07C0[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80187F20[])(void); - -void func_8016D19C(void *a0) { - D_80187F20[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80187F28[])(void); - -void func_8016D428(void *a0) { - D_80187F28[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80187F90[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80187F90[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80187F34; -extern u8 D_80187F40; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80187F34, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80187F40); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80187FC4[])(void); - -void func_8016DEA4(void *a0) { - D_80187FC4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80187FCC[])(void); - -void func_8016DF20(void *a0) { - D_80187FCC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80188020[])(void); - -void func_8016E5B8(void *a0) { - D_80188020[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80187FE0[4]; - extern s32 D_80188000; - extern s32 D_80188008; - extern s32 D_80188010; - extern s32 D_80188018; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80187FE0[0], pp, &tmp); - RotTransSV(&D_80187FE0[1], &prim.v[1], &tmp); - RotTransSV(&D_80187FE0[2], &prim.v[2], &tmp); - RotTransSV(&D_80187FE0[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80188000; - prim.f1 = D_80188008; - prim.f2 = D_80188010; - prim.f3 = D_80188018; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80188060[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80188060[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80188054[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80188054[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80188044[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80188044[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80188054[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80188054[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80188054[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80188070; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80188070; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_801880E8[])(void); - -void func_8016F6E0(void *a0) { - D_801880E8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_801880F0[])(void); - -void func_8016F798(void *a0) { - D_801880F0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_801880F8[])(void); - -void func_8016F834(void *a0) { - D_801880F8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80188100[])(void); - -void func_8016F8E4(void *a0) { - D_80188100[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80188108[])(void); - -void func_8016F9C4(void *a0) { - D_80188108[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80188110[])(void); - -void func_8016FA84(void *a0) { - D_80188110[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_8018811C[])(void); - -void func_8016FB7C(void *a0) { - D_8018811C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80188128[])(void); - -void func_8016FC90(void *a0) { - D_80188128[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80188134[])(void); - -void func_8016FDB4(void *a0) { - D_80188134[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80188144[])(void); - -void func_8016FF30(void *a0) { - D_80188144[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80188154[])(void); - -void func_8016FFDC(void *a0) { - D_80188154[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_8018815C[])(void); - -void func_80170150(void *a0) { - D_8018815C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80188164[])(void); - -void func_80170240(void *a0) { - D_80188164[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_8018816C[])(void); - -void func_801702FC(void *a0) { - D_8018816C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80188174[])(void); - -void func_801703E0(void *a0) { - D_80188174[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_8018817C[])(void); - -void func_801704B0(void *a0) { - D_8018817C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80188184[])(void); - -void func_80170548(void *a0) { - D_80188184[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_8018818C[])(void); - -void func_801705F8(void *a0) { - D_8018818C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80188194[])(void); - -void func_801706AC(void *a0) { - D_80188194[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_8018819C[])(void); - -void func_80170748(void *a0) { - D_8018819C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_801881A4[])(void); - -void func_80170810(void *a0) { - D_801881A4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_801881AC[])(void); - -void func_80170AD8(void *a0) { - D_801881AC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_801881B4[])(void); - -void func_80170BD8(void *a0) { - D_801881B4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_801881BC[])(void); - -void func_80170C74(void *a0) { - D_801881BC[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8015AE2C", func_80170CF0); - - -extern void (*D_801881C4[])(void); - -void func_80170D68(void *a0) { - D_801881C4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_801881CC[])(void); - -void func_80170E34(void *a0) { - D_801881CC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_801881D4[])(void); - -void func_80170EFC(void *a0) { - D_801881D4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_801881DC[])(void); - -void func_80170FB0(void *a0) { - D_801881DC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_801881E4[])(void); - -void func_80171064(void *a0) { - D_801881E4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_801881EC[])(void); - -void func_80171120(void *a0) { - D_801881EC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_801881F4[])(void); - -void func_801711C0(void *a0) { - D_801881F4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_801881FC[])(void); - -void func_80171260(void *a0) { - D_801881FC[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80188204[])(void); - -void func_801714E4(void *a0) { - D_80188204[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8015AE2C", func_80172C50); - - -extern void (*D_80188248[])(void); - -void func_80172CA0(void *a0) { - D_80188248[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_8018820C; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_8018820C); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC06_025/ov_SC06_025_jr_8016AB6C.c b/src/ov_SC06_025/ov_SC06_025_jr_8016AB6C.c new file mode 100644 index 000000000..37b71c301 --- /dev/null +++ b/src/ov_SC06_025/ov_SC06_025_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801871CC; +extern u8 D_8018713C; +extern u8 D_80187118; +extern u8 D_801870F4; +extern u8 D_801871A8; +extern u8 D_80187184; +extern u8 D_80187160; +extern u8 D_801870D0; +extern void func_80145934(void); +extern u8 D_8018725C; +extern u8 D_80187238; +extern u8 D_80187214; +extern u8 D_801871F0; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80186654[]; +extern unsigned char D_80186684[]; +extern unsigned char D_801866D4[]; +extern unsigned char D_80186704[]; +extern unsigned char D_80186734[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80186784[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018684C[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801868D4[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801868DC; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801B0138; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801B013C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018690C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801869B4[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801869D8[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801869C8; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801869EC[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801869F8[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80186A08[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80186A20[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80186A10; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80186A34[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80186A50[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80186A40; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80186A64[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80186A78[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80186A8C; +extern void (*D_80186AB4[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80186A94; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80186B00[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80186B04[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80186F68[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80186F78[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801B0170; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80186FA0[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80186F80; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80186F90; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80186FE0[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80186FE8[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80186FB4; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80186FF4[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80186FC4; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801B0178; +extern s32 D_801B0184; +extern s32 D_801B0188; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80187030[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80187004[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801B0180; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80187280[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_801870A0[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80187324[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80187478[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80187294; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80187480[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_801872A4; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801872C4; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80187488[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_801874B0[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_801874BC[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80187330[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80187560; +extern void func_8015D380(s32 a0); +extern unsigned char D_80186644[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80187574[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_801875B0[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_801875F8; +extern u16 D_801875FA; +extern u16 D_801875FC; +extern s32 D_80187600; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80187608; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80187314; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_8018768C[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_8018773C[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_8018776C[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_801877D0; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801B0190[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_801877F4[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801B01E8[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_8018783C[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_8018782C; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801AF9FC[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80187844[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80187898[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80187860; +extern s16 D_80187894; +extern s16 D_80187892; +extern s16 D_80187890; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_801878A4[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801B0248; +extern u8 D_801B0249; +extern u8 D_801B024A; +extern u8 D_801B024B; +extern u8 D_801B024C; +extern u8 D_801B024D; +extern u8 D_801B024E; +extern u8 D_801B024F; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_801878B4[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801B0288; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_801878F8[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80187974[]; +extern s32 D_80187994[]; +extern u8 D_80187A10[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80187A30[]; +extern u8 D_80187A50[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80187AEC[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80187B68[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801AFA0C; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80187B74[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80187B7C[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80187C44[])(void); +extern void func_80166618(void *a0); +extern void (*D_80187C54[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80187C64[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80187C70[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80187BD0[]; +extern u8 D_80187BE4[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80187C88[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80187C90[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80187C98[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80187CA0[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80187CA8[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80187CB0[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80187CB8[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80187D6C[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80187D74[])(void); +extern void func_80169F00(void *a0); +extern char D_80187D24[]; +extern char D_80187CE4[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80187DAC[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80187DB8[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80187E00[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80187DC0[]; + extern u8 D_80187DD0[]; + extern u8 D_801B0558[]; + extern u8 D_801B0580[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80187DC0, D_801B0558) + 3; + func_8001CE28(obj, D_801B0558); + } else { + var_s3 = func_80024054(D_80187DD0, D_801B0580) + 9; + func_8001CE28(obj, D_801B0580); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80187E7C[])(void); + +void func_8016B4BC(void *a0) { + D_80187E7C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801B05A8; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801B05A8); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80187E70[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80187E70; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80187EB4[]; +extern unsigned short D_80187EBC[]; +extern unsigned short D_80187EC4[]; +extern unsigned char D_801B05B0[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801B05B0 + param_2 * 0x40); + puVar3 = D_80187EB4[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80187EBC[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80187EC4[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801B05A8; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801B05A8, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80187ECC[])(void); + +void func_8016BBA4(void *a0) { + D_80187ECC[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801B06E4; + extern u8 D_801B06E5; + extern u8 D_801B06E6; + extern M2C_UNK D_801B06E8; + extern u8 D_801B06E9; + extern u8 D_801B06EA; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801B06E4) = 0x20; + D_801B06E5 = 0x20; + D_801B06E6 = 0; + (*(u8 *)&D_801B06E8) = 0xc0; + D_801B06E9 = 0xc0; + D_801B06EA = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801B06E4; +extern M2C_UNK D_801B06E8; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801B06E4, &D_801B06E8, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801B06E5; + extern u8 D_801B06E6; + extern u8 D_801B06E9; + extern u8 D_801B06EA; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801B06E4); + if (*p1 != 0) *p1 -= 4; + if (D_801B06E5 != 0) D_801B06E5 -= 4; + if (D_801B06E6 != 0) D_801B06E6 -= 4; + p2 = &(*(u8 *)&D_801B06E8); + if (*p2 != 0) *p2 -= 4; + if (D_801B06E9 != 0) D_801B06E9 -= 4; + if (D_801B06EA != 0) D_801B06EA -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801B06E4), &(*(int *)&D_801B06E8), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801B0670; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801B0670); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80187EDC; + extern s32 D_80187EE4; + extern s32 D_80187EEC; + extern s32 D_80187EF4; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80187EDC, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80187EE4, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80187EEC, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80187EF4, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80187EFC[])(void); + +void func_8016C14C(void *a0) { + D_80187EFC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801B06EC[]; +extern u8 D_801B06F4[]; +extern u8 D_801B06A4[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801B06EC, D_801B06F4, D_801B06A4); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801B0700[]; + extern u8 D_801B07C0; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801B0700[1] = 0xff; + D_801B0700[2] = 0x10; + D_801B0700[0] = 0x10; + D_801B0700[6] = 0; + D_801B0700[5] = 0; + D_801B0700[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801B0700, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801B07C0, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801B0700); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8016AB6C", func_8016C998); + + +extern void (*D_80187F04[])(void); + +void func_8016CB84(void *a0) { + D_80187F04[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801B07C0[]; + + + Blk_8016CF04_8016CF04 *p = &D_801B07C0[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80187F20[])(void); + +void func_8016D19C(void *a0) { + D_80187F20[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80187F28[])(void); + +void func_8016D428(void *a0) { + D_80187F28[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80187F90[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80187F90[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80187F34; +extern u8 D_80187F40; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80187F34, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80187F40); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80187FC4[])(void); + +void func_8016DEA4(void *a0) { + D_80187FC4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80187FCC[])(void); + +void func_8016DF20(void *a0) { + D_80187FCC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80188020[])(void); + +void func_8016E5B8(void *a0) { + D_80188020[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80187FE0[4]; + extern s32 D_80188000; + extern s32 D_80188008; + extern s32 D_80188010; + extern s32 D_80188018; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80187FE0[0], pp, &tmp); + RotTransSV(&D_80187FE0[1], &prim.v[1], &tmp); + RotTransSV(&D_80187FE0[2], &prim.v[2], &tmp); + RotTransSV(&D_80187FE0[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80188000; + prim.f1 = D_80188008; + prim.f2 = D_80188010; + prim.f3 = D_80188018; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80188060[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80188060[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80188054[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80188054[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80188044[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80188044[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80188054[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80188054[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80188054[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80188070; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80188070; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_801880E8[])(void); + +void func_8016F6E0(void *a0) { + D_801880E8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_801880F0[])(void); + +void func_8016F798(void *a0) { + D_801880F0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_801880F8[])(void); + +void func_8016F834(void *a0) { + D_801880F8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80188100[])(void); + +void func_8016F8E4(void *a0) { + D_80188100[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80188108[])(void); + +void func_8016F9C4(void *a0) { + D_80188108[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80188110[])(void); + +void func_8016FA84(void *a0) { + D_80188110[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_8018811C[])(void); + +void func_8016FB7C(void *a0) { + D_8018811C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80188128[])(void); + +void func_8016FC90(void *a0) { + D_80188128[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80188134[])(void); + +void func_8016FDB4(void *a0) { + D_80188134[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80188144[])(void); + +void func_8016FF30(void *a0) { + D_80188144[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80188154[])(void); + +void func_8016FFDC(void *a0) { + D_80188154[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_8018815C[])(void); + +void func_80170150(void *a0) { + D_8018815C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80188164[])(void); + +void func_80170240(void *a0) { + D_80188164[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_8018816C[])(void); + +void func_801702FC(void *a0) { + D_8018816C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80188174[])(void); + +void func_801703E0(void *a0) { + D_80188174[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_8018817C[])(void); + +void func_801704B0(void *a0) { + D_8018817C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80188184[])(void); + +void func_80170548(void *a0) { + D_80188184[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_8018818C[])(void); + +void func_801705F8(void *a0) { + D_8018818C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80188194[])(void); + +void func_801706AC(void *a0) { + D_80188194[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_8018819C[])(void); + +void func_80170748(void *a0) { + D_8018819C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_801881A4[])(void); + +void func_80170810(void *a0) { + D_801881A4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_801881AC[])(void); + +void func_80170AD8(void *a0) { + D_801881AC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_801881B4[])(void); + +void func_80170BD8(void *a0) { + D_801881B4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_801881BC[])(void); + +void func_80170C74(void *a0) { + D_801881BC[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8016AB6C", func_80170CF0); + + +extern void (*D_801881C4[])(void); + +void func_80170D68(void *a0) { + D_801881C4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_801881CC[])(void); + +void func_80170E34(void *a0) { + D_801881CC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_801881D4[])(void); + +void func_80170EFC(void *a0) { + D_801881D4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_801881DC[])(void); + +void func_80170FB0(void *a0) { + D_801881DC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_801881E4[])(void); + +void func_80171064(void *a0) { + D_801881E4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_801881EC[])(void); + +void func_80171120(void *a0) { + D_801881EC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_801881F4[])(void); + +void func_801711C0(void *a0) { + D_801881F4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_801881FC[])(void); + +void func_80171260(void *a0) { + D_801881FC[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80188204[])(void); + +void func_801714E4(void *a0) { + D_80188204[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8016AB6C", func_80172C50); + + +extern void (*D_80188248[])(void); + +void func_80172CA0(void *a0) { + D_80188248[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_8018820C; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_8018820C); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC06_027/ov_SC06_027_jr_8015AE2C.c b/src/ov_SC06_027/ov_SC06_027_jr_8015AE2C.c index 6d0bab310..74efb16aa 100644 --- a/src/ov_SC06_027/ov_SC06_027_jr_8015AE2C.c +++ b/src/ov_SC06_027/ov_SC06_027_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_80181140[])(void); void func_8016AB30(void *a0) { D_80181140[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_801811BC[])(void); - -void func_8016B4BC(void *a0) { - D_801811BC[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_8019C580; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_8019C580); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_801811B0[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_801811B0; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_801811F4[]; -extern unsigned short D_801811FC[]; -extern unsigned short D_80181204[]; -extern unsigned char D_8019C588[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_8019C588 + param_2 * 0x40); - puVar3 = D_801811F4[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_801811FC[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80181204[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_8019C580; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_8019C580, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_8018120C[])(void); - -void func_8016BBA4(void *a0) { - D_8018120C[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_8019C6BC; - extern u8 D_8019C6BD; - extern u8 D_8019C6BE; - extern M2C_UNK D_8019C6C0; - extern u8 D_8019C6C1; - extern u8 D_8019C6C2; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_8019C6BC) = 0x20; - D_8019C6BD = 0x20; - D_8019C6BE = 0; - (*(u8 *)&D_8019C6C0) = 0xc0; - D_8019C6C1 = 0xc0; - D_8019C6C2 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_8019C6BC; -extern M2C_UNK D_8019C6C0; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_8019C6BC, &D_8019C6C0, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_8019C6BD; - extern u8 D_8019C6BE; - extern u8 D_8019C6C1; - extern u8 D_8019C6C2; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_8019C6BC); - if (*p1 != 0) *p1 -= 4; - if (D_8019C6BD != 0) D_8019C6BD -= 4; - if (D_8019C6BE != 0) D_8019C6BE -= 4; - p2 = &(*(u8 *)&D_8019C6C0); - if (*p2 != 0) *p2 -= 4; - if (D_8019C6C1 != 0) D_8019C6C1 -= 4; - if (D_8019C6C2 != 0) D_8019C6C2 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_8019C6BC), &(*(int *)&D_8019C6C0), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_8019C648; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_8019C648); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_8018121C; - extern s32 D_80181224; - extern s32 D_8018122C; - extern s32 D_80181234; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_8018121C, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80181224, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_8018122C, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80181234, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_8018123C[])(void); - -void func_8016C14C(void *a0) { - D_8018123C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_8019C6C4[]; -extern u8 D_8019C6CC[]; -extern u8 D_8019C67C[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_8019C6C4, D_8019C6CC, D_8019C67C); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_8019C6D8[]; - extern u8 D_8019C798; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_8019C6D8[1] = 0xff; - D_8019C6D8[2] = 0x10; - D_8019C6D8[0] = 0x10; - D_8019C6D8[6] = 0; - D_8019C6D8[5] = 0; - D_8019C6D8[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_8019C6D8, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_8019C798, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_8019C6D8); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8015AE2C", func_8016C998); - - -extern void (*D_80181244[])(void); - -void func_8016CB84(void *a0) { - D_80181244[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_8019C798[]; - - - Blk_8016CF04_8016CF04 *p = &D_8019C798[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80181260[])(void); - -void func_8016D19C(void *a0) { - D_80181260[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80181268[])(void); - -void func_8016D428(void *a0) { - D_80181268[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_801812D0[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_801812D0[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80181274; -extern u8 D_80181280; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80181274, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80181280); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80181304[])(void); - -void func_8016DEA4(void *a0) { - D_80181304[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_8018130C[])(void); - -void func_8016DF20(void *a0) { - D_8018130C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80181360[])(void); - -void func_8016E5B8(void *a0) { - D_80181360[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80181320[4]; - extern s32 D_80181340; - extern s32 D_80181348; - extern s32 D_80181350; - extern s32 D_80181358; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80181320[0], pp, &tmp); - RotTransSV(&D_80181320[1], &prim.v[1], &tmp); - RotTransSV(&D_80181320[2], &prim.v[2], &tmp); - RotTransSV(&D_80181320[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80181340; - prim.f1 = D_80181348; - prim.f2 = D_80181350; - prim.f3 = D_80181358; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_801813A0[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_801813A0[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80181394[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80181394[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80181384[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80181384[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80181394[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80181394[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80181394[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_801813B0; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_801813B0; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80181428[])(void); - -void func_8016F6E0(void *a0) { - D_80181428[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80181430[])(void); - -void func_8016F798(void *a0) { - D_80181430[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80181438[])(void); - -void func_8016F834(void *a0) { - D_80181438[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80181440[])(void); - -void func_8016F8E4(void *a0) { - D_80181440[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80181448[])(void); - -void func_8016F9C4(void *a0) { - D_80181448[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80181450[])(void); - -void func_8016FA84(void *a0) { - D_80181450[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_8018145C[])(void); - -void func_8016FB7C(void *a0) { - D_8018145C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80181468[])(void); - -void func_8016FC90(void *a0) { - D_80181468[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80181474[])(void); - -void func_8016FDB4(void *a0) { - D_80181474[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80181484[])(void); - -void func_8016FF30(void *a0) { - D_80181484[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80181494[])(void); - -void func_8016FFDC(void *a0) { - D_80181494[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_8018149C[])(void); - -void func_80170150(void *a0) { - D_8018149C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_801814A4[])(void); - -void func_80170240(void *a0) { - D_801814A4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_801814AC[])(void); - -void func_801702FC(void *a0) { - D_801814AC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_801814B4[])(void); - -void func_801703E0(void *a0) { - D_801814B4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_801814BC[])(void); - -void func_801704B0(void *a0) { - D_801814BC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_801814C4[])(void); - -void func_80170548(void *a0) { - D_801814C4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_801814CC[])(void); - -void func_801705F8(void *a0) { - D_801814CC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_801814D4[])(void); - -void func_801706AC(void *a0) { - D_801814D4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_801814DC[])(void); - -void func_80170748(void *a0) { - D_801814DC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_801814E4[])(void); - -void func_80170810(void *a0) { - D_801814E4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_801814EC[])(void); - -void func_80170AD8(void *a0) { - D_801814EC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_801814F4[])(void); - -void func_80170BD8(void *a0) { - D_801814F4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_801814FC[])(void); - -void func_80170C74(void *a0) { - D_801814FC[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80181504[])(void); - -void func_80170D68(void *a0) { - D_80181504[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_8018150C[])(void); - -void func_80170E34(void *a0) { - D_8018150C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80181514[])(void); - -void func_80170EFC(void *a0) { - D_80181514[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_8018151C[])(void); - -void func_80170FB0(void *a0) { - D_8018151C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80181524[])(void); - -void func_80171064(void *a0) { - D_80181524[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_8018152C[])(void); - -void func_80171120(void *a0) { - D_8018152C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80181534[])(void); - -void func_801711C0(void *a0) { - D_80181534[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_8018153C[])(void); - -void func_80171260(void *a0) { - D_8018153C[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80181544[])(void); - -void func_801714E4(void *a0) { - D_80181544[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8015AE2C", func_80172C50); - - -extern void (*D_80181588[])(void); - -void func_80172CA0(void *a0) { - D_80181588[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_8018154C; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_8018154C); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC06_027/ov_SC06_027_jr_8016AB6C.c b/src/ov_SC06_027/ov_SC06_027_jr_8016AB6C.c new file mode 100644 index 000000000..b0b1a7473 --- /dev/null +++ b/src/ov_SC06_027/ov_SC06_027_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018050C; +extern u8 D_8018047C; +extern u8 D_80180458; +extern u8 D_80180434; +extern u8 D_801804E8; +extern u8 D_801804C4; +extern u8 D_801804A0; +extern u8 D_80180410; +extern void func_80145934(void); +extern u8 D_8018059C; +extern u8 D_80180578; +extern u8 D_80180554; +extern u8 D_80180530; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8017F994[]; +extern unsigned char D_8017F9C4[]; +extern unsigned char D_8017FA14[]; +extern unsigned char D_8017FA44[]; +extern unsigned char D_8017FA74[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8017FAC4[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8017FB8C[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8017FC14[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8017FC1C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8019C110; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019C114; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8017FC4C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8017FCF4[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8017FD18[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8017FD08; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8017FD2C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8017FD38[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8017FD48[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8017FD60[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8017FD50; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8017FD74[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8017FD90[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8017FD80; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8017FDA4[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8017FDB8[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8017FDCC; +extern void (*D_8017FDF4[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8017FDD4; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8017FE40[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8017FE44[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_801802A8[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_801802B8[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_8019C148; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_801802E0[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801802C0; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_801802D0; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80180320[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80180328[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_801802F4; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80180334[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80180304; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_8019C150; +extern s32 D_8019C15C; +extern s32 D_8019C160; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80180370[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80180344[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_8019C158; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_801805C0[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_801803E0[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80180664[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_801807B8[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_801805D4; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_801807C0[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_801805E4; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80180604; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_801807C8[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_801807F0[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_801807FC[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80180670[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_801808A0; +extern void func_8015D380(s32 a0); +extern unsigned char D_8017F984[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_801808B4[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_801808F0[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80180938; +extern u16 D_8018093A; +extern u16 D_8018093C; +extern s32 D_80180940; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80180948; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80180654; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_801809CC[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80180A7C[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80180AAC[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80180B10; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_8019C168[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80180B34[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_8019C1C0[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80180B7C[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80180B6C; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_8019BA38[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80180B84[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80180BD8[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80180BA0; +extern s16 D_80180BD4; +extern s16 D_80180BD2; +extern s16 D_80180BD0; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80180BE4[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_8019C220; +extern u8 D_8019C221; +extern u8 D_8019C222; +extern u8 D_8019C223; +extern u8 D_8019C224; +extern u8 D_8019C225; +extern u8 D_8019C226; +extern u8 D_8019C227; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80180BF4[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_8019C260; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80180C38[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80180CB4[]; +extern s32 D_80180CD4[]; +extern u8 D_80180D50[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80180D70[]; +extern u8 D_80180D90[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80180E2C[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80180EA8[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_8019BA48; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80180EB4[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80180EBC[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80180F84[])(void); +extern void func_80166618(void *a0); +extern void (*D_80180F94[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80180FA4[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80180FB0[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80180F10[]; +extern u8 D_80180F24[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80180FC8[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80180FD0[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80180FD8[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80180FE0[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80180FE8[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80180FF0[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80180FF8[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_801810AC[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_801810B4[])(void); +extern void func_80169F00(void *a0); +extern char D_80181064[]; +extern char D_80181024[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_801810EC[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_801810F8[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80181140[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80181100[]; + extern u8 D_80181110[]; + extern u8 D_8019C530[]; + extern u8 D_8019C558[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80181100, D_8019C530) + 3; + func_8001CE28(obj, D_8019C530); + } else { + var_s3 = func_80024054(D_80181110, D_8019C558) + 9; + func_8001CE28(obj, D_8019C558); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_801811BC[])(void); + +void func_8016B4BC(void *a0) { + D_801811BC[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_8019C580; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_8019C580); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_801811B0[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_801811B0; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_801811F4[]; +extern unsigned short D_801811FC[]; +extern unsigned short D_80181204[]; +extern unsigned char D_8019C588[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_8019C588 + param_2 * 0x40); + puVar3 = D_801811F4[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_801811FC[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80181204[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_8019C580; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_8019C580, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_8018120C[])(void); + +void func_8016BBA4(void *a0) { + D_8018120C[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_8019C6BC; + extern u8 D_8019C6BD; + extern u8 D_8019C6BE; + extern M2C_UNK D_8019C6C0; + extern u8 D_8019C6C1; + extern u8 D_8019C6C2; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_8019C6BC) = 0x20; + D_8019C6BD = 0x20; + D_8019C6BE = 0; + (*(u8 *)&D_8019C6C0) = 0xc0; + D_8019C6C1 = 0xc0; + D_8019C6C2 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_8019C6BC; +extern M2C_UNK D_8019C6C0; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_8019C6BC, &D_8019C6C0, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_8019C6BD; + extern u8 D_8019C6BE; + extern u8 D_8019C6C1; + extern u8 D_8019C6C2; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_8019C6BC); + if (*p1 != 0) *p1 -= 4; + if (D_8019C6BD != 0) D_8019C6BD -= 4; + if (D_8019C6BE != 0) D_8019C6BE -= 4; + p2 = &(*(u8 *)&D_8019C6C0); + if (*p2 != 0) *p2 -= 4; + if (D_8019C6C1 != 0) D_8019C6C1 -= 4; + if (D_8019C6C2 != 0) D_8019C6C2 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_8019C6BC), &(*(int *)&D_8019C6C0), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_8019C648; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_8019C648); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_8018121C; + extern s32 D_80181224; + extern s32 D_8018122C; + extern s32 D_80181234; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_8018121C, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80181224, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_8018122C, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80181234, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_8018123C[])(void); + +void func_8016C14C(void *a0) { + D_8018123C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_8019C6C4[]; +extern u8 D_8019C6CC[]; +extern u8 D_8019C67C[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_8019C6C4, D_8019C6CC, D_8019C67C); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_8019C6D8[]; + extern u8 D_8019C798; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_8019C6D8[1] = 0xff; + D_8019C6D8[2] = 0x10; + D_8019C6D8[0] = 0x10; + D_8019C6D8[6] = 0; + D_8019C6D8[5] = 0; + D_8019C6D8[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_8019C6D8, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_8019C798, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_8019C6D8); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8016AB6C", func_8016C998); + + +extern void (*D_80181244[])(void); + +void func_8016CB84(void *a0) { + D_80181244[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_8019C798[]; + + + Blk_8016CF04_8016CF04 *p = &D_8019C798[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80181260[])(void); + +void func_8016D19C(void *a0) { + D_80181260[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80181268[])(void); + +void func_8016D428(void *a0) { + D_80181268[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_801812D0[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_801812D0[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80181274; +extern u8 D_80181280; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80181274, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80181280); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80181304[])(void); + +void func_8016DEA4(void *a0) { + D_80181304[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_8018130C[])(void); + +void func_8016DF20(void *a0) { + D_8018130C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80181360[])(void); + +void func_8016E5B8(void *a0) { + D_80181360[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80181320[4]; + extern s32 D_80181340; + extern s32 D_80181348; + extern s32 D_80181350; + extern s32 D_80181358; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80181320[0], pp, &tmp); + RotTransSV(&D_80181320[1], &prim.v[1], &tmp); + RotTransSV(&D_80181320[2], &prim.v[2], &tmp); + RotTransSV(&D_80181320[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80181340; + prim.f1 = D_80181348; + prim.f2 = D_80181350; + prim.f3 = D_80181358; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_801813A0[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_801813A0[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80181394[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80181394[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80181384[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80181384[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80181394[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80181394[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80181394[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_801813B0; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_801813B0; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80181428[])(void); + +void func_8016F6E0(void *a0) { + D_80181428[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80181430[])(void); + +void func_8016F798(void *a0) { + D_80181430[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80181438[])(void); + +void func_8016F834(void *a0) { + D_80181438[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80181440[])(void); + +void func_8016F8E4(void *a0) { + D_80181440[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80181448[])(void); + +void func_8016F9C4(void *a0) { + D_80181448[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80181450[])(void); + +void func_8016FA84(void *a0) { + D_80181450[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_8018145C[])(void); + +void func_8016FB7C(void *a0) { + D_8018145C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80181468[])(void); + +void func_8016FC90(void *a0) { + D_80181468[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80181474[])(void); + +void func_8016FDB4(void *a0) { + D_80181474[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80181484[])(void); + +void func_8016FF30(void *a0) { + D_80181484[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80181494[])(void); + +void func_8016FFDC(void *a0) { + D_80181494[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_8018149C[])(void); + +void func_80170150(void *a0) { + D_8018149C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_801814A4[])(void); + +void func_80170240(void *a0) { + D_801814A4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_801814AC[])(void); + +void func_801702FC(void *a0) { + D_801814AC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_801814B4[])(void); + +void func_801703E0(void *a0) { + D_801814B4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_801814BC[])(void); + +void func_801704B0(void *a0) { + D_801814BC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_801814C4[])(void); + +void func_80170548(void *a0) { + D_801814C4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_801814CC[])(void); + +void func_801705F8(void *a0) { + D_801814CC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_801814D4[])(void); + +void func_801706AC(void *a0) { + D_801814D4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_801814DC[])(void); + +void func_80170748(void *a0) { + D_801814DC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_801814E4[])(void); + +void func_80170810(void *a0) { + D_801814E4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_801814EC[])(void); + +void func_80170AD8(void *a0) { + D_801814EC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_801814F4[])(void); + +void func_80170BD8(void *a0) { + D_801814F4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_801814FC[])(void); + +void func_80170C74(void *a0) { + D_801814FC[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80181504[])(void); + +void func_80170D68(void *a0) { + D_80181504[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_8018150C[])(void); + +void func_80170E34(void *a0) { + D_8018150C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80181514[])(void); + +void func_80170EFC(void *a0) { + D_80181514[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_8018151C[])(void); + +void func_80170FB0(void *a0) { + D_8018151C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80181524[])(void); + +void func_80171064(void *a0) { + D_80181524[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_8018152C[])(void); + +void func_80171120(void *a0) { + D_8018152C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80181534[])(void); + +void func_801711C0(void *a0) { + D_80181534[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_8018153C[])(void); + +void func_80171260(void *a0) { + D_8018153C[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80181544[])(void); + +void func_801714E4(void *a0) { + D_80181544[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8016AB6C", func_80172C50); + + +extern void (*D_80181588[])(void); + +void func_80172CA0(void *a0) { + D_80181588[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_8018154C; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_8018154C); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC06_029/ov_SC06_029_jr_8015AE2C.c b/src/ov_SC06_029/ov_SC06_029_jr_8015AE2C.c index 4a6364825..831267a3d 100644 --- a/src/ov_SC06_029/ov_SC06_029_jr_8015AE2C.c +++ b/src/ov_SC06_029/ov_SC06_029_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_8018F6D4[])(void); void func_8016AB30(void *a0) { D_8018F6D4[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_8018F750[])(void); - -void func_8016B4BC(void *a0) { - D_8018F750[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801DBEA0; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801DBEA0); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_8018F744[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_8018F744; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_8018F788[]; -extern unsigned short D_8018F790[]; -extern unsigned short D_8018F798[]; -extern unsigned char D_801DBEA8[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801DBEA8 + param_2 * 0x40); - puVar3 = D_8018F788[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_8018F790[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_8018F798[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801DBEA0; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801DBEA0, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_8018F7A0[])(void); - -void func_8016BBA4(void *a0) { - D_8018F7A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801DBFDC; - extern u8 D_801DBFDD; - extern u8 D_801DBFDE; - extern M2C_UNK D_801DBFE0; - extern u8 D_801DBFE1; - extern u8 D_801DBFE2; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801DBFDC) = 0x20; - D_801DBFDD = 0x20; - D_801DBFDE = 0; - (*(u8 *)&D_801DBFE0) = 0xc0; - D_801DBFE1 = 0xc0; - D_801DBFE2 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801DBFDC; -extern M2C_UNK D_801DBFE0; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801DBFDC, &D_801DBFE0, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801DBFDD; - extern u8 D_801DBFDE; - extern u8 D_801DBFE1; - extern u8 D_801DBFE2; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801DBFDC); - if (*p1 != 0) *p1 -= 4; - if (D_801DBFDD != 0) D_801DBFDD -= 4; - if (D_801DBFDE != 0) D_801DBFDE -= 4; - p2 = &(*(u8 *)&D_801DBFE0); - if (*p2 != 0) *p2 -= 4; - if (D_801DBFE1 != 0) D_801DBFE1 -= 4; - if (D_801DBFE2 != 0) D_801DBFE2 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801DBFDC), &(*(int *)&D_801DBFE0), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801DBF68; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801DBF68); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_8018F7B0; - extern s32 D_8018F7B8; - extern s32 D_8018F7C0; - extern s32 D_8018F7C8; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_8018F7B0, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_8018F7B8, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_8018F7C0, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_8018F7C8, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_8018F7D0[])(void); - -void func_8016C14C(void *a0) { - D_8018F7D0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801DBFE4[]; -extern u8 D_801DBFEC[]; -extern u8 D_801DBF9C[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801DBFE4, D_801DBFEC, D_801DBF9C); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801DBFF8[]; - extern u8 D_801DC0B8; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801DBFF8[1] = 0xff; - D_801DBFF8[2] = 0x10; - D_801DBFF8[0] = 0x10; - D_801DBFF8[6] = 0; - D_801DBFF8[5] = 0; - D_801DBFF8[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801DBFF8, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801DC0B8, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801DBFF8); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8015AE2C", func_8016C998); - - -extern void (*D_8018F7D8[])(void); - -void func_8016CB84(void *a0) { - D_8018F7D8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801DC0B8[]; - - - Blk_8016CF04_8016CF04 *p = &D_801DC0B8[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_8018F7F4[])(void); - -void func_8016D19C(void *a0) { - D_8018F7F4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_8018F7FC[])(void); - -void func_8016D428(void *a0) { - D_8018F7FC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_8018F864[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_8018F864[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_8018F808; -extern u8 D_8018F814; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018F808, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018F814); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8015AE2C", func_8016DC20); - - -extern void (*D_8018F898[])(void); - -void func_8016DEA4(void *a0) { - D_8018F898[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_8018F8A0[])(void); - -void func_8016DF20(void *a0) { - D_8018F8A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_8018F8F4[])(void); - -void func_8016E5B8(void *a0) { - D_8018F8F4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_8018F8B4[4]; - extern s32 D_8018F8D4; - extern s32 D_8018F8DC; - extern s32 D_8018F8E4; - extern s32 D_8018F8EC; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_8018F8B4[0], pp, &tmp); - RotTransSV(&D_8018F8B4[1], &prim.v[1], &tmp); - RotTransSV(&D_8018F8B4[2], &prim.v[2], &tmp); - RotTransSV(&D_8018F8B4[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_8018F8D4; - prim.f1 = D_8018F8DC; - prim.f2 = D_8018F8E4; - prim.f3 = D_8018F8EC; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_8018F934[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_8018F934[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_8018F928[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_8018F928[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_8018F918[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_8018F918[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018F928[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_8018F928[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_8018F928[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_8018F944; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_8018F944; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_8018F9BC[])(void); - -void func_8016F6E0(void *a0) { - D_8018F9BC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_8018F9C4[])(void); - -void func_8016F798(void *a0) { - D_8018F9C4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_8018F9CC[])(void); - -void func_8016F834(void *a0) { - D_8018F9CC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_8018F9D4[])(void); - -void func_8016F8E4(void *a0) { - D_8018F9D4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_8018F9DC[])(void); - -void func_8016F9C4(void *a0) { - D_8018F9DC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_8018F9E4[])(void); - -void func_8016FA84(void *a0) { - D_8018F9E4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_8018F9F0[])(void); - -void func_8016FB7C(void *a0) { - D_8018F9F0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_8018F9FC[])(void); - -void func_8016FC90(void *a0) { - D_8018F9FC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_8018FA08[])(void); - -void func_8016FDB4(void *a0) { - D_8018FA08[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_8018FA18[])(void); - -void func_8016FF30(void *a0) { - D_8018FA18[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_8018FA28[])(void); - -void func_8016FFDC(void *a0) { - D_8018FA28[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_8018FA30[])(void); - -void func_80170150(void *a0) { - D_8018FA30[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_8018FA38[])(void); - -void func_80170240(void *a0) { - D_8018FA38[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_8018FA40[])(void); - -void func_801702FC(void *a0) { - D_8018FA40[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_8018FA48[])(void); - -void func_801703E0(void *a0) { - D_8018FA48[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_8018FA50[])(void); - -void func_801704B0(void *a0) { - D_8018FA50[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_8018FA58[])(void); - -void func_80170548(void *a0) { - D_8018FA58[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_8018FA60[])(void); - -void func_801705F8(void *a0) { - D_8018FA60[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_8018FA68[])(void); - -void func_801706AC(void *a0) { - D_8018FA68[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_8018FA70[])(void); - -void func_80170748(void *a0) { - D_8018FA70[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_8018FA78[])(void); - -void func_80170810(void *a0) { - D_8018FA78[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_8018FA80[])(void); - -void func_80170AD8(void *a0) { - D_8018FA80[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_8018FA88[])(void); - -void func_80170BD8(void *a0) { - D_8018FA88[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_8018FA90[])(void); - -void func_80170C74(void *a0) { - D_8018FA90[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8015AE2C", func_80170CF0); - - -extern void (*D_8018FA98[])(void); - -void func_80170D68(void *a0) { - D_8018FA98[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_8018FAA0[])(void); - -void func_80170E34(void *a0) { - D_8018FAA0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_8018FAA8[])(void); - -void func_80170EFC(void *a0) { - D_8018FAA8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_8018FAB0[])(void); - -void func_80170FB0(void *a0) { - D_8018FAB0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_8018FAB8[])(void); - -void func_80171064(void *a0) { - D_8018FAB8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_8018FAC0[])(void); - -void func_80171120(void *a0) { - D_8018FAC0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_8018FAC8[])(void); - -void func_801711C0(void *a0) { - D_8018FAC8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_8018FAD0[])(void); - -void func_80171260(void *a0) { - D_8018FAD0[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_8018FAD8[])(void); - -void func_801714E4(void *a0) { - D_8018FAD8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8015AE2C", func_80172C50); - - -extern void (*D_8018FB1C[])(void); - -void func_80172CA0(void *a0) { - D_8018FB1C[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_8018FAE0; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_8018FAE0); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC06_029/ov_SC06_029_jr_8016AB6C.c b/src/ov_SC06_029/ov_SC06_029_jr_8016AB6C.c new file mode 100644 index 000000000..013b68655 --- /dev/null +++ b/src/ov_SC06_029/ov_SC06_029_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018EAA0; +extern u8 D_8018EA10; +extern u8 D_8018E9EC; +extern u8 D_8018E9C8; +extern u8 D_8018EA7C; +extern u8 D_8018EA58; +extern u8 D_8018EA34; +extern u8 D_8018E9A4; +extern void func_80145934(void); +extern u8 D_8018EB30; +extern u8 D_8018EB0C; +extern u8 D_8018EAE8; +extern u8 D_8018EAC4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018DF28[]; +extern unsigned char D_8018DF58[]; +extern unsigned char D_8018DFA8[]; +extern unsigned char D_8018DFD8[]; +extern unsigned char D_8018E008[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018E058[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018E120[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018E1A8[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018E1B0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801DBA30; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801DBA34; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018E1E0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018E288[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018E2AC[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018E29C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018E2C0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018E2CC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018E2DC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018E2F4[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018E2E4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018E308[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018E324[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018E314; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018E338[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018E34C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018E360; +extern void (*D_8018E388[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018E368; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018E3D4[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018E3D8[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018E83C[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018E84C[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801DBA68; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018E874[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018E854; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018E864; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018E8B4[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018E8BC[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018E888; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018E8C8[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018E898; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801DBA70; +extern s32 D_801DBA7C; +extern s32 D_801DBA80; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018E904[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018E8D8[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801DBA78; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018EB54[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018E974[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018EBF8[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018ED4C[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018EB68; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018ED54[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018EB78; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018EB98; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_8018ED5C[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_8018ED84[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_8018ED90[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_8018EC04[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_8018EE34; +extern void func_8015D380(s32 a0); +extern unsigned char D_8018DF18[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_8018EE48[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_8018EE84[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_8018EECC; +extern u16 D_8018EECE; +extern u16 D_8018EED0; +extern s32 D_8018EED4; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_8018EEDC; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_8018EBE8; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_8018EF60[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_8018F010[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_8018F040[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_8018F0A4; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801DBA88[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_8018F0C8[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801DBAE0[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_8018F110[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_8018F100; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801DB0B4[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_8018F118[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_8018F16C[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_8018F134; +extern s16 D_8018F168; +extern s16 D_8018F166; +extern s16 D_8018F164; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_8018F178[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801DBB40; +extern u8 D_801DBB41; +extern u8 D_801DBB42; +extern u8 D_801DBB43; +extern u8 D_801DBB44; +extern u8 D_801DBB45; +extern u8 D_801DBB46; +extern u8 D_801DBB47; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_8018F188[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801DBB80; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_8018F1CC[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_8018F248[]; +extern s32 D_8018F268[]; +extern u8 D_8018F2E4[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_8018F304[]; +extern u8 D_8018F324[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_8018F3C0[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_8018F43C[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801DB0C4; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_8018F448[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_8018F450[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_8018F518[])(void); +extern void func_80166618(void *a0); +extern void (*D_8018F528[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_8018F538[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_8018F544[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_8018F4A4[]; +extern u8 D_8018F4B8[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_8018F55C[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_8018F564[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_8018F56C[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_8018F574[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_8018F57C[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_8018F584[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_8018F58C[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_8018F640[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_8018F648[])(void); +extern void func_80169F00(void *a0); +extern char D_8018F5F8[]; +extern char D_8018F5B8[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_8018F680[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_8018F68C[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_8018F6D4[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_8018F694[]; + extern u8 D_8018F6A4[]; + extern u8 D_801DBE50[]; + extern u8 D_801DBE78[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_8018F694, D_801DBE50) + 3; + func_8001CE28(obj, D_801DBE50); + } else { + var_s3 = func_80024054(D_8018F6A4, D_801DBE78) + 9; + func_8001CE28(obj, D_801DBE78); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_8018F750[])(void); + +void func_8016B4BC(void *a0) { + D_8018F750[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801DBEA0; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801DBEA0); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_8018F744[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_8018F744; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_8018F788[]; +extern unsigned short D_8018F790[]; +extern unsigned short D_8018F798[]; +extern unsigned char D_801DBEA8[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801DBEA8 + param_2 * 0x40); + puVar3 = D_8018F788[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_8018F790[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_8018F798[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801DBEA0; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801DBEA0, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_8018F7A0[])(void); + +void func_8016BBA4(void *a0) { + D_8018F7A0[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801DBFDC; + extern u8 D_801DBFDD; + extern u8 D_801DBFDE; + extern M2C_UNK D_801DBFE0; + extern u8 D_801DBFE1; + extern u8 D_801DBFE2; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801DBFDC) = 0x20; + D_801DBFDD = 0x20; + D_801DBFDE = 0; + (*(u8 *)&D_801DBFE0) = 0xc0; + D_801DBFE1 = 0xc0; + D_801DBFE2 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801DBFDC; +extern M2C_UNK D_801DBFE0; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801DBFDC, &D_801DBFE0, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801DBFDD; + extern u8 D_801DBFDE; + extern u8 D_801DBFE1; + extern u8 D_801DBFE2; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801DBFDC); + if (*p1 != 0) *p1 -= 4; + if (D_801DBFDD != 0) D_801DBFDD -= 4; + if (D_801DBFDE != 0) D_801DBFDE -= 4; + p2 = &(*(u8 *)&D_801DBFE0); + if (*p2 != 0) *p2 -= 4; + if (D_801DBFE1 != 0) D_801DBFE1 -= 4; + if (D_801DBFE2 != 0) D_801DBFE2 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801DBFDC), &(*(int *)&D_801DBFE0), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801DBF68; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801DBF68); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_8018F7B0; + extern s32 D_8018F7B8; + extern s32 D_8018F7C0; + extern s32 D_8018F7C8; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_8018F7B0, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_8018F7B8, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_8018F7C0, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_8018F7C8, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_8018F7D0[])(void); + +void func_8016C14C(void *a0) { + D_8018F7D0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801DBFE4[]; +extern u8 D_801DBFEC[]; +extern u8 D_801DBF9C[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801DBFE4, D_801DBFEC, D_801DBF9C); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801DBFF8[]; + extern u8 D_801DC0B8; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801DBFF8[1] = 0xff; + D_801DBFF8[2] = 0x10; + D_801DBFF8[0] = 0x10; + D_801DBFF8[6] = 0; + D_801DBFF8[5] = 0; + D_801DBFF8[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801DBFF8, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801DC0B8, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801DBFF8); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8016AB6C", func_8016C998); + + +extern void (*D_8018F7D8[])(void); + +void func_8016CB84(void *a0) { + D_8018F7D8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801DC0B8[]; + + + Blk_8016CF04_8016CF04 *p = &D_801DC0B8[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_8018F7F4[])(void); + +void func_8016D19C(void *a0) { + D_8018F7F4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_8018F7FC[])(void); + +void func_8016D428(void *a0) { + D_8018F7FC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018F864[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_8018F864[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_8018F808; +extern u8 D_8018F814; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018F808, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_8018F814); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8016AB6C", func_8016DC20); + + +extern void (*D_8018F898[])(void); + +void func_8016DEA4(void *a0) { + D_8018F898[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_8018F8A0[])(void); + +void func_8016DF20(void *a0) { + D_8018F8A0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_8018F8F4[])(void); + +void func_8016E5B8(void *a0) { + D_8018F8F4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_8018F8B4[4]; + extern s32 D_8018F8D4; + extern s32 D_8018F8DC; + extern s32 D_8018F8E4; + extern s32 D_8018F8EC; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_8018F8B4[0], pp, &tmp); + RotTransSV(&D_8018F8B4[1], &prim.v[1], &tmp); + RotTransSV(&D_8018F8B4[2], &prim.v[2], &tmp); + RotTransSV(&D_8018F8B4[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_8018F8D4; + prim.f1 = D_8018F8DC; + prim.f2 = D_8018F8E4; + prim.f3 = D_8018F8EC; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_8018F934[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_8018F934[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_8018F928[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_8018F928[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_8018F918[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_8018F918[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018F928[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_8018F928[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_8018F928[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_8018F944; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_8018F944; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_8018F9BC[])(void); + +void func_8016F6E0(void *a0) { + D_8018F9BC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_8018F9C4[])(void); + +void func_8016F798(void *a0) { + D_8018F9C4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_8018F9CC[])(void); + +void func_8016F834(void *a0) { + D_8018F9CC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_8018F9D4[])(void); + +void func_8016F8E4(void *a0) { + D_8018F9D4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_8018F9DC[])(void); + +void func_8016F9C4(void *a0) { + D_8018F9DC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_8018F9E4[])(void); + +void func_8016FA84(void *a0) { + D_8018F9E4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_8018F9F0[])(void); + +void func_8016FB7C(void *a0) { + D_8018F9F0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_8018F9FC[])(void); + +void func_8016FC90(void *a0) { + D_8018F9FC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_8018FA08[])(void); + +void func_8016FDB4(void *a0) { + D_8018FA08[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_8018FA18[])(void); + +void func_8016FF30(void *a0) { + D_8018FA18[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_8018FA28[])(void); + +void func_8016FFDC(void *a0) { + D_8018FA28[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_8018FA30[])(void); + +void func_80170150(void *a0) { + D_8018FA30[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_8018FA38[])(void); + +void func_80170240(void *a0) { + D_8018FA38[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_8018FA40[])(void); + +void func_801702FC(void *a0) { + D_8018FA40[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_8018FA48[])(void); + +void func_801703E0(void *a0) { + D_8018FA48[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_8018FA50[])(void); + +void func_801704B0(void *a0) { + D_8018FA50[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_8018FA58[])(void); + +void func_80170548(void *a0) { + D_8018FA58[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_8018FA60[])(void); + +void func_801705F8(void *a0) { + D_8018FA60[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_8018FA68[])(void); + +void func_801706AC(void *a0) { + D_8018FA68[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_8018FA70[])(void); + +void func_80170748(void *a0) { + D_8018FA70[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_8018FA78[])(void); + +void func_80170810(void *a0) { + D_8018FA78[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_8018FA80[])(void); + +void func_80170AD8(void *a0) { + D_8018FA80[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_8018FA88[])(void); + +void func_80170BD8(void *a0) { + D_8018FA88[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_8018FA90[])(void); + +void func_80170C74(void *a0) { + D_8018FA90[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8016AB6C", func_80170CF0); + + +extern void (*D_8018FA98[])(void); + +void func_80170D68(void *a0) { + D_8018FA98[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_8018FAA0[])(void); + +void func_80170E34(void *a0) { + D_8018FAA0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_8018FAA8[])(void); + +void func_80170EFC(void *a0) { + D_8018FAA8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_8018FAB0[])(void); + +void func_80170FB0(void *a0) { + D_8018FAB0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_8018FAB8[])(void); + +void func_80171064(void *a0) { + D_8018FAB8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_8018FAC0[])(void); + +void func_80171120(void *a0) { + D_8018FAC0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_8018FAC8[])(void); + +void func_801711C0(void *a0) { + D_8018FAC8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_8018FAD0[])(void); + +void func_80171260(void *a0) { + D_8018FAD0[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_8018FAD8[])(void); + +void func_801714E4(void *a0) { + D_8018FAD8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8016AB6C", func_80172C50); + + +extern void (*D_8018FB1C[])(void); + +void func_80172CA0(void *a0) { + D_8018FB1C[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_8018FAE0; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_8018FAE0); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC06_030/ov_SC06_030_jr_8015AE2C.c b/src/ov_SC06_030/ov_SC06_030_jr_8015AE2C.c index db5a78a0d..d065cf170 100644 --- a/src/ov_SC06_030/ov_SC06_030_jr_8015AE2C.c +++ b/src/ov_SC06_030/ov_SC06_030_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_80184FC4[])(void); void func_8016AB30(void *a0) { D_80184FC4[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80185040[])(void); - -void func_8016B4BC(void *a0) { - D_80185040[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801B9100; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801B9100); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80185034[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80185034; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80185078[]; -extern unsigned short D_80185080[]; -extern unsigned short D_80185088[]; -extern unsigned char D_801B9108[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801B9108 + param_2 * 0x40); - puVar3 = D_80185078[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80185080[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80185088[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801B9100; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801B9100, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80185090[])(void); - -void func_8016BBA4(void *a0) { - D_80185090[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801B923C; - extern u8 D_801B923D; - extern u8 D_801B923E; - extern M2C_UNK D_801B9240; - extern u8 D_801B9241; - extern u8 D_801B9242; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801B923C) = 0x20; - D_801B923D = 0x20; - D_801B923E = 0; - (*(u8 *)&D_801B9240) = 0xc0; - D_801B9241 = 0xc0; - D_801B9242 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801B923C; -extern M2C_UNK D_801B9240; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801B923C, &D_801B9240, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801B923D; - extern u8 D_801B923E; - extern u8 D_801B9241; - extern u8 D_801B9242; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801B923C); - if (*p1 != 0) *p1 -= 4; - if (D_801B923D != 0) D_801B923D -= 4; - if (D_801B923E != 0) D_801B923E -= 4; - p2 = &(*(u8 *)&D_801B9240); - if (*p2 != 0) *p2 -= 4; - if (D_801B9241 != 0) D_801B9241 -= 4; - if (D_801B9242 != 0) D_801B9242 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801B923C), &(*(int *)&D_801B9240), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801B91C8; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801B91C8); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_801850A0; - extern s32 D_801850A8; - extern s32 D_801850B0; - extern s32 D_801850B8; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_801850A0, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_801850A8, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_801850B0, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_801850B8, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_801850C0[])(void); - -void func_8016C14C(void *a0) { - D_801850C0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801B9244[]; -extern u8 D_801B924C[]; -extern u8 D_801B91FC[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801B9244, D_801B924C, D_801B91FC); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801B9258[]; - extern u8 D_801B9318; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801B9258[1] = 0xff; - D_801B9258[2] = 0x10; - D_801B9258[0] = 0x10; - D_801B9258[6] = 0; - D_801B9258[5] = 0; - D_801B9258[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801B9258, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801B9318, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801B9258); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8015AE2C", func_8016C998); - - -extern void (*D_801850C8[])(void); - -void func_8016CB84(void *a0) { - D_801850C8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801B9318[]; - - - Blk_8016CF04_8016CF04 *p = &D_801B9318[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_801850E4[])(void); - -void func_8016D19C(void *a0) { - D_801850E4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_801850EC[])(void); - -void func_8016D428(void *a0) { - D_801850EC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80185154[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80185154[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_801850F8; -extern u8 D_80185104; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801850F8, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80185104); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80185188[])(void); - -void func_8016DEA4(void *a0) { - D_80185188[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80185190[])(void); - -void func_8016DF20(void *a0) { - D_80185190[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_801851E4[])(void); - -void func_8016E5B8(void *a0) { - D_801851E4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_801851A4[4]; - extern s32 D_801851C4; - extern s32 D_801851CC; - extern s32 D_801851D4; - extern s32 D_801851DC; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_801851A4[0], pp, &tmp); - RotTransSV(&D_801851A4[1], &prim.v[1], &tmp); - RotTransSV(&D_801851A4[2], &prim.v[2], &tmp); - RotTransSV(&D_801851A4[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_801851C4; - prim.f1 = D_801851CC; - prim.f2 = D_801851D4; - prim.f3 = D_801851DC; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80185224[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80185224[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80185218[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80185218[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80185208[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80185208[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80185218[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80185218[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80185218[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80185234; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80185234; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_801852AC[])(void); - -void func_8016F6E0(void *a0) { - D_801852AC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_801852B4[])(void); - -void func_8016F798(void *a0) { - D_801852B4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_801852BC[])(void); - -void func_8016F834(void *a0) { - D_801852BC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_801852C4[])(void); - -void func_8016F8E4(void *a0) { - D_801852C4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_801852CC[])(void); - -void func_8016F9C4(void *a0) { - D_801852CC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_801852D4[])(void); - -void func_8016FA84(void *a0) { - D_801852D4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_801852E0[])(void); - -void func_8016FB7C(void *a0) { - D_801852E0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_801852EC[])(void); - -void func_8016FC90(void *a0) { - D_801852EC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_801852F8[])(void); - -void func_8016FDB4(void *a0) { - D_801852F8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80185308[])(void); - -void func_8016FF30(void *a0) { - D_80185308[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80185318[])(void); - -void func_8016FFDC(void *a0) { - D_80185318[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80185320[])(void); - -void func_80170150(void *a0) { - D_80185320[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80185328[])(void); - -void func_80170240(void *a0) { - D_80185328[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80185330[])(void); - -void func_801702FC(void *a0) { - D_80185330[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80185338[])(void); - -void func_801703E0(void *a0) { - D_80185338[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80185340[])(void); - -void func_801704B0(void *a0) { - D_80185340[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80185348[])(void); - -void func_80170548(void *a0) { - D_80185348[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80185350[])(void); - -void func_801705F8(void *a0) { - D_80185350[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80185358[])(void); - -void func_801706AC(void *a0) { - D_80185358[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80185360[])(void); - -void func_80170748(void *a0) { - D_80185360[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80185368[])(void); - -void func_80170810(void *a0) { - D_80185368[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80185370[])(void); - -void func_80170AD8(void *a0) { - D_80185370[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80185378[])(void); - -void func_80170BD8(void *a0) { - D_80185378[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80185380[])(void); - -void func_80170C74(void *a0) { - D_80185380[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80185388[])(void); - -void func_80170D68(void *a0) { - D_80185388[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80185390[])(void); - -void func_80170E34(void *a0) { - D_80185390[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80185398[])(void); - -void func_80170EFC(void *a0) { - D_80185398[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_801853A0[])(void); - -void func_80170FB0(void *a0) { - D_801853A0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_801853A8[])(void); - -void func_80171064(void *a0) { - D_801853A8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_801853B0[])(void); - -void func_80171120(void *a0) { - D_801853B0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_801853B8[])(void); - -void func_801711C0(void *a0) { - D_801853B8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_801853C0[])(void); - -void func_80171260(void *a0) { - D_801853C0[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_801853C8[])(void); - -void func_801714E4(void *a0) { - D_801853C8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8015AE2C", func_80172C50); - - -extern void (*D_8018540C[])(void); - -void func_80172CA0(void *a0) { - D_8018540C[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_801853D0; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_801853D0); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC06_030/ov_SC06_030_jr_8016AB6C.c b/src/ov_SC06_030/ov_SC06_030_jr_8016AB6C.c new file mode 100644 index 000000000..8f49763f7 --- /dev/null +++ b/src/ov_SC06_030/ov_SC06_030_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80184390; +extern u8 D_80184300; +extern u8 D_801842DC; +extern u8 D_801842B8; +extern u8 D_8018436C; +extern u8 D_80184348; +extern u8 D_80184324; +extern u8 D_80184294; +extern void func_80145934(void); +extern u8 D_80184420; +extern u8 D_801843FC; +extern u8 D_801843D8; +extern u8 D_801843B4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80183818[]; +extern unsigned char D_80183848[]; +extern unsigned char D_80183898[]; +extern unsigned char D_801838C8[]; +extern unsigned char D_801838F8[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80183948[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80183A10[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80183A98[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80183AA0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801B8C90; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801B8C94; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80183AD0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80183B78[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80183B9C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80183B8C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80183BB0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80183BBC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80183BCC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80183BE4[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80183BD4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80183BF8[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80183C14[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80183C04; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80183C28[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80183C3C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80183C50; +extern void (*D_80183C78[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80183C58; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80183CC4[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80183CC8[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018412C[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018413C[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801B8CC8; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80184164[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80184144; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80184154; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801841A4[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801841AC[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80184178; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801841B8[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80184188; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801B8CD0; +extern s32 D_801B8CDC; +extern s32 D_801B8CE0; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801841F4[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801841C8[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801B8CD8; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80184444[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80184264[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_801844E8[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018463C[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80184458; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80184644[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80184468; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80184488; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_8018464C[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80184674[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80184680[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_801844F4[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80184724; +extern void func_8015D380(s32 a0); +extern unsigned char D_80183808[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80184738[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80184774[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_801847BC; +extern u16 D_801847BE; +extern u16 D_801847C0; +extern s32 D_801847C4; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_801847CC; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_801844D8; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80184850[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80184900[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80184930[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80184994; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801B8CE8[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_801849B8[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801B8D40[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80184A00[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_801849F0; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801B8418[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80184A08[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80184A5C[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80184A24; +extern s16 D_80184A58; +extern s16 D_80184A56; +extern s16 D_80184A54; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80184A68[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801B8DA0; +extern u8 D_801B8DA1; +extern u8 D_801B8DA2; +extern u8 D_801B8DA3; +extern u8 D_801B8DA4; +extern u8 D_801B8DA5; +extern u8 D_801B8DA6; +extern u8 D_801B8DA7; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80184A78[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801B8DE0; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80184ABC[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80184B38[]; +extern s32 D_80184B58[]; +extern u8 D_80184BD4[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80184BF4[]; +extern u8 D_80184C14[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80184CB0[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80184D2C[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801B8428; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80184D38[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80184D40[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80184E08[])(void); +extern void func_80166618(void *a0); +extern void (*D_80184E18[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80184E28[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80184E34[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80184D94[]; +extern u8 D_80184DA8[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80184E4C[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80184E54[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80184E5C[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80184E64[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80184E6C[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80184E74[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80184E7C[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80184F30[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80184F38[])(void); +extern void func_80169F00(void *a0); +extern char D_80184EE8[]; +extern char D_80184EA8[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80184F70[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80184F7C[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80184FC4[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80184F84[]; + extern u8 D_80184F94[]; + extern u8 D_801B90B0[]; + extern u8 D_801B90D8[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80184F84, D_801B90B0) + 3; + func_8001CE28(obj, D_801B90B0); + } else { + var_s3 = func_80024054(D_80184F94, D_801B90D8) + 9; + func_8001CE28(obj, D_801B90D8); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80185040[])(void); + +void func_8016B4BC(void *a0) { + D_80185040[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801B9100; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801B9100); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80185034[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80185034; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80185078[]; +extern unsigned short D_80185080[]; +extern unsigned short D_80185088[]; +extern unsigned char D_801B9108[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801B9108 + param_2 * 0x40); + puVar3 = D_80185078[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80185080[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80185088[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801B9100; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801B9100, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80185090[])(void); + +void func_8016BBA4(void *a0) { + D_80185090[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801B923C; + extern u8 D_801B923D; + extern u8 D_801B923E; + extern M2C_UNK D_801B9240; + extern u8 D_801B9241; + extern u8 D_801B9242; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801B923C) = 0x20; + D_801B923D = 0x20; + D_801B923E = 0; + (*(u8 *)&D_801B9240) = 0xc0; + D_801B9241 = 0xc0; + D_801B9242 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801B923C; +extern M2C_UNK D_801B9240; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801B923C, &D_801B9240, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801B923D; + extern u8 D_801B923E; + extern u8 D_801B9241; + extern u8 D_801B9242; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801B923C); + if (*p1 != 0) *p1 -= 4; + if (D_801B923D != 0) D_801B923D -= 4; + if (D_801B923E != 0) D_801B923E -= 4; + p2 = &(*(u8 *)&D_801B9240); + if (*p2 != 0) *p2 -= 4; + if (D_801B9241 != 0) D_801B9241 -= 4; + if (D_801B9242 != 0) D_801B9242 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801B923C), &(*(int *)&D_801B9240), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801B91C8; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801B91C8); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_801850A0; + extern s32 D_801850A8; + extern s32 D_801850B0; + extern s32 D_801850B8; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_801850A0, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_801850A8, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_801850B0, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_801850B8, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_801850C0[])(void); + +void func_8016C14C(void *a0) { + D_801850C0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801B9244[]; +extern u8 D_801B924C[]; +extern u8 D_801B91FC[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801B9244, D_801B924C, D_801B91FC); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801B9258[]; + extern u8 D_801B9318; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801B9258[1] = 0xff; + D_801B9258[2] = 0x10; + D_801B9258[0] = 0x10; + D_801B9258[6] = 0; + D_801B9258[5] = 0; + D_801B9258[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801B9258, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801B9318, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801B9258); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8016AB6C", func_8016C998); + + +extern void (*D_801850C8[])(void); + +void func_8016CB84(void *a0) { + D_801850C8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801B9318[]; + + + Blk_8016CF04_8016CF04 *p = &D_801B9318[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_801850E4[])(void); + +void func_8016D19C(void *a0) { + D_801850E4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_801850EC[])(void); + +void func_8016D428(void *a0) { + D_801850EC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80185154[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80185154[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_801850F8; +extern u8 D_80185104; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801850F8, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80185104); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80185188[])(void); + +void func_8016DEA4(void *a0) { + D_80185188[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80185190[])(void); + +void func_8016DF20(void *a0) { + D_80185190[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_801851E4[])(void); + +void func_8016E5B8(void *a0) { + D_801851E4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_801851A4[4]; + extern s32 D_801851C4; + extern s32 D_801851CC; + extern s32 D_801851D4; + extern s32 D_801851DC; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_801851A4[0], pp, &tmp); + RotTransSV(&D_801851A4[1], &prim.v[1], &tmp); + RotTransSV(&D_801851A4[2], &prim.v[2], &tmp); + RotTransSV(&D_801851A4[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_801851C4; + prim.f1 = D_801851CC; + prim.f2 = D_801851D4; + prim.f3 = D_801851DC; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80185224[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80185224[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80185218[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80185218[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80185208[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80185208[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80185218[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80185218[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80185218[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80185234; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80185234; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_801852AC[])(void); + +void func_8016F6E0(void *a0) { + D_801852AC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_801852B4[])(void); + +void func_8016F798(void *a0) { + D_801852B4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_801852BC[])(void); + +void func_8016F834(void *a0) { + D_801852BC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_801852C4[])(void); + +void func_8016F8E4(void *a0) { + D_801852C4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_801852CC[])(void); + +void func_8016F9C4(void *a0) { + D_801852CC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_801852D4[])(void); + +void func_8016FA84(void *a0) { + D_801852D4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_801852E0[])(void); + +void func_8016FB7C(void *a0) { + D_801852E0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_801852EC[])(void); + +void func_8016FC90(void *a0) { + D_801852EC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_801852F8[])(void); + +void func_8016FDB4(void *a0) { + D_801852F8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80185308[])(void); + +void func_8016FF30(void *a0) { + D_80185308[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80185318[])(void); + +void func_8016FFDC(void *a0) { + D_80185318[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80185320[])(void); + +void func_80170150(void *a0) { + D_80185320[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80185328[])(void); + +void func_80170240(void *a0) { + D_80185328[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80185330[])(void); + +void func_801702FC(void *a0) { + D_80185330[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80185338[])(void); + +void func_801703E0(void *a0) { + D_80185338[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80185340[])(void); + +void func_801704B0(void *a0) { + D_80185340[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80185348[])(void); + +void func_80170548(void *a0) { + D_80185348[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80185350[])(void); + +void func_801705F8(void *a0) { + D_80185350[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80185358[])(void); + +void func_801706AC(void *a0) { + D_80185358[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80185360[])(void); + +void func_80170748(void *a0) { + D_80185360[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80185368[])(void); + +void func_80170810(void *a0) { + D_80185368[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80185370[])(void); + +void func_80170AD8(void *a0) { + D_80185370[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80185378[])(void); + +void func_80170BD8(void *a0) { + D_80185378[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80185380[])(void); + +void func_80170C74(void *a0) { + D_80185380[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80185388[])(void); + +void func_80170D68(void *a0) { + D_80185388[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80185390[])(void); + +void func_80170E34(void *a0) { + D_80185390[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80185398[])(void); + +void func_80170EFC(void *a0) { + D_80185398[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_801853A0[])(void); + +void func_80170FB0(void *a0) { + D_801853A0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_801853A8[])(void); + +void func_80171064(void *a0) { + D_801853A8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_801853B0[])(void); + +void func_80171120(void *a0) { + D_801853B0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_801853B8[])(void); + +void func_801711C0(void *a0) { + D_801853B8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_801853C0[])(void); + +void func_80171260(void *a0) { + D_801853C0[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_801853C8[])(void); + +void func_801714E4(void *a0) { + D_801853C8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8016AB6C", func_80172C50); + + +extern void (*D_8018540C[])(void); + +void func_80172CA0(void *a0) { + D_8018540C[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_801853D0; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_801853D0); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC06_032/ov_SC06_032_jr_8015AE2C.c b/src/ov_SC06_032/ov_SC06_032_jr_8015AE2C.c index a4f4c9e0a..a752ef294 100644 --- a/src/ov_SC06_032/ov_SC06_032_jr_8015AE2C.c +++ b/src/ov_SC06_032/ov_SC06_032_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_80196490[])(void); void func_8016AB30(void *a0) { D_80196490[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_8019650C[])(void); - -void func_8016B4BC(void *a0) { - D_8019650C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801CF7B0; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801CF7B0); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80196500[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80196500; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80196544[]; -extern unsigned short D_8019654C[]; -extern unsigned short D_80196554[]; -extern unsigned char D_801CF7B8[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801CF7B8 + param_2 * 0x40); - puVar3 = D_80196544[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_8019654C[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80196554[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801CF7B0; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801CF7B0, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_8019655C[])(void); - -void func_8016BBA4(void *a0) { - D_8019655C[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801CF8EC; - extern u8 D_801CF8ED; - extern u8 D_801CF8EE; - extern M2C_UNK D_801CF8F0; - extern u8 D_801CF8F1; - extern u8 D_801CF8F2; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801CF8EC) = 0x20; - D_801CF8ED = 0x20; - D_801CF8EE = 0; - (*(u8 *)&D_801CF8F0) = 0xc0; - D_801CF8F1 = 0xc0; - D_801CF8F2 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801CF8EC; -extern M2C_UNK D_801CF8F0; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801CF8EC, &D_801CF8F0, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801CF8ED; - extern u8 D_801CF8EE; - extern u8 D_801CF8F1; - extern u8 D_801CF8F2; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801CF8EC); - if (*p1 != 0) *p1 -= 4; - if (D_801CF8ED != 0) D_801CF8ED -= 4; - if (D_801CF8EE != 0) D_801CF8EE -= 4; - p2 = &(*(u8 *)&D_801CF8F0); - if (*p2 != 0) *p2 -= 4; - if (D_801CF8F1 != 0) D_801CF8F1 -= 4; - if (D_801CF8F2 != 0) D_801CF8F2 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801CF8EC), &(*(int *)&D_801CF8F0), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801CF878; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801CF878); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_8019656C; - extern s32 D_80196574; - extern s32 D_8019657C; - extern s32 D_80196584; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_8019656C, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80196574, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_8019657C, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80196584, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_8019658C[])(void); - -void func_8016C14C(void *a0) { - D_8019658C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801CF8F4[]; -extern u8 D_801CF8FC[]; -extern u8 D_801CF8AC[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801CF8F4, D_801CF8FC, D_801CF8AC); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801CF908[]; - extern u8 D_801CF9C8; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801CF908[1] = 0xff; - D_801CF908[2] = 0x10; - D_801CF908[0] = 0x10; - D_801CF908[6] = 0; - D_801CF908[5] = 0; - D_801CF908[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801CF908, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801CF9C8, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801CF908); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8015AE2C", func_8016C998); - - -extern void (*D_80196594[])(void); - -void func_8016CB84(void *a0) { - D_80196594[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801CF9C8[]; - - - Blk_8016CF04_8016CF04 *p = &D_801CF9C8[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_801965B0[])(void); - -void func_8016D19C(void *a0) { - D_801965B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_801965B8[])(void); - -void func_8016D428(void *a0) { - D_801965B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80196620[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80196620[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_801965C4; -extern u8 D_801965D0; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801965C4, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801965D0); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80196654[])(void); - -void func_8016DEA4(void *a0) { - D_80196654[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_8019665C[])(void); - -void func_8016DF20(void *a0) { - D_8019665C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_801966B0[])(void); - -void func_8016E5B8(void *a0) { - D_801966B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80196670[4]; - extern s32 D_80196690; - extern s32 D_80196698; - extern s32 D_801966A0; - extern s32 D_801966A8; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80196670[0], pp, &tmp); - RotTransSV(&D_80196670[1], &prim.v[1], &tmp); - RotTransSV(&D_80196670[2], &prim.v[2], &tmp); - RotTransSV(&D_80196670[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80196690; - prim.f1 = D_80196698; - prim.f2 = D_801966A0; - prim.f3 = D_801966A8; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_801966F0[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_801966F0[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_801966E4[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_801966E4[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_801966D4[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_801966D4[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801966E4[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_801966E4[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_801966E4[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80196700; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80196700; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80196778[])(void); - -void func_8016F6E0(void *a0) { - D_80196778[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80196780[])(void); - -void func_8016F798(void *a0) { - D_80196780[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80196788[])(void); - -void func_8016F834(void *a0) { - D_80196788[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80196790[])(void); - -void func_8016F8E4(void *a0) { - D_80196790[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80196798[])(void); - -void func_8016F9C4(void *a0) { - D_80196798[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_801967A0[])(void); - -void func_8016FA84(void *a0) { - D_801967A0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_801967AC[])(void); - -void func_8016FB7C(void *a0) { - D_801967AC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_801967B8[])(void); - -void func_8016FC90(void *a0) { - D_801967B8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_801967C4[])(void); - -void func_8016FDB4(void *a0) { - D_801967C4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_801967D4[])(void); - -void func_8016FF30(void *a0) { - D_801967D4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_801967E4[])(void); - -void func_8016FFDC(void *a0) { - D_801967E4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_801967EC[])(void); - -void func_80170150(void *a0) { - D_801967EC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_801967F4[])(void); - -void func_80170240(void *a0) { - D_801967F4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_801967FC[])(void); - -void func_801702FC(void *a0) { - D_801967FC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80196804[])(void); - -void func_801703E0(void *a0) { - D_80196804[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_8019680C[])(void); - -void func_801704B0(void *a0) { - D_8019680C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80196814[])(void); - -void func_80170548(void *a0) { - D_80196814[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_8019681C[])(void); - -void func_801705F8(void *a0) { - D_8019681C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80196824[])(void); - -void func_801706AC(void *a0) { - D_80196824[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_8019682C[])(void); - -void func_80170748(void *a0) { - D_8019682C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80196834[])(void); - -void func_80170810(void *a0) { - D_80196834[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_8019683C[])(void); - -void func_80170AD8(void *a0) { - D_8019683C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80196844[])(void); - -void func_80170BD8(void *a0) { - D_80196844[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_8019684C[])(void); - -void func_80170C74(void *a0) { - D_8019684C[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80196854[])(void); - -void func_80170D68(void *a0) { - D_80196854[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_8019685C[])(void); - -void func_80170E34(void *a0) { - D_8019685C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80196864[])(void); - -void func_80170EFC(void *a0) { - D_80196864[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_8019686C[])(void); - -void func_80170FB0(void *a0) { - D_8019686C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80196874[])(void); - -void func_80171064(void *a0) { - D_80196874[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_8019687C[])(void); - -void func_80171120(void *a0) { - D_8019687C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80196884[])(void); - -void func_801711C0(void *a0) { - D_80196884[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_8019688C[])(void); - -void func_80171260(void *a0) { - D_8019688C[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80196894[])(void); - -void func_801714E4(void *a0) { - D_80196894[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8015AE2C", func_80172C50); - - -extern void (*D_801968D8[])(void); - -void func_80172CA0(void *a0) { - D_801968D8[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_8019689C; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_8019689C); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC06_032/ov_SC06_032_jr_8016AB6C.c b/src/ov_SC06_032/ov_SC06_032_jr_8016AB6C.c new file mode 100644 index 000000000..800f8a17e --- /dev/null +++ b/src/ov_SC06_032/ov_SC06_032_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8019585C; +extern u8 D_801957CC; +extern u8 D_801957A8; +extern u8 D_80195784; +extern u8 D_80195838; +extern u8 D_80195814; +extern u8 D_801957F0; +extern u8 D_80195760; +extern void func_80145934(void); +extern u8 D_801958EC; +extern u8 D_801958C8; +extern u8 D_801958A4; +extern u8 D_80195880; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80194CE4[]; +extern unsigned char D_80194D14[]; +extern unsigned char D_80194D64[]; +extern unsigned char D_80194D94[]; +extern unsigned char D_80194DC4[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80194E14[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80194EDC[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80194F64[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80194F6C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801CF340; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801CF344; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80194F9C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80195044[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80195068[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80195058; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8019507C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80195088[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80195098[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801950B0[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801950A0; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801950C4[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801950E0[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801950D0; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801950F4[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80195108[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8019511C; +extern void (*D_80195144[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80195124; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80195190[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80195194[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_801955F8[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80195608[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801CF378; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80195630[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80195610; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80195620; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80195670[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80195678[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80195644; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80195684[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80195654; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801CF380; +extern s32 D_801CF38C; +extern s32 D_801CF390; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801956C0[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80195694[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801CF388; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80195910[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80195730[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_801959B4[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80195B08[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80195924; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80195B10[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80195934; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80195954; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80195B18[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80195B40[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80195B4C[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_801959C0[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80195BF0; +extern void func_8015D380(s32 a0); +extern unsigned char D_80194CD4[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80195C04[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80195C40[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80195C88; +extern u16 D_80195C8A; +extern u16 D_80195C8C; +extern s32 D_80195C90; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80195C98; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_801959A4; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80195D1C[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80195DCC[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80195DFC[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80195E60; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801CF398[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80195E84[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801CF3F0[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80195ECC[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80195EBC; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801CEA74[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80195ED4[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80195F28[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80195EF0; +extern s16 D_80195F24; +extern s16 D_80195F22; +extern s16 D_80195F20; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80195F34[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801CF450; +extern u8 D_801CF451; +extern u8 D_801CF452; +extern u8 D_801CF453; +extern u8 D_801CF454; +extern u8 D_801CF455; +extern u8 D_801CF456; +extern u8 D_801CF457; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80195F44[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801CF490; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80195F88[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80196004[]; +extern s32 D_80196024[]; +extern u8 D_801960A0[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_801960C0[]; +extern u8 D_801960E0[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_8019617C[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_801961F8[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801CEA84; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80196204[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_8019620C[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_801962D4[])(void); +extern void func_80166618(void *a0); +extern void (*D_801962E4[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_801962F4[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80196300[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80196260[]; +extern u8 D_80196274[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80196318[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80196320[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80196328[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80196330[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80196338[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80196340[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80196348[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_801963FC[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80196404[])(void); +extern void func_80169F00(void *a0); +extern char D_801963B4[]; +extern char D_80196374[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_8019643C[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80196448[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80196490[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80196450[]; + extern u8 D_80196460[]; + extern u8 D_801CF760[]; + extern u8 D_801CF788[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80196450, D_801CF760) + 3; + func_8001CE28(obj, D_801CF760); + } else { + var_s3 = func_80024054(D_80196460, D_801CF788) + 9; + func_8001CE28(obj, D_801CF788); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_8019650C[])(void); + +void func_8016B4BC(void *a0) { + D_8019650C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801CF7B0; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801CF7B0); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80196500[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80196500; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80196544[]; +extern unsigned short D_8019654C[]; +extern unsigned short D_80196554[]; +extern unsigned char D_801CF7B8[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801CF7B8 + param_2 * 0x40); + puVar3 = D_80196544[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_8019654C[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80196554[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801CF7B0; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801CF7B0, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_8019655C[])(void); + +void func_8016BBA4(void *a0) { + D_8019655C[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801CF8EC; + extern u8 D_801CF8ED; + extern u8 D_801CF8EE; + extern M2C_UNK D_801CF8F0; + extern u8 D_801CF8F1; + extern u8 D_801CF8F2; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801CF8EC) = 0x20; + D_801CF8ED = 0x20; + D_801CF8EE = 0; + (*(u8 *)&D_801CF8F0) = 0xc0; + D_801CF8F1 = 0xc0; + D_801CF8F2 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801CF8EC; +extern M2C_UNK D_801CF8F0; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801CF8EC, &D_801CF8F0, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801CF8ED; + extern u8 D_801CF8EE; + extern u8 D_801CF8F1; + extern u8 D_801CF8F2; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801CF8EC); + if (*p1 != 0) *p1 -= 4; + if (D_801CF8ED != 0) D_801CF8ED -= 4; + if (D_801CF8EE != 0) D_801CF8EE -= 4; + p2 = &(*(u8 *)&D_801CF8F0); + if (*p2 != 0) *p2 -= 4; + if (D_801CF8F1 != 0) D_801CF8F1 -= 4; + if (D_801CF8F2 != 0) D_801CF8F2 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801CF8EC), &(*(int *)&D_801CF8F0), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801CF878; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801CF878); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_8019656C; + extern s32 D_80196574; + extern s32 D_8019657C; + extern s32 D_80196584; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_8019656C, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80196574, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_8019657C, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80196584, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_8019658C[])(void); + +void func_8016C14C(void *a0) { + D_8019658C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801CF8F4[]; +extern u8 D_801CF8FC[]; +extern u8 D_801CF8AC[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801CF8F4, D_801CF8FC, D_801CF8AC); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801CF908[]; + extern u8 D_801CF9C8; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801CF908[1] = 0xff; + D_801CF908[2] = 0x10; + D_801CF908[0] = 0x10; + D_801CF908[6] = 0; + D_801CF908[5] = 0; + D_801CF908[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801CF908, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801CF9C8, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801CF908); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8016AB6C", func_8016C998); + + +extern void (*D_80196594[])(void); + +void func_8016CB84(void *a0) { + D_80196594[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801CF9C8[]; + + + Blk_8016CF04_8016CF04 *p = &D_801CF9C8[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_801965B0[])(void); + +void func_8016D19C(void *a0) { + D_801965B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_801965B8[])(void); + +void func_8016D428(void *a0) { + D_801965B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80196620[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80196620[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_801965C4; +extern u8 D_801965D0; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801965C4, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801965D0); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80196654[])(void); + +void func_8016DEA4(void *a0) { + D_80196654[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_8019665C[])(void); + +void func_8016DF20(void *a0) { + D_8019665C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_801966B0[])(void); + +void func_8016E5B8(void *a0) { + D_801966B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80196670[4]; + extern s32 D_80196690; + extern s32 D_80196698; + extern s32 D_801966A0; + extern s32 D_801966A8; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80196670[0], pp, &tmp); + RotTransSV(&D_80196670[1], &prim.v[1], &tmp); + RotTransSV(&D_80196670[2], &prim.v[2], &tmp); + RotTransSV(&D_80196670[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80196690; + prim.f1 = D_80196698; + prim.f2 = D_801966A0; + prim.f3 = D_801966A8; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_801966F0[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_801966F0[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_801966E4[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_801966E4[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_801966D4[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_801966D4[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801966E4[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_801966E4[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_801966E4[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80196700; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80196700; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80196778[])(void); + +void func_8016F6E0(void *a0) { + D_80196778[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80196780[])(void); + +void func_8016F798(void *a0) { + D_80196780[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80196788[])(void); + +void func_8016F834(void *a0) { + D_80196788[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80196790[])(void); + +void func_8016F8E4(void *a0) { + D_80196790[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80196798[])(void); + +void func_8016F9C4(void *a0) { + D_80196798[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_801967A0[])(void); + +void func_8016FA84(void *a0) { + D_801967A0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_801967AC[])(void); + +void func_8016FB7C(void *a0) { + D_801967AC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_801967B8[])(void); + +void func_8016FC90(void *a0) { + D_801967B8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_801967C4[])(void); + +void func_8016FDB4(void *a0) { + D_801967C4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_801967D4[])(void); + +void func_8016FF30(void *a0) { + D_801967D4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_801967E4[])(void); + +void func_8016FFDC(void *a0) { + D_801967E4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_801967EC[])(void); + +void func_80170150(void *a0) { + D_801967EC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_801967F4[])(void); + +void func_80170240(void *a0) { + D_801967F4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_801967FC[])(void); + +void func_801702FC(void *a0) { + D_801967FC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80196804[])(void); + +void func_801703E0(void *a0) { + D_80196804[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_8019680C[])(void); + +void func_801704B0(void *a0) { + D_8019680C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80196814[])(void); + +void func_80170548(void *a0) { + D_80196814[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_8019681C[])(void); + +void func_801705F8(void *a0) { + D_8019681C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80196824[])(void); + +void func_801706AC(void *a0) { + D_80196824[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_8019682C[])(void); + +void func_80170748(void *a0) { + D_8019682C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80196834[])(void); + +void func_80170810(void *a0) { + D_80196834[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_8019683C[])(void); + +void func_80170AD8(void *a0) { + D_8019683C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80196844[])(void); + +void func_80170BD8(void *a0) { + D_80196844[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_8019684C[])(void); + +void func_80170C74(void *a0) { + D_8019684C[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80196854[])(void); + +void func_80170D68(void *a0) { + D_80196854[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_8019685C[])(void); + +void func_80170E34(void *a0) { + D_8019685C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80196864[])(void); + +void func_80170EFC(void *a0) { + D_80196864[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_8019686C[])(void); + +void func_80170FB0(void *a0) { + D_8019686C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80196874[])(void); + +void func_80171064(void *a0) { + D_80196874[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_8019687C[])(void); + +void func_80171120(void *a0) { + D_8019687C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80196884[])(void); + +void func_801711C0(void *a0) { + D_80196884[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_8019688C[])(void); + +void func_80171260(void *a0) { + D_8019688C[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80196894[])(void); + +void func_801714E4(void *a0) { + D_80196894[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8016AB6C", func_80172C50); + + +extern void (*D_801968D8[])(void); + +void func_80172CA0(void *a0) { + D_801968D8[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_8019689C; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_8019689C); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC06_033/ov_SC06_033_jr_8015AE2C.c b/src/ov_SC06_033/ov_SC06_033_jr_8015AE2C.c index 05b839ac8..0f35652e6 100644 --- a/src/ov_SC06_033/ov_SC06_033_jr_8015AE2C.c +++ b/src/ov_SC06_033/ov_SC06_033_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_801949A0[])(void); void func_8016AB30(void *a0) { D_801949A0[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80194A1C[])(void); - -void func_8016B4BC(void *a0) { - D_80194A1C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801CF870; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801CF870); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80194A10[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80194A10; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80194A54[]; -extern unsigned short D_80194A5C[]; -extern unsigned short D_80194A64[]; -extern unsigned char D_801CF878[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801CF878 + param_2 * 0x40); - puVar3 = D_80194A54[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80194A5C[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80194A64[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801CF870; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801CF870, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80194A6C[])(void); - -void func_8016BBA4(void *a0) { - D_80194A6C[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801CF9AC; - extern u8 D_801CF9AD; - extern u8 D_801CF9AE; - extern M2C_UNK D_801CF9B0; - extern u8 D_801CF9B1; - extern u8 D_801CF9B2; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801CF9AC) = 0x20; - D_801CF9AD = 0x20; - D_801CF9AE = 0; - (*(u8 *)&D_801CF9B0) = 0xc0; - D_801CF9B1 = 0xc0; - D_801CF9B2 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801CF9AC; -extern M2C_UNK D_801CF9B0; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801CF9AC, &D_801CF9B0, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801CF9AD; - extern u8 D_801CF9AE; - extern u8 D_801CF9B1; - extern u8 D_801CF9B2; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801CF9AC); - if (*p1 != 0) *p1 -= 4; - if (D_801CF9AD != 0) D_801CF9AD -= 4; - if (D_801CF9AE != 0) D_801CF9AE -= 4; - p2 = &(*(u8 *)&D_801CF9B0); - if (*p2 != 0) *p2 -= 4; - if (D_801CF9B1 != 0) D_801CF9B1 -= 4; - if (D_801CF9B2 != 0) D_801CF9B2 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801CF9AC), &(*(int *)&D_801CF9B0), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801CF938; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801CF938); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80194A7C; - extern s32 D_80194A84; - extern s32 D_80194A8C; - extern s32 D_80194A94; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80194A7C, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80194A84, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80194A8C, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80194A94, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80194A9C[])(void); - -void func_8016C14C(void *a0) { - D_80194A9C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801CF9B4[]; -extern u8 D_801CF9BC[]; -extern u8 D_801CF96C[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801CF9B4, D_801CF9BC, D_801CF96C); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801CF9C8[]; - extern u8 D_801CFA88; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801CF9C8[1] = 0xff; - D_801CF9C8[2] = 0x10; - D_801CF9C8[0] = 0x10; - D_801CF9C8[6] = 0; - D_801CF9C8[5] = 0; - D_801CF9C8[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801CF9C8, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801CFA88, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801CF9C8); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8015AE2C", func_8016C998); - - -extern void (*D_80194AA4[])(void); - -void func_8016CB84(void *a0) { - D_80194AA4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801CFA88[]; - - - Blk_8016CF04_8016CF04 *p = &D_801CFA88[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80194AC0[])(void); - -void func_8016D19C(void *a0) { - D_80194AC0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80194AC8[])(void); - -void func_8016D428(void *a0) { - D_80194AC8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80194B30[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80194B30[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80194AD4; -extern u8 D_80194AE0; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80194AD4, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80194AE0); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80194B64[])(void); - -void func_8016DEA4(void *a0) { - D_80194B64[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80194B6C[])(void); - -void func_8016DF20(void *a0) { - D_80194B6C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80194BC0[])(void); - -void func_8016E5B8(void *a0) { - D_80194BC0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80194B80[4]; - extern s32 D_80194BA0; - extern s32 D_80194BA8; - extern s32 D_80194BB0; - extern s32 D_80194BB8; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80194B80[0], pp, &tmp); - RotTransSV(&D_80194B80[1], &prim.v[1], &tmp); - RotTransSV(&D_80194B80[2], &prim.v[2], &tmp); - RotTransSV(&D_80194B80[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80194BA0; - prim.f1 = D_80194BA8; - prim.f2 = D_80194BB0; - prim.f3 = D_80194BB8; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80194C00[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80194C00[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80194BF4[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80194BF4[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80194BE4[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80194BE4[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80194BF4[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80194BF4[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80194BF4[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80194C10; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80194C10; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80194C88[])(void); - -void func_8016F6E0(void *a0) { - D_80194C88[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80194C90[])(void); - -void func_8016F798(void *a0) { - D_80194C90[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80194C98[])(void); - -void func_8016F834(void *a0) { - D_80194C98[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80194CA0[])(void); - -void func_8016F8E4(void *a0) { - D_80194CA0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80194CA8[])(void); - -void func_8016F9C4(void *a0) { - D_80194CA8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80194CB0[])(void); - -void func_8016FA84(void *a0) { - D_80194CB0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80194CBC[])(void); - -void func_8016FB7C(void *a0) { - D_80194CBC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80194CC8[])(void); - -void func_8016FC90(void *a0) { - D_80194CC8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80194CD4[])(void); - -void func_8016FDB4(void *a0) { - D_80194CD4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80194CE4[])(void); - -void func_8016FF30(void *a0) { - D_80194CE4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80194CF4[])(void); - -void func_8016FFDC(void *a0) { - D_80194CF4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80194CFC[])(void); - -void func_80170150(void *a0) { - D_80194CFC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80194D04[])(void); - -void func_80170240(void *a0) { - D_80194D04[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80194D0C[])(void); - -void func_801702FC(void *a0) { - D_80194D0C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80194D14[])(void); - -void func_801703E0(void *a0) { - D_80194D14[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80194D1C[])(void); - -void func_801704B0(void *a0) { - D_80194D1C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80194D24[])(void); - -void func_80170548(void *a0) { - D_80194D24[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80194D2C[])(void); - -void func_801705F8(void *a0) { - D_80194D2C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80194D34[])(void); - -void func_801706AC(void *a0) { - D_80194D34[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80194D3C[])(void); - -void func_80170748(void *a0) { - D_80194D3C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80194D44[])(void); - -void func_80170810(void *a0) { - D_80194D44[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80194D4C[])(void); - -void func_80170AD8(void *a0) { - D_80194D4C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80194D54[])(void); - -void func_80170BD8(void *a0) { - D_80194D54[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80194D5C[])(void); - -void func_80170C74(void *a0) { - D_80194D5C[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80194D64[])(void); - -void func_80170D68(void *a0) { - D_80194D64[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80194D6C[])(void); - -void func_80170E34(void *a0) { - D_80194D6C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80194D74[])(void); - -void func_80170EFC(void *a0) { - D_80194D74[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80194D7C[])(void); - -void func_80170FB0(void *a0) { - D_80194D7C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80194D84[])(void); - -void func_80171064(void *a0) { - D_80194D84[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80194D8C[])(void); - -void func_80171120(void *a0) { - D_80194D8C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80194D94[])(void); - -void func_801711C0(void *a0) { - D_80194D94[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80194D9C[])(void); - -void func_80171260(void *a0) { - D_80194D9C[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80194DA4[])(void); - -void func_801714E4(void *a0) { - D_80194DA4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8015AE2C", func_80172C50); - - -extern void (*D_80194DE8[])(void); - -void func_80172CA0(void *a0) { - D_80194DE8[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80194DAC; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80194DAC); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC06_033/ov_SC06_033_jr_8016AB6C.c b/src/ov_SC06_033/ov_SC06_033_jr_8016AB6C.c new file mode 100644 index 000000000..5bcd70df5 --- /dev/null +++ b/src/ov_SC06_033/ov_SC06_033_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80193D6C; +extern u8 D_80193CDC; +extern u8 D_80193CB8; +extern u8 D_80193C94; +extern u8 D_80193D48; +extern u8 D_80193D24; +extern u8 D_80193D00; +extern u8 D_80193C70; +extern void func_80145934(void); +extern u8 D_80193DFC; +extern u8 D_80193DD8; +extern u8 D_80193DB4; +extern u8 D_80193D90; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801931F4[]; +extern unsigned char D_80193224[]; +extern unsigned char D_80193274[]; +extern unsigned char D_801932A4[]; +extern unsigned char D_801932D4[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80193324[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801933EC[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80193474[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8019347C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801CF400; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801CF404; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801934AC; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80193554[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80193578[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80193568; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8019358C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80193598[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801935A8[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801935C0[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801935B0; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801935D4[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801935F0[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801935E0; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80193604[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80193618[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8019362C; +extern void (*D_80193654[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80193634; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801936A0[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801936A4[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80193B08[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80193B18[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801CF438; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80193B40[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80193B20; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80193B30; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80193B80[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80193B88[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80193B54; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80193B94[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80193B64; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801CF440; +extern s32 D_801CF44C; +extern s32 D_801CF450; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80193BD0[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80193BA4[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801CF448; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80193E20[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80193C40[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80193EC4[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80194018[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80193E34; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80194020[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80193E44; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80193E64; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80194028[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80194050[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_8019405C[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80193ED0[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80194100; +extern void func_8015D380(s32 a0); +extern unsigned char D_801931E4[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80194114[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80194150[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80194198; +extern u16 D_8019419A; +extern u16 D_8019419C; +extern s32 D_801941A0; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_801941A8; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80193EB4; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_8019422C[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_801942DC[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_8019430C[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80194370; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801CF458[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80194394[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801CF4B0[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_801943DC[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_801943CC; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801CEB28[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_801943E4[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80194438[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80194400; +extern s16 D_80194434; +extern s16 D_80194432; +extern s16 D_80194430; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_80194444[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801CF510; +extern u8 D_801CF511; +extern u8 D_801CF512; +extern u8 D_801CF513; +extern u8 D_801CF514; +extern u8 D_801CF515; +extern u8 D_801CF516; +extern u8 D_801CF517; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80194454[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801CF550; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80194498[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80194514[]; +extern s32 D_80194534[]; +extern u8 D_801945B0[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_801945D0[]; +extern u8 D_801945F0[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_8019468C[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80194708[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801CEB38; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80194714[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_8019471C[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_801947E4[])(void); +extern void func_80166618(void *a0); +extern void (*D_801947F4[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80194804[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80194810[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80194770[]; +extern u8 D_80194784[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80194828[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80194830[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80194838[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80194840[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80194848[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80194850[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80194858[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_8019490C[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80194914[])(void); +extern void func_80169F00(void *a0); +extern char D_801948C4[]; +extern char D_80194884[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_8019494C[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80194958[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_801949A0[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80194960[]; + extern u8 D_80194970[]; + extern u8 D_801CF820[]; + extern u8 D_801CF848[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80194960, D_801CF820) + 3; + func_8001CE28(obj, D_801CF820); + } else { + var_s3 = func_80024054(D_80194970, D_801CF848) + 9; + func_8001CE28(obj, D_801CF848); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80194A1C[])(void); + +void func_8016B4BC(void *a0) { + D_80194A1C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801CF870; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801CF870); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80194A10[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80194A10; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80194A54[]; +extern unsigned short D_80194A5C[]; +extern unsigned short D_80194A64[]; +extern unsigned char D_801CF878[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801CF878 + param_2 * 0x40); + puVar3 = D_80194A54[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80194A5C[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80194A64[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801CF870; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801CF870, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80194A6C[])(void); + +void func_8016BBA4(void *a0) { + D_80194A6C[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801CF9AC; + extern u8 D_801CF9AD; + extern u8 D_801CF9AE; + extern M2C_UNK D_801CF9B0; + extern u8 D_801CF9B1; + extern u8 D_801CF9B2; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801CF9AC) = 0x20; + D_801CF9AD = 0x20; + D_801CF9AE = 0; + (*(u8 *)&D_801CF9B0) = 0xc0; + D_801CF9B1 = 0xc0; + D_801CF9B2 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801CF9AC; +extern M2C_UNK D_801CF9B0; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801CF9AC, &D_801CF9B0, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801CF9AD; + extern u8 D_801CF9AE; + extern u8 D_801CF9B1; + extern u8 D_801CF9B2; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801CF9AC); + if (*p1 != 0) *p1 -= 4; + if (D_801CF9AD != 0) D_801CF9AD -= 4; + if (D_801CF9AE != 0) D_801CF9AE -= 4; + p2 = &(*(u8 *)&D_801CF9B0); + if (*p2 != 0) *p2 -= 4; + if (D_801CF9B1 != 0) D_801CF9B1 -= 4; + if (D_801CF9B2 != 0) D_801CF9B2 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801CF9AC), &(*(int *)&D_801CF9B0), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801CF938; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801CF938); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80194A7C; + extern s32 D_80194A84; + extern s32 D_80194A8C; + extern s32 D_80194A94; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80194A7C, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80194A84, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80194A8C, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80194A94, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80194A9C[])(void); + +void func_8016C14C(void *a0) { + D_80194A9C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801CF9B4[]; +extern u8 D_801CF9BC[]; +extern u8 D_801CF96C[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801CF9B4, D_801CF9BC, D_801CF96C); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801CF9C8[]; + extern u8 D_801CFA88; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801CF9C8[1] = 0xff; + D_801CF9C8[2] = 0x10; + D_801CF9C8[0] = 0x10; + D_801CF9C8[6] = 0; + D_801CF9C8[5] = 0; + D_801CF9C8[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801CF9C8, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801CFA88, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801CF9C8); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8016AB6C", func_8016C998); + + +extern void (*D_80194AA4[])(void); + +void func_8016CB84(void *a0) { + D_80194AA4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801CFA88[]; + + + Blk_8016CF04_8016CF04 *p = &D_801CFA88[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80194AC0[])(void); + +void func_8016D19C(void *a0) { + D_80194AC0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80194AC8[])(void); + +void func_8016D428(void *a0) { + D_80194AC8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80194B30[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80194B30[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80194AD4; +extern u8 D_80194AE0; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80194AD4, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80194AE0); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80194B64[])(void); + +void func_8016DEA4(void *a0) { + D_80194B64[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80194B6C[])(void); + +void func_8016DF20(void *a0) { + D_80194B6C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80194BC0[])(void); + +void func_8016E5B8(void *a0) { + D_80194BC0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80194B80[4]; + extern s32 D_80194BA0; + extern s32 D_80194BA8; + extern s32 D_80194BB0; + extern s32 D_80194BB8; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80194B80[0], pp, &tmp); + RotTransSV(&D_80194B80[1], &prim.v[1], &tmp); + RotTransSV(&D_80194B80[2], &prim.v[2], &tmp); + RotTransSV(&D_80194B80[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80194BA0; + prim.f1 = D_80194BA8; + prim.f2 = D_80194BB0; + prim.f3 = D_80194BB8; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80194C00[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80194C00[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80194BF4[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80194BF4[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80194BE4[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80194BE4[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80194BF4[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80194BF4[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80194BF4[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80194C10; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80194C10; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80194C88[])(void); + +void func_8016F6E0(void *a0) { + D_80194C88[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80194C90[])(void); + +void func_8016F798(void *a0) { + D_80194C90[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80194C98[])(void); + +void func_8016F834(void *a0) { + D_80194C98[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80194CA0[])(void); + +void func_8016F8E4(void *a0) { + D_80194CA0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80194CA8[])(void); + +void func_8016F9C4(void *a0) { + D_80194CA8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80194CB0[])(void); + +void func_8016FA84(void *a0) { + D_80194CB0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80194CBC[])(void); + +void func_8016FB7C(void *a0) { + D_80194CBC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80194CC8[])(void); + +void func_8016FC90(void *a0) { + D_80194CC8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80194CD4[])(void); + +void func_8016FDB4(void *a0) { + D_80194CD4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80194CE4[])(void); + +void func_8016FF30(void *a0) { + D_80194CE4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80194CF4[])(void); + +void func_8016FFDC(void *a0) { + D_80194CF4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80194CFC[])(void); + +void func_80170150(void *a0) { + D_80194CFC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80194D04[])(void); + +void func_80170240(void *a0) { + D_80194D04[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80194D0C[])(void); + +void func_801702FC(void *a0) { + D_80194D0C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80194D14[])(void); + +void func_801703E0(void *a0) { + D_80194D14[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80194D1C[])(void); + +void func_801704B0(void *a0) { + D_80194D1C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80194D24[])(void); + +void func_80170548(void *a0) { + D_80194D24[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80194D2C[])(void); + +void func_801705F8(void *a0) { + D_80194D2C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80194D34[])(void); + +void func_801706AC(void *a0) { + D_80194D34[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80194D3C[])(void); + +void func_80170748(void *a0) { + D_80194D3C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80194D44[])(void); + +void func_80170810(void *a0) { + D_80194D44[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80194D4C[])(void); + +void func_80170AD8(void *a0) { + D_80194D4C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80194D54[])(void); + +void func_80170BD8(void *a0) { + D_80194D54[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80194D5C[])(void); + +void func_80170C74(void *a0) { + D_80194D5C[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80194D64[])(void); + +void func_80170D68(void *a0) { + D_80194D64[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80194D6C[])(void); + +void func_80170E34(void *a0) { + D_80194D6C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80194D74[])(void); + +void func_80170EFC(void *a0) { + D_80194D74[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80194D7C[])(void); + +void func_80170FB0(void *a0) { + D_80194D7C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80194D84[])(void); + +void func_80171064(void *a0) { + D_80194D84[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80194D8C[])(void); + +void func_80171120(void *a0) { + D_80194D8C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80194D94[])(void); + +void func_801711C0(void *a0) { + D_80194D94[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80194D9C[])(void); + +void func_80171260(void *a0) { + D_80194D9C[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80194DA4[])(void); + +void func_801714E4(void *a0) { + D_80194DA4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8016AB6C", func_80172C50); + + +extern void (*D_80194DE8[])(void); + +void func_80172CA0(void *a0) { + D_80194DE8[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80194DAC; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80194DAC); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC07_000/ov_SC07_000_jr_8015AE2C.c b/src/ov_SC07_000/ov_SC07_000_jr_8015AE2C.c index 868d2366e..5134ee6ff 100644 --- a/src/ov_SC07_000/ov_SC07_000_jr_8015AE2C.c +++ b/src/ov_SC07_000/ov_SC07_000_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_801857E8[])(void); void func_8016AB30(void *a0) { D_801857E8[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80185864[])(void); - -void func_8016B4BC(void *a0) { - D_80185864[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801CEDB8; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801CEDB8); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80185858[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80185858; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_8018589C[]; -extern unsigned short D_801858A4[]; -extern unsigned short D_801858AC[]; -extern unsigned char D_801CEDC0[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801CEDC0 + param_2 * 0x40); - puVar3 = D_8018589C[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_801858A4[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_801858AC[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801CEDB8; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801CEDB8, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_801858B4[])(void); - -void func_8016BBA4(void *a0) { - D_801858B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801CEEF4; - extern u8 D_801CEEF5; - extern u8 D_801CEEF6; - extern M2C_UNK D_801CEEF8; - extern u8 D_801CEEF9; - extern u8 D_801CEEFA; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801CEEF4) = 0x20; - D_801CEEF5 = 0x20; - D_801CEEF6 = 0; - (*(u8 *)&D_801CEEF8) = 0xc0; - D_801CEEF9 = 0xc0; - D_801CEEFA = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801CEEF4; -extern M2C_UNK D_801CEEF8; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801CEEF4, &D_801CEEF8, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801CEEF5; - extern u8 D_801CEEF6; - extern u8 D_801CEEF9; - extern u8 D_801CEEFA; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801CEEF4); - if (*p1 != 0) *p1 -= 4; - if (D_801CEEF5 != 0) D_801CEEF5 -= 4; - if (D_801CEEF6 != 0) D_801CEEF6 -= 4; - p2 = &(*(u8 *)&D_801CEEF8); - if (*p2 != 0) *p2 -= 4; - if (D_801CEEF9 != 0) D_801CEEF9 -= 4; - if (D_801CEEFA != 0) D_801CEEFA -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801CEEF4), &(*(int *)&D_801CEEF8), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801CEE80; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801CEE80); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_801858C4; - extern s32 D_801858CC; - extern s32 D_801858D4; - extern s32 D_801858DC; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_801858C4, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_801858CC, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_801858D4, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_801858DC, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_801858E4[])(void); - -void func_8016C14C(void *a0) { - D_801858E4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801CEEFC[]; -extern u8 D_801CEF04[]; -extern u8 D_801CEEB4[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801CEEFC, D_801CEF04, D_801CEEB4); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801CEF10[]; - extern u8 D_801CEFD0; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801CEF10[1] = 0xff; - D_801CEF10[2] = 0x10; - D_801CEF10[0] = 0x10; - D_801CEF10[6] = 0; - D_801CEF10[5] = 0; - D_801CEF10[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801CEF10, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801CEFD0, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801CEF10); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8015AE2C", func_8016C998); - - -extern void (*D_801858EC[])(void); - -void func_8016CB84(void *a0) { - D_801858EC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801CEFD0[]; - - - Blk_8016CF04_8016CF04 *p = &D_801CEFD0[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80185908[])(void); - -void func_8016D19C(void *a0) { - D_80185908[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80185910[])(void); - -void func_8016D428(void *a0) { - D_80185910[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80185978[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80185978[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_8018591C; -extern u8 D_80185928; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018591C, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80185928); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8015AE2C", func_8016DC20); - - -extern void (*D_801859AC[])(void); - -void func_8016DEA4(void *a0) { - D_801859AC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_801859B4[])(void); - -void func_8016DF20(void *a0) { - D_801859B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80185A08[])(void); - -void func_8016E5B8(void *a0) { - D_80185A08[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_801859C8[4]; - extern s32 D_801859E8; - extern s32 D_801859F0; - extern s32 D_801859F8; - extern s32 D_80185A00; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_801859C8[0], pp, &tmp); - RotTransSV(&D_801859C8[1], &prim.v[1], &tmp); - RotTransSV(&D_801859C8[2], &prim.v[2], &tmp); - RotTransSV(&D_801859C8[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_801859E8; - prim.f1 = D_801859F0; - prim.f2 = D_801859F8; - prim.f3 = D_80185A00; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80185A48[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80185A48[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80185A3C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80185A3C[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80185A2C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80185A2C[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80185A3C[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80185A3C[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80185A3C[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80185A58; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80185A58; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80185AD0[])(void); - -void func_8016F6E0(void *a0) { - D_80185AD0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80185AD8[])(void); - -void func_8016F798(void *a0) { - D_80185AD8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80185AE0[])(void); - -void func_8016F834(void *a0) { - D_80185AE0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80185AE8[])(void); - -void func_8016F8E4(void *a0) { - D_80185AE8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80185AF0[])(void); - -void func_8016F9C4(void *a0) { - D_80185AF0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80185AF8[])(void); - -void func_8016FA84(void *a0) { - D_80185AF8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80185B04[])(void); - -void func_8016FB7C(void *a0) { - D_80185B04[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80185B10[])(void); - -void func_8016FC90(void *a0) { - D_80185B10[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80185B1C[])(void); - -void func_8016FDB4(void *a0) { - D_80185B1C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80185B2C[])(void); - -void func_8016FF30(void *a0) { - D_80185B2C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80185B3C[])(void); - -void func_8016FFDC(void *a0) { - D_80185B3C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80185B44[])(void); - -void func_80170150(void *a0) { - D_80185B44[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80185B4C[])(void); - -void func_80170240(void *a0) { - D_80185B4C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80185B54[])(void); - -void func_801702FC(void *a0) { - D_80185B54[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80185B5C[])(void); - -void func_801703E0(void *a0) { - D_80185B5C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80185B64[])(void); - -void func_801704B0(void *a0) { - D_80185B64[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80185B6C[])(void); - -void func_80170548(void *a0) { - D_80185B6C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80185B74[])(void); - -void func_801705F8(void *a0) { - D_80185B74[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80185B7C[])(void); - -void func_801706AC(void *a0) { - D_80185B7C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80185B84[])(void); - -void func_80170748(void *a0) { - D_80185B84[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80185B8C[])(void); - -void func_80170810(void *a0) { - D_80185B8C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80185B94[])(void); - -void func_80170AD8(void *a0) { - D_80185B94[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80185B9C[])(void); - -void func_80170BD8(void *a0) { - D_80185B9C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80185BA4[])(void); - -void func_80170C74(void *a0) { - D_80185BA4[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80185BAC[])(void); - -void func_80170D68(void *a0) { - D_80185BAC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80185BB4[])(void); - -void func_80170E34(void *a0) { - D_80185BB4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80185BBC[])(void); - -void func_80170EFC(void *a0) { - D_80185BBC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80185BC4[])(void); - -void func_80170FB0(void *a0) { - D_80185BC4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80185BCC[])(void); - -void func_80171064(void *a0) { - D_80185BCC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80185BD4[])(void); - -void func_80171120(void *a0) { - D_80185BD4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80185BDC[])(void); - -void func_801711C0(void *a0) { - D_80185BDC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80185BE4[])(void); - -void func_80171260(void *a0) { - D_80185BE4[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80185BEC[])(void); - -void func_801714E4(void *a0) { - D_80185BEC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8015AE2C", func_80172C50); - - -extern void (*D_80185C30[])(void); - -void func_80172CA0(void *a0) { - D_80185C30[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80185BF4; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80185BF4); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC07_000/ov_SC07_000_jr_8016AB6C.c b/src/ov_SC07_000/ov_SC07_000_jr_8016AB6C.c new file mode 100644 index 000000000..24a8d03c1 --- /dev/null +++ b/src/ov_SC07_000/ov_SC07_000_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80184BB4; +extern u8 D_80184B24; +extern u8 D_80184B00; +extern u8 D_80184ADC; +extern u8 D_80184B90; +extern u8 D_80184B6C; +extern u8 D_80184B48; +extern u8 D_80184AB8; +extern void func_80145934(void); +extern u8 D_80184C44; +extern u8 D_80184C20; +extern u8 D_80184BFC; +extern u8 D_80184BD8; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018403C[]; +extern unsigned char D_8018406C[]; +extern unsigned char D_801840BC[]; +extern unsigned char D_801840EC[]; +extern unsigned char D_8018411C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018416C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80184234[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801842BC[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801842C4; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801CE948; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801CE94C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801842F4; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018439C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801843C0[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801843B0; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801843D4[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801843E0[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801843F0[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80184408[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801843F8; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018441C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80184438[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80184428; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018444C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80184460[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80184474; +extern void (*D_8018449C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018447C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801844E8[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801844EC[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80184950[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80184960[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801CE980; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80184988[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80184968; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80184978; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801849C8[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801849D0[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018499C; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801849DC[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_801849AC; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801CE988; +extern s32 D_801CE994; +extern s32 D_801CE998; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80184A18[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801849EC[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801CE990; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80184C68[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80184A88[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80184D0C[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80184E60[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80184C7C; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80184E68[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80184C8C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80184CAC; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80184E70[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80184E98[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80184EA4[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80184D18[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80184F48; +extern void func_8015D380(s32 a0); +extern unsigned char D_8018402C[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80184F5C[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80184F98[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80184FE0; +extern u16 D_80184FE2; +extern u16 D_80184FE4; +extern s32 D_80184FE8; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80184FF0; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80184CFC; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80185074[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80185124[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80185154[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_801851B8; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801CE9A0[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_801851DC[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801CE9F8[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80185224[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80185214; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801CE184[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_8018522C[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80185280[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80185248; +extern s16 D_8018527C; +extern s16 D_8018527A; +extern s16 D_80185278; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_8018528C[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801CEA58; +extern u8 D_801CEA59; +extern u8 D_801CEA5A; +extern u8 D_801CEA5B; +extern u8 D_801CEA5C; +extern u8 D_801CEA5D; +extern u8 D_801CEA5E; +extern u8 D_801CEA5F; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_8018529C[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801CEA98; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_801852E0[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_8018535C[]; +extern s32 D_8018537C[]; +extern u8 D_801853F8[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80185418[]; +extern u8 D_80185438[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_801854D4[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80185550[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801CE194; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_8018555C[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80185564[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_8018562C[])(void); +extern void func_80166618(void *a0); +extern void (*D_8018563C[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_8018564C[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80185658[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_801855B8[]; +extern u8 D_801855CC[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80185670[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80185678[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80185680[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80185688[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80185690[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80185698[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_801856A0[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80185754[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_8018575C[])(void); +extern void func_80169F00(void *a0); +extern char D_8018570C[]; +extern char D_801856CC[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80185794[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_801857A0[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_801857E8[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_801857A8[]; + extern u8 D_801857B8[]; + extern u8 D_801CED68[]; + extern u8 D_801CED90[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_801857A8, D_801CED68) + 3; + func_8001CE28(obj, D_801CED68); + } else { + var_s3 = func_80024054(D_801857B8, D_801CED90) + 9; + func_8001CE28(obj, D_801CED90); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80185864[])(void); + +void func_8016B4BC(void *a0) { + D_80185864[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801CEDB8; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801CEDB8); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80185858[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80185858; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_8018589C[]; +extern unsigned short D_801858A4[]; +extern unsigned short D_801858AC[]; +extern unsigned char D_801CEDC0[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801CEDC0 + param_2 * 0x40); + puVar3 = D_8018589C[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_801858A4[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_801858AC[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801CEDB8; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801CEDB8, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_801858B4[])(void); + +void func_8016BBA4(void *a0) { + D_801858B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801CEEF4; + extern u8 D_801CEEF5; + extern u8 D_801CEEF6; + extern M2C_UNK D_801CEEF8; + extern u8 D_801CEEF9; + extern u8 D_801CEEFA; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801CEEF4) = 0x20; + D_801CEEF5 = 0x20; + D_801CEEF6 = 0; + (*(u8 *)&D_801CEEF8) = 0xc0; + D_801CEEF9 = 0xc0; + D_801CEEFA = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801CEEF4; +extern M2C_UNK D_801CEEF8; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801CEEF4, &D_801CEEF8, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801CEEF5; + extern u8 D_801CEEF6; + extern u8 D_801CEEF9; + extern u8 D_801CEEFA; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801CEEF4); + if (*p1 != 0) *p1 -= 4; + if (D_801CEEF5 != 0) D_801CEEF5 -= 4; + if (D_801CEEF6 != 0) D_801CEEF6 -= 4; + p2 = &(*(u8 *)&D_801CEEF8); + if (*p2 != 0) *p2 -= 4; + if (D_801CEEF9 != 0) D_801CEEF9 -= 4; + if (D_801CEEFA != 0) D_801CEEFA -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801CEEF4), &(*(int *)&D_801CEEF8), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801CEE80; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801CEE80); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_801858C4; + extern s32 D_801858CC; + extern s32 D_801858D4; + extern s32 D_801858DC; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_801858C4, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_801858CC, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_801858D4, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_801858DC, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_801858E4[])(void); + +void func_8016C14C(void *a0) { + D_801858E4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801CEEFC[]; +extern u8 D_801CEF04[]; +extern u8 D_801CEEB4[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801CEEFC, D_801CEF04, D_801CEEB4); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801CEF10[]; + extern u8 D_801CEFD0; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801CEF10[1] = 0xff; + D_801CEF10[2] = 0x10; + D_801CEF10[0] = 0x10; + D_801CEF10[6] = 0; + D_801CEF10[5] = 0; + D_801CEF10[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801CEF10, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801CEFD0, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801CEF10); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8016AB6C", func_8016C998); + + +extern void (*D_801858EC[])(void); + +void func_8016CB84(void *a0) { + D_801858EC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801CEFD0[]; + + + Blk_8016CF04_8016CF04 *p = &D_801CEFD0[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80185908[])(void); + +void func_8016D19C(void *a0) { + D_80185908[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80185910[])(void); + +void func_8016D428(void *a0) { + D_80185910[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80185978[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80185978[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_8018591C; +extern u8 D_80185928; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_8018591C, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80185928); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8016AB6C", func_8016DC20); + + +extern void (*D_801859AC[])(void); + +void func_8016DEA4(void *a0) { + D_801859AC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_801859B4[])(void); + +void func_8016DF20(void *a0) { + D_801859B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80185A08[])(void); + +void func_8016E5B8(void *a0) { + D_80185A08[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_801859C8[4]; + extern s32 D_801859E8; + extern s32 D_801859F0; + extern s32 D_801859F8; + extern s32 D_80185A00; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_801859C8[0], pp, &tmp); + RotTransSV(&D_801859C8[1], &prim.v[1], &tmp); + RotTransSV(&D_801859C8[2], &prim.v[2], &tmp); + RotTransSV(&D_801859C8[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_801859E8; + prim.f1 = D_801859F0; + prim.f2 = D_801859F8; + prim.f3 = D_80185A00; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80185A48[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80185A48[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80185A3C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80185A3C[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80185A2C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80185A2C[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80185A3C[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80185A3C[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80185A3C[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80185A58; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80185A58; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80185AD0[])(void); + +void func_8016F6E0(void *a0) { + D_80185AD0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80185AD8[])(void); + +void func_8016F798(void *a0) { + D_80185AD8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80185AE0[])(void); + +void func_8016F834(void *a0) { + D_80185AE0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80185AE8[])(void); + +void func_8016F8E4(void *a0) { + D_80185AE8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80185AF0[])(void); + +void func_8016F9C4(void *a0) { + D_80185AF0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80185AF8[])(void); + +void func_8016FA84(void *a0) { + D_80185AF8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80185B04[])(void); + +void func_8016FB7C(void *a0) { + D_80185B04[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80185B10[])(void); + +void func_8016FC90(void *a0) { + D_80185B10[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80185B1C[])(void); + +void func_8016FDB4(void *a0) { + D_80185B1C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80185B2C[])(void); + +void func_8016FF30(void *a0) { + D_80185B2C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80185B3C[])(void); + +void func_8016FFDC(void *a0) { + D_80185B3C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80185B44[])(void); + +void func_80170150(void *a0) { + D_80185B44[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80185B4C[])(void); + +void func_80170240(void *a0) { + D_80185B4C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80185B54[])(void); + +void func_801702FC(void *a0) { + D_80185B54[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80185B5C[])(void); + +void func_801703E0(void *a0) { + D_80185B5C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80185B64[])(void); + +void func_801704B0(void *a0) { + D_80185B64[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80185B6C[])(void); + +void func_80170548(void *a0) { + D_80185B6C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80185B74[])(void); + +void func_801705F8(void *a0) { + D_80185B74[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80185B7C[])(void); + +void func_801706AC(void *a0) { + D_80185B7C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80185B84[])(void); + +void func_80170748(void *a0) { + D_80185B84[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80185B8C[])(void); + +void func_80170810(void *a0) { + D_80185B8C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80185B94[])(void); + +void func_80170AD8(void *a0) { + D_80185B94[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80185B9C[])(void); + +void func_80170BD8(void *a0) { + D_80185B9C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80185BA4[])(void); + +void func_80170C74(void *a0) { + D_80185BA4[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80185BAC[])(void); + +void func_80170D68(void *a0) { + D_80185BAC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80185BB4[])(void); + +void func_80170E34(void *a0) { + D_80185BB4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80185BBC[])(void); + +void func_80170EFC(void *a0) { + D_80185BBC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80185BC4[])(void); + +void func_80170FB0(void *a0) { + D_80185BC4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80185BCC[])(void); + +void func_80171064(void *a0) { + D_80185BCC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80185BD4[])(void); + +void func_80171120(void *a0) { + D_80185BD4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80185BDC[])(void); + +void func_801711C0(void *a0) { + D_80185BDC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80185BE4[])(void); + +void func_80171260(void *a0) { + D_80185BE4[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80185BEC[])(void); + +void func_801714E4(void *a0) { + D_80185BEC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8016AB6C", func_80172C50); + + +extern void (*D_80185C30[])(void); + +void func_80172CA0(void *a0) { + D_80185C30[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80185BF4; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80185BF4); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC07_001/ov_SC07_001_jr_8015AE2C.c b/src/ov_SC07_001/ov_SC07_001_jr_8015AE2C.c index 412112eb1..fa671213c 100644 --- a/src/ov_SC07_001/ov_SC07_001_jr_8015AE2C.c +++ b/src/ov_SC07_001/ov_SC07_001_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_80184698[])(void); void func_8016AB30(void *a0) { D_80184698[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80184714[])(void); - -void func_8016B4BC(void *a0) { - D_80184714[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801A9E68; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801A9E68); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80184708[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80184708; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_8018474C[]; -extern unsigned short D_80184754[]; -extern unsigned short D_8018475C[]; -extern unsigned char D_801A9E70[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801A9E70 + param_2 * 0x40); - puVar3 = D_8018474C[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80184754[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_8018475C[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801A9E68; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801A9E68, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80184764[])(void); - -void func_8016BBA4(void *a0) { - D_80184764[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801A9FA4; - extern u8 D_801A9FA5; - extern u8 D_801A9FA6; - extern M2C_UNK D_801A9FA8; - extern u8 D_801A9FA9; - extern u8 D_801A9FAA; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801A9FA4) = 0x20; - D_801A9FA5 = 0x20; - D_801A9FA6 = 0; - (*(u8 *)&D_801A9FA8) = 0xc0; - D_801A9FA9 = 0xc0; - D_801A9FAA = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801A9FA4; -extern M2C_UNK D_801A9FA8; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801A9FA4, &D_801A9FA8, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801A9FA5; - extern u8 D_801A9FA6; - extern u8 D_801A9FA9; - extern u8 D_801A9FAA; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801A9FA4); - if (*p1 != 0) *p1 -= 4; - if (D_801A9FA5 != 0) D_801A9FA5 -= 4; - if (D_801A9FA6 != 0) D_801A9FA6 -= 4; - p2 = &(*(u8 *)&D_801A9FA8); - if (*p2 != 0) *p2 -= 4; - if (D_801A9FA9 != 0) D_801A9FA9 -= 4; - if (D_801A9FAA != 0) D_801A9FAA -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801A9FA4), &(*(int *)&D_801A9FA8), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801A9F30; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801A9F30); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80184774; - extern s32 D_8018477C; - extern s32 D_80184784; - extern s32 D_8018478C; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80184774, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_8018477C, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80184784, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_8018478C, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80184794[])(void); - -void func_8016C14C(void *a0) { - D_80184794[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801A9FAC[]; -extern u8 D_801A9FB4[]; -extern u8 D_801A9F64[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801A9FAC, D_801A9FB4, D_801A9F64); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801A9FC0[]; - extern u8 D_801AA080; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801A9FC0[1] = 0xff; - D_801A9FC0[2] = 0x10; - D_801A9FC0[0] = 0x10; - D_801A9FC0[6] = 0; - D_801A9FC0[5] = 0; - D_801A9FC0[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801A9FC0, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801AA080, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801A9FC0); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8015AE2C", func_8016C998); - - -extern void (*D_8018479C[])(void); - -void func_8016CB84(void *a0) { - D_8018479C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801AA080[]; - - - Blk_8016CF04_8016CF04 *p = &D_801AA080[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_801847B8[])(void); - -void func_8016D19C(void *a0) { - D_801847B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_801847C0[])(void); - -void func_8016D428(void *a0) { - D_801847C0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80184828[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80184828[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_801847CC; -extern u8 D_801847D8; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801847CC, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801847D8); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8015AE2C", func_8016DC20); - - -extern void (*D_8018485C[])(void); - -void func_8016DEA4(void *a0) { - D_8018485C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80184864[])(void); - -void func_8016DF20(void *a0) { - D_80184864[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_801848B8[])(void); - -void func_8016E5B8(void *a0) { - D_801848B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80184878[4]; - extern s32 D_80184898; - extern s32 D_801848A0; - extern s32 D_801848A8; - extern s32 D_801848B0; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80184878[0], pp, &tmp); - RotTransSV(&D_80184878[1], &prim.v[1], &tmp); - RotTransSV(&D_80184878[2], &prim.v[2], &tmp); - RotTransSV(&D_80184878[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80184898; - prim.f1 = D_801848A0; - prim.f2 = D_801848A8; - prim.f3 = D_801848B0; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_801848F8[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_801848F8[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_801848EC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_801848EC[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_801848DC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_801848DC[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801848EC[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_801848EC[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_801848EC[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80184908; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80184908; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80184980[])(void); - -void func_8016F6E0(void *a0) { - D_80184980[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80184988[])(void); - -void func_8016F798(void *a0) { - D_80184988[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80184990[])(void); - -void func_8016F834(void *a0) { - D_80184990[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80184998[])(void); - -void func_8016F8E4(void *a0) { - D_80184998[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_801849A0[])(void); - -void func_8016F9C4(void *a0) { - D_801849A0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_801849A8[])(void); - -void func_8016FA84(void *a0) { - D_801849A8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_801849B4[])(void); - -void func_8016FB7C(void *a0) { - D_801849B4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_801849C0[])(void); - -void func_8016FC90(void *a0) { - D_801849C0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_801849CC[])(void); - -void func_8016FDB4(void *a0) { - D_801849CC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_801849DC[])(void); - -void func_8016FF30(void *a0) { - D_801849DC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_801849EC[])(void); - -void func_8016FFDC(void *a0) { - D_801849EC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_801849F4[])(void); - -void func_80170150(void *a0) { - D_801849F4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_801849FC[])(void); - -void func_80170240(void *a0) { - D_801849FC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80184A04[])(void); - -void func_801702FC(void *a0) { - D_80184A04[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80184A0C[])(void); - -void func_801703E0(void *a0) { - D_80184A0C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80184A14[])(void); - -void func_801704B0(void *a0) { - D_80184A14[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80184A1C[])(void); - -void func_80170548(void *a0) { - D_80184A1C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80184A24[])(void); - -void func_801705F8(void *a0) { - D_80184A24[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80184A2C[])(void); - -void func_801706AC(void *a0) { - D_80184A2C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80184A34[])(void); - -void func_80170748(void *a0) { - D_80184A34[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80184A3C[])(void); - -void func_80170810(void *a0) { - D_80184A3C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80184A44[])(void); - -void func_80170AD8(void *a0) { - D_80184A44[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80184A4C[])(void); - -void func_80170BD8(void *a0) { - D_80184A4C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80184A54[])(void); - -void func_80170C74(void *a0) { - D_80184A54[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80184A5C[])(void); - -void func_80170D68(void *a0) { - D_80184A5C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80184A64[])(void); - -void func_80170E34(void *a0) { - D_80184A64[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80184A6C[])(void); - -void func_80170EFC(void *a0) { - D_80184A6C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80184A74[])(void); - -void func_80170FB0(void *a0) { - D_80184A74[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80184A7C[])(void); - -void func_80171064(void *a0) { - D_80184A7C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80184A84[])(void); - -void func_80171120(void *a0) { - D_80184A84[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80184A8C[])(void); - -void func_801711C0(void *a0) { - D_80184A8C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80184A94[])(void); - -void func_80171260(void *a0) { - D_80184A94[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80184A9C[])(void); - -void func_801714E4(void *a0) { - D_80184A9C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8015AE2C", func_80172C50); - - -extern void (*D_80184AE0[])(void); - -void func_80172CA0(void *a0) { - D_80184AE0[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80184AA4; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80184AA4); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC07_001/ov_SC07_001_jr_8016AB6C.c b/src/ov_SC07_001/ov_SC07_001_jr_8016AB6C.c new file mode 100644 index 000000000..d8f60959f --- /dev/null +++ b/src/ov_SC07_001/ov_SC07_001_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80183A64; +extern u8 D_801839D4; +extern u8 D_801839B0; +extern u8 D_8018398C; +extern u8 D_80183A40; +extern u8 D_80183A1C; +extern u8 D_801839F8; +extern u8 D_80183968; +extern void func_80145934(void); +extern u8 D_80183AF4; +extern u8 D_80183AD0; +extern u8 D_80183AAC; +extern u8 D_80183A88; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80182EEC[]; +extern unsigned char D_80182F1C[]; +extern unsigned char D_80182F6C[]; +extern unsigned char D_80182F9C[]; +extern unsigned char D_80182FCC[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018301C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801830E4[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018316C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80183174; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801A99F8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801A99FC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801831A4; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018324C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80183270[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80183260; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80183284[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80183290[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801832A0[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801832B8[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801832A8; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801832CC[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801832E8[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801832D8; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801832FC[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80183310[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80183324; +extern void (*D_8018334C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018332C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80183398[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018339C[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80183800[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80183810[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801A9A30; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80183838[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80183818; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80183828; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80183878[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80183880[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018384C; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018388C[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018385C; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801A9A38; +extern s32 D_801A9A44; +extern s32 D_801A9A48; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801838C8[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018389C[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801A9A40; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80183B18[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80183938[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80183BBC[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80183D10[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80183B2C; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80183D18[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80183B3C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80183B5C; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80183D20[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80183D48[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80183D54[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80183BC8[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80183DF8; +extern void func_8015D380(s32 a0); +extern unsigned char D_80182EDC[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80183E0C[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80183E48[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80183E90; +extern u16 D_80183E92; +extern u16 D_80183E94; +extern s32 D_80183E98; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80183EA0; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80183BAC; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80183F24[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80183FD4[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80184004[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80184068; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801A9A50[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_8018408C[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801A9AA8[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_801840D4[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_801840C4; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801A9320[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_801840DC[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80184130[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_801840F8; +extern s16 D_8018412C; +extern s16 D_8018412A; +extern s16 D_80184128; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_8018413C[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801A9B08; +extern u8 D_801A9B09; +extern u8 D_801A9B0A; +extern u8 D_801A9B0B; +extern u8 D_801A9B0C; +extern u8 D_801A9B0D; +extern u8 D_801A9B0E; +extern u8 D_801A9B0F; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_8018414C[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801A9B48; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80184190[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_8018420C[]; +extern s32 D_8018422C[]; +extern u8 D_801842A8[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_801842C8[]; +extern u8 D_801842E8[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80184384[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80184400[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801A9330; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_8018440C[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80184414[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_801844DC[])(void); +extern void func_80166618(void *a0); +extern void (*D_801844EC[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_801844FC[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80184508[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80184468[]; +extern u8 D_8018447C[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80184520[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80184528[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80184530[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80184538[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80184540[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80184548[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80184550[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80184604[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_8018460C[])(void); +extern void func_80169F00(void *a0); +extern char D_801845BC[]; +extern char D_8018457C[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80184644[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80184650[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80184698[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80184658[]; + extern u8 D_80184668[]; + extern u8 D_801A9E18[]; + extern u8 D_801A9E40[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80184658, D_801A9E18) + 3; + func_8001CE28(obj, D_801A9E18); + } else { + var_s3 = func_80024054(D_80184668, D_801A9E40) + 9; + func_8001CE28(obj, D_801A9E40); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80184714[])(void); + +void func_8016B4BC(void *a0) { + D_80184714[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801A9E68; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801A9E68); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80184708[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80184708; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_8018474C[]; +extern unsigned short D_80184754[]; +extern unsigned short D_8018475C[]; +extern unsigned char D_801A9E70[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801A9E70 + param_2 * 0x40); + puVar3 = D_8018474C[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80184754[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_8018475C[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801A9E68; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801A9E68, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80184764[])(void); + +void func_8016BBA4(void *a0) { + D_80184764[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801A9FA4; + extern u8 D_801A9FA5; + extern u8 D_801A9FA6; + extern M2C_UNK D_801A9FA8; + extern u8 D_801A9FA9; + extern u8 D_801A9FAA; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801A9FA4) = 0x20; + D_801A9FA5 = 0x20; + D_801A9FA6 = 0; + (*(u8 *)&D_801A9FA8) = 0xc0; + D_801A9FA9 = 0xc0; + D_801A9FAA = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801A9FA4; +extern M2C_UNK D_801A9FA8; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801A9FA4, &D_801A9FA8, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801A9FA5; + extern u8 D_801A9FA6; + extern u8 D_801A9FA9; + extern u8 D_801A9FAA; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801A9FA4); + if (*p1 != 0) *p1 -= 4; + if (D_801A9FA5 != 0) D_801A9FA5 -= 4; + if (D_801A9FA6 != 0) D_801A9FA6 -= 4; + p2 = &(*(u8 *)&D_801A9FA8); + if (*p2 != 0) *p2 -= 4; + if (D_801A9FA9 != 0) D_801A9FA9 -= 4; + if (D_801A9FAA != 0) D_801A9FAA -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801A9FA4), &(*(int *)&D_801A9FA8), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801A9F30; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801A9F30); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80184774; + extern s32 D_8018477C; + extern s32 D_80184784; + extern s32 D_8018478C; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80184774, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_8018477C, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80184784, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_8018478C, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80184794[])(void); + +void func_8016C14C(void *a0) { + D_80184794[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801A9FAC[]; +extern u8 D_801A9FB4[]; +extern u8 D_801A9F64[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801A9FAC, D_801A9FB4, D_801A9F64); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801A9FC0[]; + extern u8 D_801AA080; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801A9FC0[1] = 0xff; + D_801A9FC0[2] = 0x10; + D_801A9FC0[0] = 0x10; + D_801A9FC0[6] = 0; + D_801A9FC0[5] = 0; + D_801A9FC0[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801A9FC0, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801AA080, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801A9FC0); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8016AB6C", func_8016C998); + + +extern void (*D_8018479C[])(void); + +void func_8016CB84(void *a0) { + D_8018479C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801AA080[]; + + + Blk_8016CF04_8016CF04 *p = &D_801AA080[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_801847B8[])(void); + +void func_8016D19C(void *a0) { + D_801847B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_801847C0[])(void); + +void func_8016D428(void *a0) { + D_801847C0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80184828[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80184828[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_801847CC; +extern u8 D_801847D8; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801847CC, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801847D8); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8016AB6C", func_8016DC20); + + +extern void (*D_8018485C[])(void); + +void func_8016DEA4(void *a0) { + D_8018485C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80184864[])(void); + +void func_8016DF20(void *a0) { + D_80184864[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_801848B8[])(void); + +void func_8016E5B8(void *a0) { + D_801848B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80184878[4]; + extern s32 D_80184898; + extern s32 D_801848A0; + extern s32 D_801848A8; + extern s32 D_801848B0; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80184878[0], pp, &tmp); + RotTransSV(&D_80184878[1], &prim.v[1], &tmp); + RotTransSV(&D_80184878[2], &prim.v[2], &tmp); + RotTransSV(&D_80184878[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80184898; + prim.f1 = D_801848A0; + prim.f2 = D_801848A8; + prim.f3 = D_801848B0; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_801848F8[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_801848F8[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_801848EC[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_801848EC[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_801848DC[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_801848DC[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801848EC[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_801848EC[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_801848EC[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80184908; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80184908; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80184980[])(void); + +void func_8016F6E0(void *a0) { + D_80184980[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80184988[])(void); + +void func_8016F798(void *a0) { + D_80184988[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80184990[])(void); + +void func_8016F834(void *a0) { + D_80184990[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80184998[])(void); + +void func_8016F8E4(void *a0) { + D_80184998[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_801849A0[])(void); + +void func_8016F9C4(void *a0) { + D_801849A0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_801849A8[])(void); + +void func_8016FA84(void *a0) { + D_801849A8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_801849B4[])(void); + +void func_8016FB7C(void *a0) { + D_801849B4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_801849C0[])(void); + +void func_8016FC90(void *a0) { + D_801849C0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_801849CC[])(void); + +void func_8016FDB4(void *a0) { + D_801849CC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_801849DC[])(void); + +void func_8016FF30(void *a0) { + D_801849DC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_801849EC[])(void); + +void func_8016FFDC(void *a0) { + D_801849EC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_801849F4[])(void); + +void func_80170150(void *a0) { + D_801849F4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_801849FC[])(void); + +void func_80170240(void *a0) { + D_801849FC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80184A04[])(void); + +void func_801702FC(void *a0) { + D_80184A04[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80184A0C[])(void); + +void func_801703E0(void *a0) { + D_80184A0C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80184A14[])(void); + +void func_801704B0(void *a0) { + D_80184A14[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80184A1C[])(void); + +void func_80170548(void *a0) { + D_80184A1C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80184A24[])(void); + +void func_801705F8(void *a0) { + D_80184A24[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80184A2C[])(void); + +void func_801706AC(void *a0) { + D_80184A2C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80184A34[])(void); + +void func_80170748(void *a0) { + D_80184A34[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80184A3C[])(void); + +void func_80170810(void *a0) { + D_80184A3C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80184A44[])(void); + +void func_80170AD8(void *a0) { + D_80184A44[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80184A4C[])(void); + +void func_80170BD8(void *a0) { + D_80184A4C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80184A54[])(void); + +void func_80170C74(void *a0) { + D_80184A54[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80184A5C[])(void); + +void func_80170D68(void *a0) { + D_80184A5C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80184A64[])(void); + +void func_80170E34(void *a0) { + D_80184A64[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80184A6C[])(void); + +void func_80170EFC(void *a0) { + D_80184A6C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80184A74[])(void); + +void func_80170FB0(void *a0) { + D_80184A74[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80184A7C[])(void); + +void func_80171064(void *a0) { + D_80184A7C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80184A84[])(void); + +void func_80171120(void *a0) { + D_80184A84[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80184A8C[])(void); + +void func_801711C0(void *a0) { + D_80184A8C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80184A94[])(void); + +void func_80171260(void *a0) { + D_80184A94[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80184A9C[])(void); + +void func_801714E4(void *a0) { + D_80184A9C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8016AB6C", func_80172C50); + + +extern void (*D_80184AE0[])(void); + +void func_80172CA0(void *a0) { + D_80184AE0[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80184AA4; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80184AA4); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC07_002/ov_SC07_002_jr_8015AE2C.c b/src/ov_SC07_002/ov_SC07_002_jr_8015AE2C.c index a0d7b464c..80af92acc 100644 --- a/src/ov_SC07_002/ov_SC07_002_jr_8015AE2C.c +++ b/src/ov_SC07_002/ov_SC07_002_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_80189954[])(void); void func_8016AB30(void *a0) { D_80189954[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_801899D0[])(void); - -void func_8016B4BC(void *a0) { - D_801899D0[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_8019A9B8; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_8019A9B8); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_801899C4[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_801899C4; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80189A08[]; -extern unsigned short D_80189A10[]; -extern unsigned short D_80189A18[]; -extern unsigned char D_8019A9C0[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_8019A9C0 + param_2 * 0x40); - puVar3 = D_80189A08[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80189A10[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80189A18[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_8019A9B8; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_8019A9B8, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80189A20[])(void); - -void func_8016BBA4(void *a0) { - D_80189A20[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_8019AAF4; - extern u8 D_8019AAF5; - extern u8 D_8019AAF6; - extern M2C_UNK D_8019AAF8; - extern u8 D_8019AAF9; - extern u8 D_8019AAFA; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_8019AAF4) = 0x20; - D_8019AAF5 = 0x20; - D_8019AAF6 = 0; - (*(u8 *)&D_8019AAF8) = 0xc0; - D_8019AAF9 = 0xc0; - D_8019AAFA = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_8019AAF4; -extern M2C_UNK D_8019AAF8; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_8019AAF4, &D_8019AAF8, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_8019AAF5; - extern u8 D_8019AAF6; - extern u8 D_8019AAF9; - extern u8 D_8019AAFA; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_8019AAF4); - if (*p1 != 0) *p1 -= 4; - if (D_8019AAF5 != 0) D_8019AAF5 -= 4; - if (D_8019AAF6 != 0) D_8019AAF6 -= 4; - p2 = &(*(u8 *)&D_8019AAF8); - if (*p2 != 0) *p2 -= 4; - if (D_8019AAF9 != 0) D_8019AAF9 -= 4; - if (D_8019AAFA != 0) D_8019AAFA -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_8019AAF4), &(*(int *)&D_8019AAF8), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_8019AA80; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_8019AA80); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80189A30; - extern s32 D_80189A38; - extern s32 D_80189A40; - extern s32 D_80189A48; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80189A30, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80189A38, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80189A40, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80189A48, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80189A50[])(void); - -void func_8016C14C(void *a0) { - D_80189A50[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_8019AAFC[]; -extern u8 D_8019AB04[]; -extern u8 D_8019AAB4[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_8019AAFC, D_8019AB04, D_8019AAB4); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_8019AB10[]; - extern u8 D_8019ABD0; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_8019AB10[1] = 0xff; - D_8019AB10[2] = 0x10; - D_8019AB10[0] = 0x10; - D_8019AB10[6] = 0; - D_8019AB10[5] = 0; - D_8019AB10[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_8019AB10, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_8019ABD0, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_8019AB10); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8015AE2C", func_8016C998); - - -extern void (*D_80189A58[])(void); - -void func_8016CB84(void *a0) { - D_80189A58[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_8019ABD0[]; - - - Blk_8016CF04_8016CF04 *p = &D_8019ABD0[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80189A74[])(void); - -void func_8016D19C(void *a0) { - D_80189A74[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80189A7C[])(void); - -void func_8016D428(void *a0) { - D_80189A7C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_80189AE4[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_80189AE4[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80189A88; -extern u8 D_80189A94; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80189A88, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80189A94); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80189B18[])(void); - -void func_8016DEA4(void *a0) { - D_80189B18[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80189B20[])(void); - -void func_8016DF20(void *a0) { - D_80189B20[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80189B74[])(void); - -void func_8016E5B8(void *a0) { - D_80189B74[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_80189B34[4]; - extern s32 D_80189B54; - extern s32 D_80189B5C; - extern s32 D_80189B64; - extern s32 D_80189B6C; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_80189B34[0], pp, &tmp); - RotTransSV(&D_80189B34[1], &prim.v[1], &tmp); - RotTransSV(&D_80189B34[2], &prim.v[2], &tmp); - RotTransSV(&D_80189B34[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80189B54; - prim.f1 = D_80189B5C; - prim.f2 = D_80189B64; - prim.f3 = D_80189B6C; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80189BB4[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80189BB4[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80189BA8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80189BA8[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80189B98[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80189B98[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80189BA8[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80189BA8[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80189BA8[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80189BC4; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80189BC4; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80189C3C[])(void); - -void func_8016F6E0(void *a0) { - D_80189C3C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80189C44[])(void); - -void func_8016F798(void *a0) { - D_80189C44[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80189C4C[])(void); - -void func_8016F834(void *a0) { - D_80189C4C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80189C54[])(void); - -void func_8016F8E4(void *a0) { - D_80189C54[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80189C5C[])(void); - -void func_8016F9C4(void *a0) { - D_80189C5C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80189C64[])(void); - -void func_8016FA84(void *a0) { - D_80189C64[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80189C70[])(void); - -void func_8016FB7C(void *a0) { - D_80189C70[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80189C7C[])(void); - -void func_8016FC90(void *a0) { - D_80189C7C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80189C88[])(void); - -void func_8016FDB4(void *a0) { - D_80189C88[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80189C98[])(void); - -void func_8016FF30(void *a0) { - D_80189C98[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80189CA8[])(void); - -void func_8016FFDC(void *a0) { - D_80189CA8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_80189CB0[])(void); - -void func_80170150(void *a0) { - D_80189CB0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80189CB8[])(void); - -void func_80170240(void *a0) { - D_80189CB8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_80189CC0[])(void); - -void func_801702FC(void *a0) { - D_80189CC0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80189CC8[])(void); - -void func_801703E0(void *a0) { - D_80189CC8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_80189CD0[])(void); - -void func_801704B0(void *a0) { - D_80189CD0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80189CD8[])(void); - -void func_80170548(void *a0) { - D_80189CD8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_80189CE0[])(void); - -void func_801705F8(void *a0) { - D_80189CE0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80189CE8[])(void); - -void func_801706AC(void *a0) { - D_80189CE8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80189CF0[])(void); - -void func_80170748(void *a0) { - D_80189CF0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80189CF8[])(void); - -void func_80170810(void *a0) { - D_80189CF8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80189D00[])(void); - -void func_80170AD8(void *a0) { - D_80189D00[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80189D08[])(void); - -void func_80170BD8(void *a0) { - D_80189D08[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80189D10[])(void); - -void func_80170C74(void *a0) { - D_80189D10[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80189D18[])(void); - -void func_80170D68(void *a0) { - D_80189D18[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80189D20[])(void); - -void func_80170E34(void *a0) { - D_80189D20[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80189D28[])(void); - -void func_80170EFC(void *a0) { - D_80189D28[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80189D30[])(void); - -void func_80170FB0(void *a0) { - D_80189D30[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80189D38[])(void); - -void func_80171064(void *a0) { - D_80189D38[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80189D40[])(void); - -void func_80171120(void *a0) { - D_80189D40[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80189D48[])(void); - -void func_801711C0(void *a0) { - D_80189D48[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80189D50[])(void); - -void func_80171260(void *a0) { - D_80189D50[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80189D58[])(void); - -void func_801714E4(void *a0) { - D_80189D58[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8015AE2C", func_80172C50); - - -extern void (*D_80189D9C[])(void); - -void func_80172CA0(void *a0) { - D_80189D9C[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80189D60; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80189D60); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC07_002/ov_SC07_002_jr_8016AB6C.c b/src/ov_SC07_002/ov_SC07_002_jr_8016AB6C.c new file mode 100644 index 000000000..210974b1b --- /dev/null +++ b/src/ov_SC07_002/ov_SC07_002_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80188D20; +extern u8 D_80188C90; +extern u8 D_80188C6C; +extern u8 D_80188C48; +extern u8 D_80188CFC; +extern u8 D_80188CD8; +extern u8 D_80188CB4; +extern u8 D_80188C24; +extern void func_80145934(void); +extern u8 D_80188DB0; +extern u8 D_80188D8C; +extern u8 D_80188D68; +extern u8 D_80188D44; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801881A8[]; +extern unsigned char D_801881D8[]; +extern unsigned char D_80188228[]; +extern unsigned char D_80188258[]; +extern unsigned char D_80188288[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801882D8[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801883A0[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80188428[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80188430; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8019A548; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019A54C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80188460; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80188508[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018852C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018851C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80188540[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018854C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018855C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80188574[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80188564; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80188588[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801885A4[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80188594; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801885B8[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801885CC[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801885E0; +extern void (*D_80188608[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801885E8; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80188654[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80188658[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80188ABC[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80188ACC[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_8019A580; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80188AF4[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80188AD4; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80188AE4; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80188B34[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80188B3C[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80188B08; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80188B48[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80188B18; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_8019A588; +extern s32 D_8019A594; +extern s32 D_8019A598; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80188B84[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80188B58[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_8019A590; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80188DD4[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80188BF4[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80188E78[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80188FCC[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80188DE8; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80188FD4[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80188DF8; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80188E18; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80188FDC[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80189004[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80189010[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80188E84[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_801890B4; +extern void func_8015D380(s32 a0); +extern unsigned char D_80188198[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_801890C8[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80189104[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_8018914C; +extern u16 D_8018914E; +extern u16 D_80189150; +extern s32 D_80189154; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_8018915C; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80188E68; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_801891E0[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80189290[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_801892C0[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80189324; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_8019A5A0[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80189348[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_8019A5F8[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80189390[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80189380; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_80199D08[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80189398[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_801893EC[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_801893B4; +extern s16 D_801893E8; +extern s16 D_801893E6; +extern s16 D_801893E4; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_801893F8[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_8019A658; +extern u8 D_8019A659; +extern u8 D_8019A65A; +extern u8 D_8019A65B; +extern u8 D_8019A65C; +extern u8 D_8019A65D; +extern u8 D_8019A65E; +extern u8 D_8019A65F; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_80189408[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_8019A698; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_8018944C[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_801894C8[]; +extern s32 D_801894E8[]; +extern u8 D_80189564[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80189584[]; +extern u8 D_801895A4[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80189640[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_801896BC[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_80199D18; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_801896C8[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_801896D0[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80189798[])(void); +extern void func_80166618(void *a0); +extern void (*D_801897A8[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_801897B8[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_801897C4[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80189724[]; +extern u8 D_80189738[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_801897DC[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_801897E4[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_801897EC[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_801897F4[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_801897FC[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80189804[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_8018980C[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_801898C0[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_801898C8[])(void); +extern void func_80169F00(void *a0); +extern char D_80189878[]; +extern char D_80189838[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80189900[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_8018990C[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80189954[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80189914[]; + extern u8 D_80189924[]; + extern u8 D_8019A968[]; + extern u8 D_8019A990[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80189914, D_8019A968) + 3; + func_8001CE28(obj, D_8019A968); + } else { + var_s3 = func_80024054(D_80189924, D_8019A990) + 9; + func_8001CE28(obj, D_8019A990); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_801899D0[])(void); + +void func_8016B4BC(void *a0) { + D_801899D0[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_8019A9B8; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_8019A9B8); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_801899C4[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_801899C4; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80189A08[]; +extern unsigned short D_80189A10[]; +extern unsigned short D_80189A18[]; +extern unsigned char D_8019A9C0[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_8019A9C0 + param_2 * 0x40); + puVar3 = D_80189A08[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80189A10[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80189A18[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_8019A9B8; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_8019A9B8, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80189A20[])(void); + +void func_8016BBA4(void *a0) { + D_80189A20[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_8019AAF4; + extern u8 D_8019AAF5; + extern u8 D_8019AAF6; + extern M2C_UNK D_8019AAF8; + extern u8 D_8019AAF9; + extern u8 D_8019AAFA; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_8019AAF4) = 0x20; + D_8019AAF5 = 0x20; + D_8019AAF6 = 0; + (*(u8 *)&D_8019AAF8) = 0xc0; + D_8019AAF9 = 0xc0; + D_8019AAFA = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_8019AAF4; +extern M2C_UNK D_8019AAF8; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_8019AAF4, &D_8019AAF8, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_8019AAF5; + extern u8 D_8019AAF6; + extern u8 D_8019AAF9; + extern u8 D_8019AAFA; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_8019AAF4); + if (*p1 != 0) *p1 -= 4; + if (D_8019AAF5 != 0) D_8019AAF5 -= 4; + if (D_8019AAF6 != 0) D_8019AAF6 -= 4; + p2 = &(*(u8 *)&D_8019AAF8); + if (*p2 != 0) *p2 -= 4; + if (D_8019AAF9 != 0) D_8019AAF9 -= 4; + if (D_8019AAFA != 0) D_8019AAFA -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_8019AAF4), &(*(int *)&D_8019AAF8), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_8019AA80; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_8019AA80); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80189A30; + extern s32 D_80189A38; + extern s32 D_80189A40; + extern s32 D_80189A48; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80189A30, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80189A38, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80189A40, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80189A48, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80189A50[])(void); + +void func_8016C14C(void *a0) { + D_80189A50[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_8019AAFC[]; +extern u8 D_8019AB04[]; +extern u8 D_8019AAB4[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_8019AAFC, D_8019AB04, D_8019AAB4); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_8019AB10[]; + extern u8 D_8019ABD0; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_8019AB10[1] = 0xff; + D_8019AB10[2] = 0x10; + D_8019AB10[0] = 0x10; + D_8019AB10[6] = 0; + D_8019AB10[5] = 0; + D_8019AB10[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_8019AB10, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_8019ABD0, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_8019AB10); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8016AB6C", func_8016C998); + + +extern void (*D_80189A58[])(void); + +void func_8016CB84(void *a0) { + D_80189A58[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_8019ABD0[]; + + + Blk_8016CF04_8016CF04 *p = &D_8019ABD0[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80189A74[])(void); + +void func_8016D19C(void *a0) { + D_80189A74[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80189A7C[])(void); + +void func_8016D428(void *a0) { + D_80189A7C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_80189AE4[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_80189AE4[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80189A88; +extern u8 D_80189A94; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80189A88, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80189A94); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80189B18[])(void); + +void func_8016DEA4(void *a0) { + D_80189B18[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80189B20[])(void); + +void func_8016DF20(void *a0) { + D_80189B20[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80189B74[])(void); + +void func_8016E5B8(void *a0) { + D_80189B74[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_80189B34[4]; + extern s32 D_80189B54; + extern s32 D_80189B5C; + extern s32 D_80189B64; + extern s32 D_80189B6C; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_80189B34[0], pp, &tmp); + RotTransSV(&D_80189B34[1], &prim.v[1], &tmp); + RotTransSV(&D_80189B34[2], &prim.v[2], &tmp); + RotTransSV(&D_80189B34[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80189B54; + prim.f1 = D_80189B5C; + prim.f2 = D_80189B64; + prim.f3 = D_80189B6C; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80189BB4[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80189BB4[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80189BA8[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80189BA8[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80189B98[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80189B98[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80189BA8[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80189BA8[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80189BA8[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80189BC4; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80189BC4; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80189C3C[])(void); + +void func_8016F6E0(void *a0) { + D_80189C3C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80189C44[])(void); + +void func_8016F798(void *a0) { + D_80189C44[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80189C4C[])(void); + +void func_8016F834(void *a0) { + D_80189C4C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80189C54[])(void); + +void func_8016F8E4(void *a0) { + D_80189C54[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80189C5C[])(void); + +void func_8016F9C4(void *a0) { + D_80189C5C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80189C64[])(void); + +void func_8016FA84(void *a0) { + D_80189C64[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80189C70[])(void); + +void func_8016FB7C(void *a0) { + D_80189C70[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80189C7C[])(void); + +void func_8016FC90(void *a0) { + D_80189C7C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80189C88[])(void); + +void func_8016FDB4(void *a0) { + D_80189C88[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80189C98[])(void); + +void func_8016FF30(void *a0) { + D_80189C98[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80189CA8[])(void); + +void func_8016FFDC(void *a0) { + D_80189CA8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_80189CB0[])(void); + +void func_80170150(void *a0) { + D_80189CB0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80189CB8[])(void); + +void func_80170240(void *a0) { + D_80189CB8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_80189CC0[])(void); + +void func_801702FC(void *a0) { + D_80189CC0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80189CC8[])(void); + +void func_801703E0(void *a0) { + D_80189CC8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_80189CD0[])(void); + +void func_801704B0(void *a0) { + D_80189CD0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80189CD8[])(void); + +void func_80170548(void *a0) { + D_80189CD8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_80189CE0[])(void); + +void func_801705F8(void *a0) { + D_80189CE0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80189CE8[])(void); + +void func_801706AC(void *a0) { + D_80189CE8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80189CF0[])(void); + +void func_80170748(void *a0) { + D_80189CF0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80189CF8[])(void); + +void func_80170810(void *a0) { + D_80189CF8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80189D00[])(void); + +void func_80170AD8(void *a0) { + D_80189D00[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80189D08[])(void); + +void func_80170BD8(void *a0) { + D_80189D08[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80189D10[])(void); + +void func_80170C74(void *a0) { + D_80189D10[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80189D18[])(void); + +void func_80170D68(void *a0) { + D_80189D18[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80189D20[])(void); + +void func_80170E34(void *a0) { + D_80189D20[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80189D28[])(void); + +void func_80170EFC(void *a0) { + D_80189D28[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80189D30[])(void); + +void func_80170FB0(void *a0) { + D_80189D30[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80189D38[])(void); + +void func_80171064(void *a0) { + D_80189D38[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80189D40[])(void); + +void func_80171120(void *a0) { + D_80189D40[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80189D48[])(void); + +void func_801711C0(void *a0) { + D_80189D48[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80189D50[])(void); + +void func_80171260(void *a0) { + D_80189D50[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80189D58[])(void); + +void func_801714E4(void *a0) { + D_80189D58[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8016AB6C", func_80172C50); + + +extern void (*D_80189D9C[])(void); + +void func_80172CA0(void *a0) { + D_80189D9C[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80189D60; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80189D60); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC07_008/ov_SC07_008_jr_8015AE2C.c b/src/ov_SC07_008/ov_SC07_008_jr_8015AE2C.c index 22e06819e..a5b4f6e67 100644 --- a/src/ov_SC07_008/ov_SC07_008_jr_8015AE2C.c +++ b/src/ov_SC07_008/ov_SC07_008_jr_8015AE2C.c @@ -5162,1784 +5162,3 @@ extern void (*D_8018046C[])(void); void func_8016AB30(void *a0) { D_8018046C[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_801804E8[])(void); - -void func_8016B4BC(void *a0) { - D_801804E8[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801958A0; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801958A0); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_801804DC[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_801804DC; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80180520[]; -extern unsigned short D_80180528[]; -extern unsigned short D_80180530[]; -extern unsigned char D_801958A8[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801958A8 + param_2 * 0x40); - puVar3 = D_80180520[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80180528[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80180530[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801958A0; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801958A0, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80180538[])(void); - -void func_8016BBA4(void *a0) { - D_80180538[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801959DC; - extern u8 D_801959DD; - extern u8 D_801959DE; - extern M2C_UNK D_801959E0; - extern u8 D_801959E1; - extern u8 D_801959E2; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801959DC) = 0x20; - D_801959DD = 0x20; - D_801959DE = 0; - (*(u8 *)&D_801959E0) = 0xc0; - D_801959E1 = 0xc0; - D_801959E2 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801959DC; -extern M2C_UNK D_801959E0; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801959DC, &D_801959E0, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801959DD; - extern u8 D_801959DE; - extern u8 D_801959E1; - extern u8 D_801959E2; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801959DC); - if (*p1 != 0) *p1 -= 4; - if (D_801959DD != 0) D_801959DD -= 4; - if (D_801959DE != 0) D_801959DE -= 4; - p2 = &(*(u8 *)&D_801959E0); - if (*p2 != 0) *p2 -= 4; - if (D_801959E1 != 0) D_801959E1 -= 4; - if (D_801959E2 != 0) D_801959E2 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801959DC), &(*(int *)&D_801959E0), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_80195968; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_80195968); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80180548; - extern s32 D_80180550; - extern s32 D_80180558; - extern s32 D_80180560; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80180548, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80180550, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80180558, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80180560, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_80180568[])(void); - -void func_8016C14C(void *a0) { - D_80180568[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801959E4[]; -extern u8 D_801959EC[]; -extern u8 D_8019599C[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801959E4, D_801959EC, D_8019599C); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801959F8[]; - extern u8 D_80195AB8; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801959F8[1] = 0xff; - D_801959F8[2] = 0x10; - D_801959F8[0] = 0x10; - D_801959F8[6] = 0; - D_801959F8[5] = 0; - D_801959F8[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801959F8, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_80195AB8, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801959F8); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8015AE2C", func_8016C998); - - -extern void (*D_80180570[])(void); - -void func_8016CB84(void *a0) { - D_80180570[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_80195AB8[]; - - - Blk_8016CF04_8016CF04 *p = &D_80195AB8[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_8018058C[])(void); - -void func_8016D19C(void *a0) { - D_8018058C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80180594[])(void); - -void func_8016D428(void *a0) { - D_80180594[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_801805FC[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_801805FC[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_801805A0; -extern u8 D_801805AC; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801805A0, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801805AC); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8015AE2C", func_8016DC20); - - -extern void (*D_80180630[])(void); - -void func_8016DEA4(void *a0) { - D_80180630[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_80180638[])(void); - -void func_8016DF20(void *a0) { - D_80180638[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_8018068C[])(void); - -void func_8016E5B8(void *a0) { - D_8018068C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_8018064C[4]; - extern s32 D_8018066C; - extern s32 D_80180674; - extern s32 D_8018067C; - extern s32 D_80180684; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_8018064C[0], pp, &tmp); - RotTransSV(&D_8018064C[1], &prim.v[1], &tmp); - RotTransSV(&D_8018064C[2], &prim.v[2], &tmp); - RotTransSV(&D_8018064C[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_8018066C; - prim.f1 = D_80180674; - prim.f2 = D_8018067C; - prim.f3 = D_80180684; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_801806CC[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_801806CC[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_801806C0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_801806C0[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_801806B0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_801806B0[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801806C0[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_801806C0[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_801806C0[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_801806DC; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_801806DC; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_80180754[])(void); - -void func_8016F6E0(void *a0) { - D_80180754[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_8018075C[])(void); - -void func_8016F798(void *a0) { - D_8018075C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80180764[])(void); - -void func_8016F834(void *a0) { - D_80180764[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_8018076C[])(void); - -void func_8016F8E4(void *a0) { - D_8018076C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80180774[])(void); - -void func_8016F9C4(void *a0) { - D_80180774[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_8018077C[])(void); - -void func_8016FA84(void *a0) { - D_8018077C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_80180788[])(void); - -void func_8016FB7C(void *a0) { - D_80180788[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80180794[])(void); - -void func_8016FC90(void *a0) { - D_80180794[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_801807A0[])(void); - -void func_8016FDB4(void *a0) { - D_801807A0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_801807B0[])(void); - -void func_8016FF30(void *a0) { - D_801807B0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_801807C0[])(void); - -void func_8016FFDC(void *a0) { - D_801807C0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_801807C8[])(void); - -void func_80170150(void *a0) { - D_801807C8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_801807D0[])(void); - -void func_80170240(void *a0) { - D_801807D0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_801807D8[])(void); - -void func_801702FC(void *a0) { - D_801807D8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_801807E0[])(void); - -void func_801703E0(void *a0) { - D_801807E0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_801807E8[])(void); - -void func_801704B0(void *a0) { - D_801807E8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_801807F0[])(void); - -void func_80170548(void *a0) { - D_801807F0[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_801807F8[])(void); - -void func_801705F8(void *a0) { - D_801807F8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_80180800[])(void); - -void func_801706AC(void *a0) { - D_80180800[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_80180808[])(void); - -void func_80170748(void *a0) { - D_80180808[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_80180810[])(void); - -void func_80170810(void *a0) { - D_80180810[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_80180818[])(void); - -void func_80170AD8(void *a0) { - D_80180818[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_80180820[])(void); - -void func_80170BD8(void *a0) { - D_80180820[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_80180828[])(void); - -void func_80170C74(void *a0) { - D_80180828[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8015AE2C", func_80170CF0); - - -extern void (*D_80180830[])(void); - -void func_80170D68(void *a0) { - D_80180830[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_80180838[])(void); - -void func_80170E34(void *a0) { - D_80180838[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_80180840[])(void); - -void func_80170EFC(void *a0) { - D_80180840[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_80180848[])(void); - -void func_80170FB0(void *a0) { - D_80180848[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_80180850[])(void); - -void func_80171064(void *a0) { - D_80180850[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_80180858[])(void); - -void func_80171120(void *a0) { - D_80180858[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80180860[])(void); - -void func_801711C0(void *a0) { - D_80180860[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_80180868[])(void); - -void func_80171260(void *a0) { - D_80180868[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80180870[])(void); - -void func_801714E4(void *a0) { - D_80180870[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8015AE2C", func_80172C50); - - -extern void (*D_801808B4[])(void); - -void func_80172CA0(void *a0) { - D_801808B4[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_80180878; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_80180878); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC07_008/ov_SC07_008_jr_8016AB6C.c b/src/ov_SC07_008/ov_SC07_008_jr_8016AB6C.c new file mode 100644 index 000000000..02247cb79 --- /dev/null +++ b/src/ov_SC07_008/ov_SC07_008_jr_8016AB6C.c @@ -0,0 +1,3926 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8017F838; +extern u8 D_8017F7A8; +extern u8 D_8017F784; +extern u8 D_8017F760; +extern u8 D_8017F814; +extern u8 D_8017F7F0; +extern u8 D_8017F7CC; +extern u8 D_8017F73C; +extern void func_80145934(void); +extern u8 D_8017F8C8; +extern u8 D_8017F8A4; +extern u8 D_8017F880; +extern u8 D_8017F85C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8017ECC0[]; +extern unsigned char D_8017ECF0[]; +extern unsigned char D_8017ED40[]; +extern unsigned char D_8017ED70[]; +extern unsigned char D_8017EDA0[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8017EDF0[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8017EEB8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8017EF40[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8017EF48; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_80195430; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_80195434; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8017EF78; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8017F020[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8017F044[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8017F034; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8017F058[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8017F064[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8017F074[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8017F08C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8017F07C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8017F0A0[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8017F0BC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8017F0AC; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8017F0D0[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8017F0E4[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8017F0F8; +extern void (*D_8017F120[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8017F100; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8017F16C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8017F170[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8017F5D4[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8017F5E4[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_80195468; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8017F60C[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8017F5EC; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8017F5FC; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8017F64C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8017F654[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8017F620; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8017F660[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8017F630; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_80195470; +extern s32 D_8019547C; +extern s32 D_80195480; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8017F69C[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8017F670[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_80195478; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8017F8EC[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8017F70C[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8017F990[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8017FAE4[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8017F900; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8017FAEC[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8017F910; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8017F930; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_8017FAF4[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_8017FB1C[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_8017FB28[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_8017F99C[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_8017FBCC; +extern void func_8015D380(s32 a0); +extern unsigned char D_8017ECB0[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_8017FBE0[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_8017FC1C[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_8017FC64; +extern u16 D_8017FC66; +extern u16 D_8017FC68; +extern s32 D_8017FC6C; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_8017FC74; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_8017F980; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_8017FCF8[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_8017FDA8[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_8017FDD8[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_8017FE3C; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_80195488[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_8017FE60[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801954E0[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_8017FEA8[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_8017FE98; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_80194D58[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_8017FEB0[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_8017FF04[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_8017FECC; +extern s16 D_8017FF00; +extern s16 D_8017FEFE; +extern s16 D_8017FEFC; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_8017FF10[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_80195540; +extern u8 D_80195541; +extern u8 D_80195542; +extern u8 D_80195543; +extern u8 D_80195544; +extern u8 D_80195545; +extern u8 D_80195546; +extern u8 D_80195547; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_8017FF20[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_80195580; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_8017FF64[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_8017FFE0[]; +extern u8 D_8018007C[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_8018009C[]; +extern u8 D_801800BC[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80180158[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_801801D4[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_80194D68; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_801801E0[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_801801E8[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_801802B0[])(void); +extern void func_80166618(void *a0); +extern void (*D_801802C0[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_801802D0[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_801802DC[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_8018023C[]; +extern u8 D_80180250[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_801802F4[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_801802FC[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80180304[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_8018030C[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80180314[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_8018031C[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80180324[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_801803D8[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_801803E0[])(void); +extern void func_80169F00(void *a0); +extern char D_80180390[]; +extern char D_80180350[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80180418[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80180424[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_8018046C[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_8018042C[]; + extern u8 D_8018043C[]; + extern u8 D_80195850[]; + extern u8 D_80195878[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_8018042C, D_80195850) + 3; + func_8001CE28(obj, D_80195850); + } else { + var_s3 = func_80024054(D_8018043C, D_80195878) + 9; + func_8001CE28(obj, D_80195878); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_801804E8[])(void); + +void func_8016B4BC(void *a0) { + D_801804E8[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801958A0; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801958A0); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_801804DC[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_801804DC; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80180520[]; +extern unsigned short D_80180528[]; +extern unsigned short D_80180530[]; +extern unsigned char D_801958A8[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801958A8 + param_2 * 0x40); + puVar3 = D_80180520[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80180528[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80180530[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801958A0; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801958A0, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80180538[])(void); + +void func_8016BBA4(void *a0) { + D_80180538[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801959DC; + extern u8 D_801959DD; + extern u8 D_801959DE; + extern M2C_UNK D_801959E0; + extern u8 D_801959E1; + extern u8 D_801959E2; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801959DC) = 0x20; + D_801959DD = 0x20; + D_801959DE = 0; + (*(u8 *)&D_801959E0) = 0xc0; + D_801959E1 = 0xc0; + D_801959E2 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801959DC; +extern M2C_UNK D_801959E0; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801959DC, &D_801959E0, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801959DD; + extern u8 D_801959DE; + extern u8 D_801959E1; + extern u8 D_801959E2; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801959DC); + if (*p1 != 0) *p1 -= 4; + if (D_801959DD != 0) D_801959DD -= 4; + if (D_801959DE != 0) D_801959DE -= 4; + p2 = &(*(u8 *)&D_801959E0); + if (*p2 != 0) *p2 -= 4; + if (D_801959E1 != 0) D_801959E1 -= 4; + if (D_801959E2 != 0) D_801959E2 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801959DC), &(*(int *)&D_801959E0), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_80195968; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_80195968); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80180548; + extern s32 D_80180550; + extern s32 D_80180558; + extern s32 D_80180560; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80180548, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80180550, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80180558, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80180560, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_80180568[])(void); + +void func_8016C14C(void *a0) { + D_80180568[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801959E4[]; +extern u8 D_801959EC[]; +extern u8 D_8019599C[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801959E4, D_801959EC, D_8019599C); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801959F8[]; + extern u8 D_80195AB8; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801959F8[1] = 0xff; + D_801959F8[2] = 0x10; + D_801959F8[0] = 0x10; + D_801959F8[6] = 0; + D_801959F8[5] = 0; + D_801959F8[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801959F8, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_80195AB8, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801959F8); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8016AB6C", func_8016C998); + + +extern void (*D_80180570[])(void); + +void func_8016CB84(void *a0) { + D_80180570[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_80195AB8[]; + + + Blk_8016CF04_8016CF04 *p = &D_80195AB8[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_8018058C[])(void); + +void func_8016D19C(void *a0) { + D_8018058C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80180594[])(void); + +void func_8016D428(void *a0) { + D_80180594[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_801805FC[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_801805FC[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_801805A0; +extern u8 D_801805AC; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_801805A0, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_801805AC); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8016AB6C", func_8016DC20); + + +extern void (*D_80180630[])(void); + +void func_8016DEA4(void *a0) { + D_80180630[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_80180638[])(void); + +void func_8016DF20(void *a0) { + D_80180638[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_8018068C[])(void); + +void func_8016E5B8(void *a0) { + D_8018068C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_8018064C[4]; + extern s32 D_8018066C; + extern s32 D_80180674; + extern s32 D_8018067C; + extern s32 D_80180684; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_8018064C[0], pp, &tmp); + RotTransSV(&D_8018064C[1], &prim.v[1], &tmp); + RotTransSV(&D_8018064C[2], &prim.v[2], &tmp); + RotTransSV(&D_8018064C[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_8018066C; + prim.f1 = D_80180674; + prim.f2 = D_8018067C; + prim.f3 = D_80180684; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_801806CC[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_801806CC[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_801806C0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_801806C0[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_801806B0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_801806B0[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801806C0[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_801806C0[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_801806C0[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_801806DC; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_801806DC; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_80180754[])(void); + +void func_8016F6E0(void *a0) { + D_80180754[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_8018075C[])(void); + +void func_8016F798(void *a0) { + D_8018075C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80180764[])(void); + +void func_8016F834(void *a0) { + D_80180764[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_8018076C[])(void); + +void func_8016F8E4(void *a0) { + D_8018076C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80180774[])(void); + +void func_8016F9C4(void *a0) { + D_80180774[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_8018077C[])(void); + +void func_8016FA84(void *a0) { + D_8018077C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_80180788[])(void); + +void func_8016FB7C(void *a0) { + D_80180788[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80180794[])(void); + +void func_8016FC90(void *a0) { + D_80180794[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_801807A0[])(void); + +void func_8016FDB4(void *a0) { + D_801807A0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_801807B0[])(void); + +void func_8016FF30(void *a0) { + D_801807B0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_801807C0[])(void); + +void func_8016FFDC(void *a0) { + D_801807C0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_801807C8[])(void); + +void func_80170150(void *a0) { + D_801807C8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_801807D0[])(void); + +void func_80170240(void *a0) { + D_801807D0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_801807D8[])(void); + +void func_801702FC(void *a0) { + D_801807D8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_801807E0[])(void); + +void func_801703E0(void *a0) { + D_801807E0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_801807E8[])(void); + +void func_801704B0(void *a0) { + D_801807E8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_801807F0[])(void); + +void func_80170548(void *a0) { + D_801807F0[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_801807F8[])(void); + +void func_801705F8(void *a0) { + D_801807F8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_80180800[])(void); + +void func_801706AC(void *a0) { + D_80180800[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_80180808[])(void); + +void func_80170748(void *a0) { + D_80180808[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_80180810[])(void); + +void func_80170810(void *a0) { + D_80180810[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_80180818[])(void); + +void func_80170AD8(void *a0) { + D_80180818[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_80180820[])(void); + +void func_80170BD8(void *a0) { + D_80180820[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_80180828[])(void); + +void func_80170C74(void *a0) { + D_80180828[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8016AB6C", func_80170CF0); + + +extern void (*D_80180830[])(void); + +void func_80170D68(void *a0) { + D_80180830[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_80180838[])(void); + +void func_80170E34(void *a0) { + D_80180838[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_80180840[])(void); + +void func_80170EFC(void *a0) { + D_80180840[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_80180848[])(void); + +void func_80170FB0(void *a0) { + D_80180848[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_80180850[])(void); + +void func_80171064(void *a0) { + D_80180850[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_80180858[])(void); + +void func_80171120(void *a0) { + D_80180858[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80180860[])(void); + +void func_801711C0(void *a0) { + D_80180860[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_80180868[])(void); + +void func_80171260(void *a0) { + D_80180868[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80180870[])(void); + +void func_801714E4(void *a0) { + D_80180870[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8016AB6C", func_80172C50); + + +extern void (*D_801808B4[])(void); + +void func_80172CA0(void *a0) { + D_801808B4[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_80180878; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_80180878); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ + diff --git a/src/ov_SC07_009/ov_SC07_009_jr_8015AE2C.c b/src/ov_SC07_009/ov_SC07_009_jr_8015AE2C.c index f4ba5dcf6..3c1080359 100644 --- a/src/ov_SC07_009/ov_SC07_009_jr_8015AE2C.c +++ b/src/ov_SC07_009/ov_SC07_009_jr_8015AE2C.c @@ -5169,1784 +5169,3 @@ extern void (*D_80180F10[])(void); void func_8016AB30(void *a0) { D_80180F10[*(u16 *)((s32)a0 + 0x2)](); } - - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8015AE2C", func_8016AB6C); - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8015AE2C", func_8016AE5C); - -DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ - -DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8015AE2C", func_8016B234); - -DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ - -DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ - -DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ - - -extern void (*D_80180F8C[])(void); - -void func_8016B4BC(void *a0) { - D_80180F8C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: struct -// @stuck: none — MATCH - -extern void func_80015978(s32 a0, s32 *a1); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B984(void *a0); -extern void func_8016B91C(int); -extern int D_801A2F30; - -void func_8016B4F8(int param_1) -{ - int iVar1; - int uVar2; - volatile int buf[2]; - - ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801A2F30); - if (func_8016B9F8(param_1) == 0) { - *(int *)(param_1 + 0x18) = 0; - *(int *)(param_1 + 0x14) = 0; - *(int *)(param_1 + 0x10) = 0; - iVar1 = func_8016B834(param_1, 0); - *(int *)(param_1 + 0x10) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 1); - *(int *)(param_1 + 0x14) = iVar1; - if (iVar1 != 0) { - iVar1 = func_8016B834(param_1, 2); - *(int *)(param_1 + 0x18) = iVar1; - if (iVar1 != 0) goto success; - } - } - } - ((void (*)(int))func_8016B984)(param_1); - return; -success: - func_8016B91C(param_1); - uVar2 = *(int *)(param_1 + 0x2c); - if (uVar2 == 0) { - uVar2 = 0xf0; - } else { - uVar2 = 0x2d0; - } - *(int *)(param_1 + 0x1c) = uVar2; - uVar2 = *(unsigned short *)(param_1 + 2); - uVar2 = uVar2 + 1; - *(unsigned short *)(param_1 + 2) = uVar2; -} - - - -// @class: schedule -// @stuck: none — MATCH - - -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B984(void *a0); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); - -extern s16 D_80180F80[]; - -void func_8016B5C0(s32 param_1) { - s32 iVar4; - s32 iVar2; - s32 iVar5; - s16 sVar1; - s16 *psVar5; - s32 i; - - iVar4 = *(s32 *)(param_1 + 0x18); - if (((s32 (*)(void))func_8016B9F8)() != 0) { - goto L984; - } - sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; - *(s16 *)(iVar4 + 0x1a) = sVar1; - *(s16 *)(iVar4 + 0x18) = sVar1; - if (*(s32 *)(param_1 + 0x2c) == 0) { - iVar2 = *(s32 *)(param_1 + 0x1c); - } else { - iVar2 = *(s32 *)(param_1 + 0x1c) / 3; - } - iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; - *(s32 *)(param_1 + 0x1c) = iVar5; - if (iVar5 >= 0) { - goto LOOP; - } -L984: - ((void (*)(s32))func_8016B984)(param_1); - return; -LOOP: - i = 0; - psVar5 = D_80180F80; - do { - func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); - psVar5 = psVar5 + 1; - i = i + 1; - } while (i < 6); - func_8016B91C(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8015AE2C", func_8016B6BC); - - -// @class: schedule -// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) -extern void func_801465C0(void); -extern void func_8001CD9C(int, void *); -extern void func_800233CC(void *, unsigned short); - -extern int *D_80180FC4[]; -extern unsigned short D_80180FCC[]; -extern unsigned short D_80180FD4[]; -extern unsigned char D_801A2F38[]; - -int func_8016B834(int param_1, int param_2) { - int *puVar3; - int *puVar2; - int iVar1; - - puVar2 = (int *)(D_801A2F38 + param_2 * 0x40); - puVar3 = D_80180FC4[*(int *)(param_1 + 0x2c)]; - iVar1 = ((int (*)(void))func_801465C0)(); - if (iVar1 != 0) { - func_8001CD9C(iVar1, puVar2); - func_800233CC(puVar2, D_80180FCC[param_2]); - puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); - puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); - *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; - *(short *)(iVar1 + 0x1e) = D_80180FD4[param_2]; - } - return iVar1; -} - - -DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ - -DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ - -DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) - - -extern s32 D_801A2F30; -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -s32 func_8016B9F8(s32 param_1) -{ - s32 buf[2]; - u32 v; - - v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801A2F30, buf); - ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); - return (v & 0xffffefff) != 0; -} - - -DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8015AE2C", func_8016BA68); - -DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ - - -extern void (*D_80180FDC[])(void); - -void func_8016BBA4(void *a0) { - D_80180FDC[*(u16 *)((s32)a0 + 0x2)](); -} - - -// @class: plumbing -// @stuck: none — MATCH (56 ins, match_one relocation-masked) - - - - -s32 func_8016BBE0(s32 param_1) { - extern void func_8016BF34(void *a0); - extern void func_8016BF50(s32); - extern void func_8001CF00(s32); - extern M2C_UNK D_801A306C; - extern u8 D_801A306D; - extern u8 D_801A306E; - extern M2C_UNK D_801A3070; - extern u8 D_801A3071; - extern u8 D_801A3072; - - int iVar1; - int temp; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - *(int *)(((int)param_1) + 0x20) = iVar1; - if (iVar1 != 0) { - ((void (*)(s32))func_8016BF34)(((int)param_1)); - func_8016BF50(((int)param_1)); - func_8001CF00(iVar1); - *(s16 *)(iVar1 + 0x10) = 0; - temp = *(int *)(((int)param_1) + 0x2c); - *(s16 *)(iVar1 + 0x14) = 0; - *(s16 *)(iVar1 + 0x1a) = 0; - *(s16 *)(iVar1 + 0x18) = 0; - *(s16 *)(iVar1 + 0x12) = temp * 0x555; - *(s16 *)(((int)param_1) + 0x10) = 0; - *(s16 *)(((int)param_1) + 0x14) = 0; - (*(u8 *)&D_801A306C) = 0x20; - D_801A306D = 0x20; - D_801A306E = 0; - (*(u8 *)&D_801A3070) = 0xc0; - D_801A3071 = 0xc0; - D_801A3072 = 0; - *(u16 *)(((int)param_1) + 2) += 1; - } else { - ((void (*)(s32))func_80146C3C)(((int)param_1)); - } -} - - - -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801A306C; -extern M2C_UNK D_801A3070; - -void func_8016BCC0(void *arg0) { - u16 temp_a2; - u16 temp_v0; - void *temp_s0; - - temp_s0 = M2C_FIELD(arg0, void **, 0x20); - func_8016BF50(); - temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; - M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; - temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; - M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; - M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); - func_8016BFA8(arg0, &D_801A306C, &D_801A3070, temp_s0 + 0x18); - if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { - M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; - M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; - func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); - M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); - } -} - - -// @class: struct -// @stuck: none — MATCH (74 ins, relocation-masked) - - - - -s32 func_8016BD78(s32 param_1) -{ - extern void func_8016BF50(void); - extern u8 D_801A306D; - extern u8 D_801A306E; - extern u8 D_801A3071; - extern u8 D_801A3072; - - s32 iVar2; - u16 uVar1; - u8 *p1; - u8 *p2; - - iVar2 = *(s32 *)(param_1 + 0x20); - func_8016BF50(); - - p1 = &(*(u8 *)&D_801A306C); - if (*p1 != 0) *p1 -= 4; - if (D_801A306D != 0) D_801A306D -= 4; - if (D_801A306E != 0) D_801A306E -= 4; - p2 = &(*(u8 *)&D_801A3070); - if (*p2 != 0) *p2 -= 4; - if (D_801A3071 != 0) D_801A3071 -= 4; - if (D_801A3072 != 0) D_801A3072 -= 4; - - uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; - *(u16 *)(iVar2 + 0x18) = uVar1; - if ((s32)((unsigned int)uVar1 << 0x10) < 0) { - *(u16 *)(iVar2 + 0x18) = 0; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } - *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; - - ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); -} - - - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016BEA0(s32 param_1) -{ - extern void func_8016BF50(void); - - int iVar2; - unsigned short uVar1; - - iVar2 = *(int *)(((int)param_1) + 0x20); - func_8016BF50(); - uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; - *(unsigned short *)(((int)param_1) + 0x10) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; - *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; - ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801A306C), &(*(int *)&D_801A3070), iVar2 + 0x18); - if (*(short *)(iVar2 + 0x1a) < 0) { - ((void (*)(int))func_80146C3C)(((int)param_1)); - } -} - - - -DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8015AE2C", func_8016BF50); - - -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801A2FF8; - -void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { - func_8016BFD0(a0, a1, a2, a3, &D_801A2FF8); -} - - -// @class: struct -// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` -// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to -// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) -// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. - -typedef struct { char b[4]; } W_8016BFD0; -typedef struct { s16 x, y, z; } Vec3_8016BFD0; -typedef struct { - s16 m[9]; /* 0x00 */ - s16 pad; /* 0x12 */ - s32 t[3]; /* 0x14, 0x18, 0x1c */ - s32 rest[8]; /* 0x20..0x3f */ -} Mtx_8016BFD0; - - - -void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { - extern void func_80017714(); - extern s32 D_80180FEC; - extern s32 D_80180FF4; - extern s32 D_80180FFC; - extern s32 D_80181004; - - Mtx_8016BFD0 buf; - Vec3_8016BFD0 v1; - Vec3_8016BFD0 v2; - s32 iVar5 = *(s32 *)(a0 + 0x20); - - *(u32 *)((s32)a4 + 0x30) = 0x50000000; - *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; - *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; - *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; - - v1.x = *(u16 *)(a0 + 6); - v1.y = *(u16 *)(a0 + 0xa); - v1.z = *(u16 *)(a0 + 0xe); - ((void(*)())func_8012EFB8)(&v1, &v1); - ((void(*)())func_80013F3C)(&buf); - ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); - - v2.x = *(u16 *)(a3 + 0); - v2.y = *(u16 *)(a3 + 2); - v2.z = *(u16 *)(a3 + 4); - ((void(*)())func_80020F34)(&buf, &v2); - - buf.t[0] = v1.x; - buf.t[1] = v1.y; - buf.t[2] = v1.z; - ((void(*)())func_8012F14C)(&buf, &D_80180FEC, (s32)a4); - ((void(*)())func_8012F14C)(&buf, &D_80180FF4, (s32)a4 + 8); - ((void(*)())func_8012F14C)(&buf, &D_80180FFC, (s32)a4 + 0x10); - ((void(*)())func_8012F14C)(&buf, &D_80181004, (s32)a4 + 0x18); - - *(s16 *)((s32)a4 + 4) = 0; - *(s16 *)((s32)a4 + 0xc) = 0; - *(s16 *)((s32)a4 + 0x14) = 0; - *(s16 *)((s32)a4 + 0x1c) = 0; - func_80017714(a4); -} - - - - -extern void (*D_8018100C[])(void); - -void func_8016C14C(void *a0) { - D_8018100C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8015AE2C", func_8016C188); - - -// @class: schedule -// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) - - -extern void func_80149350(s32 arg0); -extern void func_80015954(s32 a0, s32 a1); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); - -extern u8 D_801A3074[]; -extern u8 D_801A307C[]; -extern u8 D_801A302C[]; - -void func_8016C2C4(s32 param) -{ - register s32 s1 __asm__("$17"); - register s32 s0 __asm__("$16"); - u16 buf[3]; - s16 v; - s32 r; - s32 arg; - - s1 = param; - s0 = *(s32 *)(s1 + 0x20); - arg = *(s32 *)(s1 + 0x34); - buf[0] = *(u16 *)(s1 + 0x12); - buf[1] = *(u16 *)(s1 + 0x16); - buf[2] = *(u16 *)(s1 + 0x1a); - ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); - ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); - v = *(s16 *)(s1 + 0x10) + 0x10; - *(s16 *)(s1 + 0x10) = v; - v = *(s16 *)(s0 + 0x1a) + v; - *(s16 *)(s0 + 0x1a) = v; - *(s16 *)(s0 + 0x18) = v; - r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801A3074, D_801A307C, D_801A302C); - if (r == 0) { - ((void (*)(s32))func_80146C3C)(s1); - } -} - - -DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (172/172, relocation-masked) - - - -s32 func_8016C49C(s32 param_1_arg) { - extern s32 VectorNormalSS(void *, void *); - extern void func_8001CD9C(s32, void *); - extern void func_8016CF04(s32, s32); - extern u8 D_801A3088[]; - extern u8 D_801A3148; - - register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); - int iVar5; - int iVar6; - u16 sv[4]; - s32 mat[8]; - short sVar1; - - iVar5 = *(int *)(param_1 + 0x18); - iVar6 = *(int *)(param_1 + 0x1a); - param_1[0x14] = *(u16 *)(iVar5 + 0x36); - if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { - short iVar4 = 0; - u16 *psVar3 = (u16 *)&D_8011D030; - do { - if (psVar3 != param_1 && *psVar3 == 0x30) { - ((void(*)(void *))func_80146C3C)(psVar3); - } - iVar4 = iVar4 + 1; - psVar3 = psVar3 + 0x2c; - } while (iVar4 < 0x1e); - D_801A3088[1] = 0xff; - D_801A3088[2] = 0x10; - D_801A3088[0] = 0x10; - D_801A3088[6] = 0; - D_801A3088[5] = 0; - D_801A3088[4] = 0; - ((void(*)(void *, s32))func_800233CC)(D_801A3088, 10); - sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); - { - int t = *(u16 *)(iVar6 + 0xa) + 0x28; - sv[1] = *(u16 *)(iVar5 + 0xa) - t; - } - sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); - VectorNormalSS(sv, sv); - param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); - param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); - param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); - ((void(*)(void *))func_800D23D0)(sv); - sv[0] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); - ((void(*)(void *, s32))func_80016714)(&D_801A3148, 0x620); - ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); - sVar1 = 5; - } else { - int iVar5b = ((s32(*)())func_801465C0)(); - u32 uVar2; - if (iVar5b == 0) { - return; - } - func_8001CD9C(iVar5b, D_801A3088); - *(u32 *)(iVar5b + 4) |= 0x50000000; - uVar2 = ((int(*)())rand)(); - sv[0] = (uVar2 & 0x7f) * 8 - 0x80; - sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; - sv[2] = 0; - ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); - ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); - sv[1] = 0; - sv[0] = 0; - sv[2] = 0xb; - ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); - param_1[9] = sv[0]; - param_1[0xb] = sv[1]; - param_1[0xd] = sv[2]; - *(int *)(param_1 + 0x10) = iVar5b; - *(int *)(param_1 + 0xe) = 8; - func_8016CF04((s32)param_1, 0); - *(int *)(param_1 + 0x16) = 0; - sVar1 = param_1[1] + 1; - } - param_1[1] = sVar1; -} - - - -DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ - -DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8015AE2C", func_8016C998); - - -extern void (*D_80181014[])(void); - -void func_8016CB84(void *a0) { - D_80181014[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8015AE2C", func_8016CBC0); - -/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other - * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare - * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the - * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, - * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for - * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ -typedef struct { - u8 f0, f1, f2, f3; - struct { s16 a, b, c, d, e, g; } ent[16]; -} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ - -short func_8016CF04(s32 param_1, s32 param_2) { - extern Blk_8016CF04_8016CF04 D_801A3148[]; - - - Blk_8016CF04_8016CF04 *p = &D_801A3148[*(short *)(((int)param_1) + 0x2a)]; - u16 rot[4]; - u16 out[4]; - s32 mtx[8]; - - switch (((short)param_2)) { - case 0: - p->f2 = 0; - p->f1 = 0; - p->f3 = 0xf0; - break; - case 1: - p->f1 = p->f1 + 1; - if ((u8)p->f1 >= 0x10) - p->f1 = 0; - if ((u8)p->f2 < 0xf) - p->f2 = p->f2 + 1; - break; - case 2: { - u8 c = p->f2 - 1; - p->f2 = c; - if (c == 0) { - p->f0 = 0; - return 1; - } - p->f3 = p->f3 - 0xf; - return 0; - } - } - - rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; - rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; - rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; - func_800D23D0(rot); - RotMatrixYXZ(rot, mtx); - rot[0] = 9; - rot[1] = 0; - rot[2] = 0; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; - rot[0] = -rot[0]; - rot[1] = -rot[1]; - ApplyMatrixSV(mtx, rot, out); - p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; - p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; - p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; - return 0; -} - - - - -extern void (*D_80181030[])(void); - -void func_8016D19C(void *a0) { - D_80181030[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8015AE2C", func_8016D1D8); - - -extern void (*D_80181038[])(void); - -void func_8016D428(void *a0) { - D_80181038[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ - -DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ - -DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ - -DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8015AE2C", func_8016D688); - -DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ - -DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ - -DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ - -DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8016DBD8(u8 *a0); -extern void (*D_801810A0[])(int); - -void func_8016DA30(int param_1) -{ - ((void (*)(void))func_8016DBD8)(); - D_801810A0[*(unsigned short *)(param_1 + 2)](param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); - -extern u8 D_80181044; -extern u8 D_80181050; - -void func_8016DA7C(s32 param_1) -{ - s32 iVar1; - - iVar1 = ((s32 (*)(void))func_801465C0)(); - if (iVar1 == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } else { - *(s32 *)(param_1 + 0x20) = iVar1; - ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80181044, 0x250, 0x100); - *(u8 *)(iVar1 + 0x27) = 0x90; - *(u16 *)(iVar1 + 0x18) = 0x3000; - *(u16 *)(iVar1 + 0x1a) = 0x4000; - *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; - func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80181050); - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xfff40000; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } -} - - -DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ - -DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8015AE2C", func_8016DC20); - - -extern void (*D_801810D4[])(void); - -void func_8016DEA4(void *a0) { - D_801810D4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ - - -extern void (*D_801810DC[])(void); - -void func_8016DF20(void *a0) { - D_801810DC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8015AE2C", func_8016DF5C); - -DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ - -DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ - -DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ - -DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ - -DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ - -DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ - - -extern void (*D_80181130[])(void); - -void func_8016E5B8(void *a0) { - D_80181130[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ - -DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ - -DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ - -DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ - -DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ - -// @class: regalloc-order -// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) - -typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ -typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ - -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; - - -void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) -{ - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern void RotTransSV(void *a0, void *a1, void *a2); - extern void func_80016ED4(void *a0); - extern SVECTOR_8016E7C8 D_801810F0[4]; - extern s32 D_80181110; - extern s32 D_80181118; - extern s32 D_80181120; - extern s32 D_80181128; - - Prim_8016E7C8 prim; - MATRIX_8016E7C8 m; - SVECTOR_8016E7C8 tmp; - register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ - - ((void (*)(void *, void *))func_80017DC4)(param_2, &m); - m.t[0] = *(short *)(param_1 + 6); - m.t[1] = *(short *)(param_1 + 10); - m.t[2] = *(short *)(param_1 + 14); - func_8004914C(&m); - func_800491AC(&m); - pp = &prim; - RotTransSV(&D_801810F0[0], pp, &tmp); - RotTransSV(&D_801810F0[1], &prim.v[1], &tmp); - RotTransSV(&D_801810F0[2], &prim.v[2], &tmp); - RotTransSV(&D_801810F0[3], &prim.v[3], &tmp); - prim.v[0].vz = 3; - prim.f5 = 0x50000000; - prim.f0 = D_80181110; - prim.f1 = D_80181118; - prim.f2 = D_80181120; - prim.f3 = D_80181128; - prim.f4 = *param_3; - prim.f6 = 0x27; - func_80016ED4(pp); -} - - - -DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ - -DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ - -// @class: struct -// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) - - -struct Entry_8016E95C { - u8 f0; - u8 f1; - u8 pad[0x1e]; -}; - -typedef void (*Handler)(struct Entry_8016E95C *); - - -s32 func_8016E95C() { - extern Handler D_80181170[]; - - struct Entry_8016E95C *p; - for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { - if (p->f0 != 0) { - D_80181170[p->f1](p); - } - } -} - - - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8015AE2C", func_8016E9EC); - - -// @class: struct -// @stuck: none — MATCH (31/31 ins, match_one verified) - -extern u16 D_80181164[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EAC0(Wave *param_1) -{ - unsigned char bVar1; - - param_1->f4 = param_1->f4 + D_80181164[param_1->f2]; - ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); - bVar1 = param_1->f2 + 1; - param_1->f2 = bVar1; - if (5 < bVar1) { - param_1->f2 = 0x20; - param_1->f1 = param_1->f1 + 1; - } -} - - - -// @class: loose-typing -// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) - -extern u8 D_80181154[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EB3C(s32 p) { - u8 v; - - ((void (*)(s32, s32))func_8016EC0C)(p, D_80181154[*(u8 *)(p + 2) & 3]); - - v = *(u8 *)(p + 2); - *(u8 *)(p + 2) = v + 0xFF; - if (v == 0) { - *(u8 *)(p + 2) = 5; - *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; - } -} - - - -// @class: struct -// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80181164[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. - -extern u16 D_80181164[]; - -extern s32 func_8016EC0C(s32 a0, s32 a1); - -void func_8016EBA8(u8 *param_1) -{ - u8 c; - - *(u16 *)(param_1 + 4) = - *(u16 *)(param_1 + 4) - D_80181164[param_1[2]]; - ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); - c = param_1[2]; - param_1[2] = c + 0xFF; - if (c == 0) { - param_1[0] = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8015AE2C", func_8016EC0C); - -DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ - -DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ - -DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ - -DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ - -DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ - -DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ - -DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ - -DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8015AE2C", func_8016EFC8); - -DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ - -// @class: plumbing -// @stuck: none — MATCH - -s32 func_8016F0AC() -{ - extern void func_8016F0E4(void); - - - ((void (*)(void *))func_8016F0E4)(&D_80126B58); - ((void (*)(void *))func_80165770)(&D_80126B58); -} - - - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8015AE2C", func_8016F0E4); - -DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ - -DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH - -extern s32 D_80181180; -extern s32 D_80126B58; -extern s16 currentLocationId; - -s32 func_8016F1C4(void) { - s32 *p; - s32 cur; - s32 loc; - s32 v; - s32 *base = &D_80126B58; - - p = &D_80181180; - cur = *p; - if (cur != 0) { - loc = currentLocationId; - p = p + 1; - for (;;) { - if (loc == cur) { - return 1; - } - cur = *p; - p = p + 1; - if (cur == 0) { - break; - } - } - } - v = base[0x7E]; - if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { - return 0; - } - return base[0x7E] & 0x80FFFFFF; -} - - -DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ - -DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ - -DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ - -DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ - -DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ - -DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ - -DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ - -DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ - -DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ - -DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ - -DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ - -DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ - -DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ - -DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ - -DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ - -DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ - -DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ - -DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ - -DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ - -DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ - -DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ - -DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ - -DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ - -DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ - -DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ - -DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ - -DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ - - -extern void (*D_801811F8[])(void); - -void func_8016F6E0(void *a0) { - D_801811F8[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ - -DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ - - -extern void (*D_80181200[])(void); - -void func_8016F798(void *a0) { - D_80181200[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ - -DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ - - -extern void (*D_80181208[])(void); - -void func_8016F834(void *a0) { - D_80181208[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ - -DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ - - -extern void (*D_80181210[])(void); - -void func_8016F8E4(void *a0) { - D_80181210[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ - -DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ - - -extern void (*D_80181218[])(void); - -void func_8016F9C4(void *a0) { - D_80181218[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ - -DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ - - -extern void (*D_80181220[])(void); - -void func_8016FA84(void *a0) { - D_80181220[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ - -DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ - -DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ - - -extern void (*D_8018122C[])(void); - -void func_8016FB7C(void *a0) { - D_8018122C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ - -DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ - -DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ - - -extern void (*D_80181238[])(void); - -void func_8016FC90(void *a0) { - D_80181238[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ - -DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ - -DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ - - -extern void (*D_80181244[])(void); - -void func_8016FDB4(void *a0) { - D_80181244[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ - -DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ - -DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ - -DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ - - -extern void (*D_80181254[])(void); - -void func_8016FF30(void *a0) { - D_80181254[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ - -DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ - - -extern void (*D_80181264[])(void); - -void func_8016FFDC(void *a0) { - D_80181264[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ - -DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ - -DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ - -DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ - - -extern void (*D_8018126C[])(void); - -void func_80170150(void *a0) { - D_8018126C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ - -DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ - - -extern void (*D_80181274[])(void); - -void func_80170240(void *a0) { - D_80181274[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ - -DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ - - -extern void (*D_8018127C[])(void); - -void func_801702FC(void *a0) { - D_8018127C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ - -DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ - - -extern void (*D_80181284[])(void); - -void func_801703E0(void *a0) { - D_80181284[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ - -DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ - - -extern void (*D_8018128C[])(void); - -void func_801704B0(void *a0) { - D_8018128C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ - -DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ - - -extern void (*D_80181294[])(void); - -void func_80170548(void *a0) { - D_80181294[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ - -DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ - - -extern void (*D_8018129C[])(void); - -void func_801705F8(void *a0) { - D_8018129C[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ - -DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ - - -extern void (*D_801812A4[])(void); - -void func_801706AC(void *a0) { - D_801812A4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ - -DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ - - -extern void (*D_801812AC[])(void); - -void func_80170748(void *a0) { - D_801812AC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ - -DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ - - -extern void (*D_801812B4[])(void); - -void func_80170810(void *a0) { - D_801812B4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8015AE2C", func_801708B0); - -DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ - -DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ - -DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ - -DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ - -DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ - -DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ - - -extern void (*D_801812BC[])(void); - -void func_80170AD8(void *a0) { - D_801812BC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ - -DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ - -DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ - - -extern void (*D_801812C4[])(void); - -void func_80170BD8(void *a0) { - D_801812C4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ - -DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ - - -extern void (*D_801812CC[])(void); - -void func_80170C74(void *a0) { - D_801812CC[*(u8 *)((s32)a0 + 0x215)](); -} - - -DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8015AE2C", func_80170CF0); - - -extern void (*D_801812D4[])(void); - -void func_80170D68(void *a0) { - D_801812D4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ - -DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ - - -extern void (*D_801812DC[])(void); - -void func_80170E34(void *a0) { - D_801812DC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ - -DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ - - -extern void (*D_801812E4[])(void); - -void func_80170EFC(void *a0) { - D_801812E4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ - -DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ - - -extern void (*D_801812EC[])(void); - -void func_80170FB0(void *a0) { - D_801812EC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ - -DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ - - -extern void (*D_801812F4[])(void); - -void func_80171064(void *a0) { - D_801812F4[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ - -DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ - - -extern void (*D_801812FC[])(void); - -void func_80171120(void *a0) { - D_801812FC[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ - -DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ - - -extern void (*D_80181304[])(void); - -void func_801711C0(void *a0) { - D_80181304[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ - -DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ - - -extern void (*D_8018130C[])(void); - -void func_80171260(void *a0) { - D_8018130C[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8015AE2C", func_8017129C); - -DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ - - -extern void (*D_80181314[])(void); - -void func_801714E4(void *a0) { - D_80181314[*(u8 *)((s32)a0 + 0x216)](); -} - - -DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ - -DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ - -DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ - -DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ - -DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ - -DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ - -DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ - -DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8015AE2C", func_801718AC); - -DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ - -DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ - -DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ - -DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ - -DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8015AE2C", func_801719A4); - -DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ - -DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ - -DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ - -DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ - -DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ - -DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ - -DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ - -DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ - -DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ - -DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ - -DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ - -DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8015AE2C", func_80171B4C); - -DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ - -DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ - -DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ - -DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ - -DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ - -DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8015AE2C", func_80171FFC); - -DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ - -DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ - -DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ - -DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ - -DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ - -DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ - -DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ - -DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ - -DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ - -DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ - -DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ - -DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ - -DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ - -DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ - -DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ - -DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ - -DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ - -DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ - -DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ - -DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ - -DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ - -DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ - -DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ - -DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ - -DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ - -DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ - -DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ - -DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ - -DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ - -DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ - -DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ - -DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ - -DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ - -DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ - -DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ - -DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ - -DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ - -DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8015AE2C", func_801727D0); - -DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ - -DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ - -DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ - -DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8015AE2C", func_801728E4); - -DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ - -DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ - -DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ - -DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8015AE2C", func_801729F0); - -DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ - -DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ - -DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ - -DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ - -DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8015AE2C", func_80172B44); - -DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ - -DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ - -DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8015AE2C", func_80172C50); - - -extern void (*D_80181358[])(void); - -void func_80172CA0(void *a0) { - D_80181358[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ - -DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ - -DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ - -DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8015AE2C", func_80172DAC); - -DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ - -DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ - -DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ - -DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ - -DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ - -DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ - -DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ - -DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ - -DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ - -DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ - -DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8015AE2C", func_80173078); - -DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ - -DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ - -DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ - -DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8015AE2C", func_8017319C); - -DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ - - -extern void func_80019064(void *a0); -extern void func_80147324(s32 a0); -extern void func_80171A1C(u8 *a0); -extern s32 func_80174650(s32); -extern M2C_UNK D_8018131C; - -void func_80173220(void * arg0) -{ - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { - func_80147324(0x516); - func_80019064(&D_8018131C); - } - if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { - func_80171A1C(arg0); - func_80174650(arg0); - } -} - - -DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ - -DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ - -DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ - -DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ - -DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ - -DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ - -DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ - -DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ - -DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8015AE2C", func_801733FC); - -DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ diff --git a/src/ov_SC07_009/ov_SC07_009_jr_8016AB6C.c b/src/ov_SC07_009/ov_SC07_009_jr_8016AB6C.c new file mode 100644 index 000000000..8d66b650e --- /dev/null +++ b/src/ov_SC07_009/ov_SC07_009_jr_8016AB6C.c @@ -0,0 +1,3927 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +struct Sub_8015CD20 { + u8 pad0[0x12]; + u16 unk12; /* +0x12 */ +}; +struct Ent_8015CD20 { + u16 unk0; /* +0x00 */ + u8 pad2[0x1E]; + struct Sub_8015CD20 *unk20; /* +0x20 */ + u8 pad24[0x94]; + s16 unkB8; /* +0xB8 */ + u8 pad1BA[0x102]; + s8 unk1BC; /* +0x1BC */ + u8 pad1BD[0x77]; + s32 unk234; /* +0x234 */ +}; +typedef struct { + u16 f0; + u8 pad0[0x4e]; + int f50; + u8 pad1[0x14]; +} Ent_80164930_80164930; +typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_80165140; +typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_80165140; +typedef struct { B8_80165140 a; B4_80165140 b; s32 used; } Slot_80165140; +typedef struct { u16 h[6]; } Rec_80166690_80166690; /* 12-byte sub-table record (stride 0xC) */ +typedef struct { + short v0, v1, v2, pad06, w0, w1, w2, pad0E; /* 0x00..0x0F */ + short v3, v4, v5, pad16, w3, w4, w5, pad1E; /* 0x10..0x1F */ + u8 c00, c01, c02, pad23; /* 0x20 */ + u8 c10, c11, c12, pad27; /* 0x24 */ + u8 c20, c21, c22, pad2B; /* 0x28 */ + u8 c30, c31, c32, pad2F; /* 0x2C */ + int tag; /* 0x30 -> struct size 0x34; tag lands at sp+0x40 */ +} Frame_80166690_80166690; +typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */ +struct Src_80167540 { + u8 pad0[0x34]; + Mat_80167540 mat; /* 0x34 */ +}; +struct Sub2_80167540 { + u8 pad0[0x44]; + s32 unk44; /* 0x44 */ +}; +struct Node_80167540 { + /* 0x0 */ u16 unk0; + u8 pad2[0x4]; + /* 0x6 */ s16 unk6; + u8 pad8[0x2]; + /* 0xA */ s16 unkA; + u8 padC[0x2]; + /* 0xE */ s16 unkE; + u8 pad10[0x10]; + /* 0x20 */ struct Src_80167540 *unk20; + u8 pad24[0x28]; + /* 0x4C */ struct Sub2_80167540 *unk4C; +}; +struct Entity_80167540 { + /* 0x0 */ s16 unk0; + /* 0x2 */ u16 unk2; + u8 pad4[0xC]; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + u8 pad14[0x8]; + /* 0x1C */ s32 unk1C; + u8 pad20[0x10]; + /* 0x30 */ s32 unk30; + /* 0x34 */ struct Node_80167540 *unk34; + /* 0x38 */ Mat_80167540 mat; +}; +typedef struct { s16 x, y, z, pad; } SVEC_80167AE0; +struct Fr_80167AE0 { + u8 matrix[0x20]; /* 0x00 -> sp+0x10 */ + SVEC_80167AE0 v[4]; /* 0x20 -> sp+0x30 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x40 -> sp+0x50 */ + u32 code; /* 0x50 -> sp+0x60 */ +}; +typedef struct { + u16 f00, f02, f04, f06; + s16 f08; + u16 f0a, f0c, f0e, f10, f12, f14, f16; + u8 f18, f19, f1a, f1b, f1c, f1d, f1e, f1f, f20, f21, f22, f23; + u32 f24; +} Thing_80168828_80168828; +typedef struct { s16 x, y, z, pad; } SVEC_8016A290; +struct Fr_8016A290 { + SVEC_8016A290 center; /* 0x00 -> sp+0x10 */ + SVEC_8016A290 diff; /* 0x08 -> sp+0x18 */ + s32 pos[3]; /* 0x10 -> sp+0x20 */ + s32 _pad1c; /* 0x1C -> sp+0x2C */ + s16 mtx[32]; /* 0x20 -> sp+0x30 */ + SVEC_8016A290 v[4]; /* 0x60 -> sp+0x70 */ + struct { u8 r, g, b, pad; } col[4]; /* 0x80 -> sp+0x90 */ + u32 code; /* 0x90 -> sp+0xA0 */ +}; +typedef struct SubB_8016A73C { char pad[0x20]; int unk20; } SubB_8016A73C; +typedef struct SubA_8016A73C { char pad[0x34]; SubB_8016A73C *unk34; } SubA_8016A73C; +typedef struct Mat_8016A73C { int w[8]; } Mat_8016A73C; +typedef struct Obj_8016A73C { + short unk0; + short unk2; + short unk4; + short unk6; + short unk8; + short unkA; + short unkC; + short unkE; + char pad10[0x24]; /* 0x10 .. 0x33 */ + SubA_8016A73C *unk34; /* 0x34 */ + Mat_8016A73C mat; /* 0x38 .. 0x57 */ +} Obj_8016A73C; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801802DC; +extern u8 D_8018024C; +extern u8 D_80180228; +extern u8 D_80180204; +extern u8 D_801802B8; +extern u8 D_80180294; +extern u8 D_80180270; +extern u8 D_801801E0; +extern void func_80145934(void); +extern u8 D_8018036C; +extern u8 D_80180348; +extern u8 D_80180324; +extern u8 D_80180300; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8017F764[]; +extern unsigned char D_8017F794[]; +extern unsigned char D_8017F7E4[]; +extern unsigned char D_8017F814[]; +extern unsigned char D_8017F844[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8017F894[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8017F95C[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8017F9E4[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8017F9EC; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801A2AC0; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801A2AC4; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8017FA1C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8017FAC4[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8017FAE8[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8017FAD8; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8017FAFC[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8017FB08[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8017FB18[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8017FB30[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8017FB20; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8017FB44[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8017FB60[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8017FB50; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8017FB74[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8017FB88[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8017FB9C; +extern void (*D_8017FBC4[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8017FBA4; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8017FC10[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8017FC14[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80180078[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80180088[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801A2AF8; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_801800B0[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80180090; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_801800A0; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801800F0[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801800F8[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_801800C4; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80180104[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_801800D4; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801A2B00; +extern s32 D_801A2B0C; +extern s32 D_801A2B10; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80180140[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80180114[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801A2B08; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80180390[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_801801B0[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80180434[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80180588[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_801803A4; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80180590[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_801803B4; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801803D4; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80180598[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 func_80161A60(s32 a0); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149C08(s32 a0); +extern s32 func_8015B6F4(s32 a0); +extern s32 func_8015B7B4(s32 a0); +extern void func_8015B8F8(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_8015B858(u8 *a0); +extern s32 func_800CF8B4(void); +extern void func_80147A84(s32 a0); +extern s32 func_80172644(u8 *a0); +extern void func_800CCB78(s32 a0); +extern s32 func_80161488(void *a0); +extern void func_8015CC40(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 D_800D4B48; +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(void); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_801805C0[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_801805CC[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80180440[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80180670; +extern void func_8015D380(s32 a0); +extern unsigned char D_8017F754[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80180684[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_801806C0[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80180708; +extern u16 D_8018070A; +extern u16 D_8018070C; +extern s32 D_80180710; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80180718; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80180424; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_8018079C[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_8018084C[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_8018087C[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_801808E0; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801A2B18[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80180904[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801A2B70[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_8018094C[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_8018093C; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801A23E4[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80180954[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_801809A8[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80180970; +extern s16 D_801809A4; +extern s16 D_801809A2; +extern s16 D_801809A0; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_801809B4[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801A2BD0; +extern u8 D_801A2BD1; +extern u8 D_801A2BD2; +extern u8 D_801A2BD3; +extern u8 D_801A2BD4; +extern u8 D_801A2BD5; +extern u8 D_801A2BD6; +extern u8 D_801A2BD7; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_801809C4[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801A2C10; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80180A08[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_80180A84[]; +extern s32 D_80180AA4[]; +extern u8 D_80180B20[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80180B40[]; +extern u8 D_80180B60[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80180BFC[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80180C78[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801A23F4; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_80180C84[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80180C8C[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(void *a0, void *a1); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80180D54[])(void); +extern void func_80166618(void *a0); +extern void (*D_80180D64[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80180D74[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80180D80[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80180CE0[]; +extern u8 D_80180CF4[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80180D98[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80180DA0[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80180DA8[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80180DB0[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80180DB8[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80180DC0[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80180DC8[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80180E7C[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80180E84[])(void); +extern void func_80169F00(void *a0); +extern char D_80180E34[]; +extern char D_80180DF4[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80180EBC[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80180EC8[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern s32 func_80016A5C(); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80180F10[])(void); +extern void func_8016AB30(void *a0); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8016AB6C (ov_SC01_077 jr family, 188 ins, jtbl_801D8BC8) — Phase 26 crack + * PIN-FREE. Status: **MATCH (188 ins)**, jtbl VERIFIED exact. + * + * jtbl_801D8BC8 = 8 entries, bound `sltiu $v0,$v1,8`, default -> after-switch join. + * case 0->+0x88 1->+0xA8 2->+0x110 3->+0x130 4->+0x110 5->+0xA8 6->+0x178 7->+0x178 + * My .rodata relocs (8x R_MIPS_32 vs .text) are byte-identical to that: + * 88 a8 110 130 110 a8 178 178 (objdump -r/-s -j .rodata .run/match/func_8016AB6C/t.o) + * + * ============================================================================ + * LEVER 9 — THE CALL-SINK (the last 2 ins; NEW, generalizable). See cookbook §48-B. + * ============================================================================ + * FINAL RESIDUAL was 2 ins (idx 141/143): both present and byte-correct, only transposed + * around `jal func_8001CE28`: + * mine : addu $a1,$s0,$zero ; jal ; [delay] addu $a0,$s2,$zero + * target: addu $a0,$s2,$zero ; jal ; [delay] addu $a1,$s0,$zero + * + * It was NOT a scheduling residual (sched1 already emitted a0-then-a1, per calls.c:1878 + * which loads arg regs in ASCENDING arg order). It was a REGALLOC residual: + * + * The old shape `f(A,LIT); p = LIT;` created TWO pseudos: a block-local arg pseudo + * (reg145/150, holding the symbol) and a GLOBAL allocno `p` (reg79) fed by a copy at the + * end of each arm. greg dump said: `;; 79 preferences: 5 16`. + * - $5 copy-pref <- the join's arg move (set (reg:SI 5 a1) (reg 79)) + * - $16 copy-pref <- the arms' copies (set (reg 79) (reg145)) ... because + * set_preference (global.c:1535) applies reg_renumber[], so a LOCALLY-allocated + * pseudo counts as its hard reg. + * find_reg's copy-preference override (global.c:~1000) scans hard regs `for (i = 0; i < + * FIRST_PSEUDO_REGISTER; i++)` — plain ASCENDING regno, NOT reg_alloc_order. So $5 beats + * $16, deterministically. The ONLY way $16 wins is if $5 is already in `used` when that + * scan runs, and the only reachable way to do that is + * allocno_calls_crossed[p] > 0 -> find_reg sets used1 = call_used_reg_set (global.c:906) + * -> AND_COMPL(hard_reg_copy_preferences, used) strips $5 -> $16 is all that's left. + * reg79 crossed NO call (def after func_80024054, last use before func_8001CE28), so $5 won. + * p in $a1 => the arms' copies became `move $5,$16`, cross_jump merged them to the top of + * the join (ahead of the a0 move), and reorg then slotted the a0 move. + * + * THE FIX — SINK THE CALL INTO THE ARMS (byte-proven, close=2 -> MATCH): + * BEFORE AFTER + * if (c) { s3 = f(A1,P1)+3; p = P1; } if (c) { s3 = f(A1,P1)+3; g(obj,P1); } + + * else { s3 = f(A2,P2)+9; p = P2; } else { s3 = f(A2,P2)+9; g(obj,P2); } + * g(obj, p); // no join copy, no `p` at all + * Duplicating the call kills the cross-block pseudo `p` entirely. The pointer is now a + * BLOCK-LOCAL pseudo per arm (lreg: "Register 144 used 3 times across 12 insns in block 13; + * crosses 1 call; pointer") -> LOCAL-alloc, crosses a call -> $s0, exactly as before, so the + * load-bearing "$16 occupant" that pushes arg0 off $s0 onto $s1 (lever 3) is PRESERVED. + * greg goes from "9 regs to allocate: ... 79 ..." to "8 regs to allocate:" (79 gone), and + * dispositions are unchanged: arg0=$s1, obj=$s2, var_s3=$s3, var_s0=$s0. + * The duplicated `[addu $a0,$s2][addu $a1,$s0][jal g]` tail is IDENTICAL in both arms after + * reload (same hard regs!), so jump2's cross_jump re-merges it into a single join block — + * ZERO extra bytes — and dbr then fills the jal slot with the nearest insn above it, which + * is now the a1 move. Target shape, exactly. + * + * GENERAL RULE: when a value is defined in both arms of an if/else and consumed only by a + * call in the join, gcc's join-copy makes it a global allocno whose ascending-scan copy-pref + * hands it the ARG register. If the target instead keeps it in a callee-saved reg, DUPLICATE + * THE CALL INTO BOTH ARMS — cross_jump gives the bytes back for free, and the value demotes to + * a call-crossing block-local, which local-alloc parks in $s0. (Inverse of §48-A1: A1 sinks an + * INIT to shorten a live range; this sinks the CONSUMER to delete the allocno outright.) + * + * LEVERS PROVEN HERE (see the report / cookbook): + * 1. LOOP ROTATION (§46 L1, exact trigger): stmt.c:2255 expand_end_loop scans forward from the + * loop start label and stops at the FIRST CODE_LABEL, but sets last_test_insn on any + * unconditional `jump end_label` — which is exactly what `break` emits. So `break` out of + * the first test rotates the loop (peels the test into a preheader). `goto lout;` jumps to a + * USER label, not end_label, so last_test_insn stays 0 and the loop is NOT rotated. + * (`do{}while()` alone does NOT help: expand_exit_loop_if_false ends with a CODE_LABEL, so + * expand_end_loop's "already ends in a bare condjump" guard never fires.) + * Bonus: the unrotated loop is what keeps the s16 re-sign-extension INSIDE the loop + * (sll16/sra16 for the AND, and `sra 20` reusing that same `sll 16` for the >>4). + * 2. `var_v1 = -0x1000;` AFTER the call, not before -> it no longer crosses the call -> $v1 + * instead of a callee-saved reg. + * 3. THE $s0/$s1 DIAL (new): `f(A,B); p = B;` (literal args, then assign p from the SAME + * literal AFTER the call) makes cse rewrite `p = B` as a COPY of the call's arg pseudo. + * That arg pseudo is then live across the call yet stays BLOCK-LOCAL -> local_alloc gives it + * $s0 -> every global allocno live there now conflicts with hard reg $16 -> the big pointer + * (arg0) is pushed off $s0 onto $s1 and the whole allocation flips. Writing `p = B; f(A,p);` + * instead merges them into ONE global allocno, no local, and arg0 takes $s0. (99 -> 54.) + * 4. §46 L2 refinement: a SAME-mode copy always dies (cse canon_reg/qty_first_reg). A + * DIFFERENT-mode copy `(set (reg:QI x) (subreg:QI (reg:SI y)))` is not a plain reg-reg copy, + * so cse cannot merge the qtys and the copy insn SURVIVES. That is how `var_c2 = var_s0;` + * materialises the target's `addu $v0,$s0,$zero`. (187 -> 188 ins.) + * 5. ANTI-DEP PINS A COPY EARLY: sched deterministically SINKS a copy to just before its + * consumers. Reusing the SAME local (var_s0) as the if/else scratch, copying it out, then + * redefining var_s0 creates a WAR dep that pins the copy ahead of the redefinition — which + * also removes the live-range overlap so both share $s0. (54 -> 22.) + * 6. `t = x+1; x = t+1;` is folded by cse to `x = x+2`. `t = x+1; x = t; x++;` keeps + * `addiu t,x,1 ; addiu x,t,1`. (22 -> 21.) + * 7. STORE-SINK: to get "compute chain A first, store A last", put A's store FIRST in the + * source — the backward list scheduler sinks a store (no dependents) but keeps the compute + * order. (21 -> 8.) + * 8. DELAY SLOT = source order: reorg takes the closest eligible insn before the jal, and the + * backward scheduler puts the HIGHEST-LUID (latest in source) of the tied independents + * nearest the call. `var_s0 = 3;` written AFTER the call statement (sched still hoists it + * above the call — pseudos may cross calls at sched1) puts `addiu $s0,$zero,3` in the delay + * slot instead of the a1=0 arg move. (8 -> 2.) + */ +typedef struct Obj_8016AB6C { + s32 unk0; + s32 unk4; + u8 pad8[0xE - 0x8]; + s16 unkE; + u8 pad10[0x24 - 0x10]; + u8 unk24, unk25, unk26, unk27; + u8 pad28[0x2E - 0x28]; + s16 unk2E; + s16 unk30; +} Obj_8016AB6C; + +typedef struct Ent_8016AB6C { + u16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE; + s32 unk10, unk14, unk18, unk1C; + Obj_8016AB6C *unk20; + s16 unk24, unk26, unk28, unk2A; + s32 unk2C; + s32 unk30; +} Ent_8016AB6C; + +typedef struct SVec_8016AB6C { + s16 vx, vy, vz, pad; +} SVec_8016AB6C; + + + +s32 func_8016AB6C(s32 arg0) { + extern s32 func_801783D0(s32 a0, s32 a1); + extern s32 func_80024054(u8 *a0, u8 *a1); + extern void func_8001CE28(Obj_8016AB6C *a0, u8 *a1); + extern u8 D_80180ED0[]; + extern u8 D_80180EE0[]; + extern u8 D_801A2EE0[]; + extern u8 D_801A2F08[]; + + SVec_8016AB6C sp10; + SVec_8016AB6C sp18; + s16 var_s0; + s16 var_v1; + s16 var_s3; + s16 tmp; + s32 temp_v0; + u32 r; + u8 var_c2; + Obj_8016AB6C *obj; + + temp_v0 = func_801783D0(((Ent_8016AB6C *)arg0)->unk30, 0); + var_s0 = 3; + var_v1 = -0x1000; + ((Ent_8016AB6C *)arg0)->unk30 = temp_v0; + do { + if (temp_v0 & var_v1) { + goto lout; + } + var_s0--; + var_v1 >>= 4; + } while (var_s0 >= 0); +lout: + switch (((Ent_8016AB6C *)arg0)->unk2C) { + case 0: + ((Ent_8016AB6C *)arg0)->unk26 = 1; + ((Ent_8016AB6C *)arg0)->unk24 = 0x60; + ((Ent_8016AB6C *)arg0)->unkA -= 0x20; + break; + case 1: + case 5: + ((Ent_8016AB6C *)arg0)->unk14 = 0xFFF60000; + r = ((u32(*)())rand)(); + tmp = var_s0 + 1; + var_s0 = tmp; + ((Ent_8016AB6C *)arg0)->unk10 = (r & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk18 = ((r >> 4) & 0xF) - 8 << 0xF; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unk30 |= 0xA << (tmp * 4); + break; + case 2: + case 4: + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + break; + case 3: + tmp = var_s0 + 1; + var_s0 = tmp; + var_s0++; + ((Ent_8016AB6C *)arg0)->unk26 = 4; + ((Ent_8016AB6C *)arg0)->unk24 = 0x80; + ((Ent_8016AB6C *)arg0)->unkA -= 0x18; + ((Ent_8016AB6C *)arg0)->unk30 = (((Ent_8016AB6C *)arg0)->unk30 | (0xF << (tmp * 4))) * 0x10; + break; + case 6: + case 7: + obj = ((Obj_8016AB6C *(*)(s32))func_801465C0)(temp_v0); + if (obj == 0) { + ((void(*)(Ent_8016AB6C *))func_80146C3C)(((Ent_8016AB6C *)arg0)); + return; + } + sp10.vx = ((Ent_8016AB6C *)arg0)->unk6; + sp10.vy = ((Ent_8016AB6C *)arg0)->unkA - 0x18; + sp10.vz = ((Ent_8016AB6C *)arg0)->unkE; + ((void(*)(SVec_8016AB6C *, SVec_8016AB6C *, s32))func_800D20C0)(&sp10, &sp18, 6); + ((Ent_8016AB6C *)arg0)->unk6 = sp10.vx; + ((Ent_8016AB6C *)arg0)->unkA = sp10.vy; + ((Ent_8016AB6C *)arg0)->unkE = sp10.vz; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + var_s3 = func_80024054(D_80180ED0, D_801A2EE0) + 3; + func_8001CE28(obj, D_801A2EE0); + } else { + var_s3 = func_80024054(D_80180EE0, D_801A2F08) + 9; + func_8001CE28(obj, D_801A2F08); + } + obj->unkE = var_s3; + obj->unk4 |= 0x04000000; + if (((Ent_8016AB6C *)arg0)->unk2C == 6) { + obj->unk27 = 0xB5; + var_s0 = 0x70; + } else { + obj->unk27 = 0xAE; + var_s0 = 0xB0; + } + var_c2 = var_s0; + var_s0 = var_s3 >> 2; + obj->unk2E = -8; + obj->unk30 = 0; + obj->unk26 = var_c2; + obj->unk25 = var_c2; + obj->unk24 = var_c2; + ((Ent_8016AB6C *)arg0)->unk20 = obj; + break; + } + ((Ent_8016AB6C *)arg0)->unk2A = 4 - (var_s0 * 4); + ((Ent_8016AB6C *)arg0)->unk28 = var_s0; + ((Ent_8016AB6C *)arg0)->unk1C = 0xB; + ((Ent_8016AB6C *)arg0)->unk2++; +} + + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8016AB6C", func_8016AE5C); + +DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */ + +DEFINE_func_8016B114() /* dedup: shared engine-core @0x8016B114 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8016AB6C", func_8016B234); + +DEFINE_func_8016B3F4() /* dedup: shared engine-core @0x8016B3F4 (src/shared) */ + +DEFINE_func_8016B428() /* dedup: shared engine-core @0x8016B428 (src/shared) */ + +DEFINE_func_8016B448() /* dedup: shared engine-core @0x8016B448 (src/shared) */ + + +extern void (*D_80180F8C[])(void); + +void func_8016B4BC(void *a0) { + D_80180F8C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: struct +// @stuck: none — MATCH + +extern void func_80015978(s32 a0, s32 *a1); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B984(void *a0); +extern void func_8016B91C(int); +extern int D_801A2F30; + +void func_8016B4F8(int param_1) +{ + int iVar1; + int uVar2; + volatile int buf[2]; + + ((void (*)(int, void *))func_80015978)(param_1 + 4, &D_801A2F30); + if (func_8016B9F8(param_1) == 0) { + *(int *)(param_1 + 0x18) = 0; + *(int *)(param_1 + 0x14) = 0; + *(int *)(param_1 + 0x10) = 0; + iVar1 = func_8016B834(param_1, 0); + *(int *)(param_1 + 0x10) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 1); + *(int *)(param_1 + 0x14) = iVar1; + if (iVar1 != 0) { + iVar1 = func_8016B834(param_1, 2); + *(int *)(param_1 + 0x18) = iVar1; + if (iVar1 != 0) goto success; + } + } + } + ((void (*)(int))func_8016B984)(param_1); + return; +success: + func_8016B91C(param_1); + uVar2 = *(int *)(param_1 + 0x2c); + if (uVar2 == 0) { + uVar2 = 0xf0; + } else { + uVar2 = 0x2d0; + } + *(int *)(param_1 + 0x1c) = uVar2; + uVar2 = *(unsigned short *)(param_1 + 2); + uVar2 = uVar2 + 1; + *(unsigned short *)(param_1 + 2) = uVar2; +} + + + +// @class: schedule +// @stuck: none — MATCH + + +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B984(void *a0); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); + +extern s16 D_80180F80[]; + +void func_8016B5C0(s32 param_1) { + s32 iVar4; + s32 iVar2; + s32 iVar5; + s16 sVar1; + s16 *psVar5; + s32 i; + + iVar4 = *(s32 *)(param_1 + 0x18); + if (((s32 (*)(void))func_8016B9F8)() != 0) { + goto L984; + } + sVar1 = *(s16 *)(iVar4 + 0x1a) + 0x200; + *(s16 *)(iVar4 + 0x1a) = sVar1; + *(s16 *)(iVar4 + 0x18) = sVar1; + if (*(s32 *)(param_1 + 0x2c) == 0) { + iVar2 = *(s32 *)(param_1 + 0x1c); + } else { + iVar2 = *(s32 *)(param_1 + 0x1c) / 3; + } + iVar5 = *(s32 *)(param_1 + 0x1c) + -0x20; + *(s32 *)(param_1 + 0x1c) = iVar5; + if (iVar5 >= 0) { + goto LOOP; + } +L984: + ((void (*)(s32))func_8016B984)(param_1); + return; +LOOP: + i = 0; + psVar5 = D_80180F80; + do { + func_8016B6BC(param_1, iVar2, (s32)*psVar5, (s32)(s16)i); + psVar5 = psVar5 + 1; + i = i + 1; + } while (i < 6); + func_8016B91C(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8016AB6C", func_8016B6BC); + + +// @class: schedule +// @stuck: none — MATCH (statement order: compute puVar2 base before puVar3 table lookup so param*0x40+base schedule into prologue, leaving the 0x2c load-delay nop) +extern void func_801465C0(void); +extern void func_8001CD9C(int, void *); +extern void func_800233CC(void *, unsigned short); + +extern int *D_80180FC4[]; +extern unsigned short D_80180FCC[]; +extern unsigned short D_80180FD4[]; +extern unsigned char D_801A2F38[]; + +int func_8016B834(int param_1, int param_2) { + int *puVar3; + int *puVar2; + int iVar1; + + puVar2 = (int *)(D_801A2F38 + param_2 * 0x40); + puVar3 = D_80180FC4[*(int *)(param_1 + 0x2c)]; + iVar1 = ((int (*)(void))func_801465C0)(); + if (iVar1 != 0) { + func_8001CD9C(iVar1, puVar2); + func_800233CC(puVar2, D_80180FCC[param_2]); + puVar2[0] = *(int *)((int)puVar3 + param_2 * 8); + puVar2[1] = *(int *)((int)puVar3 + param_2 * 8 + 4); + *(unsigned int *)(iVar1 + 4) = *(unsigned int *)(iVar1 + 4) | 0x50040000; + *(short *)(iVar1 + 0x1e) = D_80180FD4[param_2]; + } + return iVar1; +} + + +DEFINE_func_8016B91C() /* dedup: shared engine-core @0x8016B91C (src/shared) */ + +DEFINE_func_8016B964() /* dedup: shared engine-core @0x8016B964 (src/shared) */ + +DEFINE_func_8016B984() /* dedup: shared engine-core @0x8016B984 (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (result is func_8012EFB8's return saved in $s0 across the func_80015954 call; the save-move fills the 2nd call's delay slot. func_80015954's return is discarded.) + + +extern s32 D_801A2F30; +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +s32 func_8016B9F8(s32 param_1) +{ + s32 buf[2]; + u32 v; + + v = ((u32 (*)(s32 *, s32 *))func_8012EFB8)(&D_801A2F30, buf); + ((void (*)(s32 *, s32 *))func_80015954)(buf, (s32 *)(param_1 + 4)); + return (v & 0xffffefff) != 0; +} + + +DEFINE_func_8016BA48() /* dedup: shared engine-core @0x8016BA48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8016AB6C", func_8016BA68); + +DEFINE_func_8016BADC() /* dedup: shared engine-core @0x8016BADC (src/shared) */ + + +extern void (*D_80180FDC[])(void); + +void func_8016BBA4(void *a0) { + D_80180FDC[*(u16 *)((s32)a0 + 0x2)](); +} + + +// @class: plumbing +// @stuck: none — MATCH (56 ins, match_one relocation-masked) + + + + +s32 func_8016BBE0(s32 param_1) { + extern void func_8016BF34(void *a0); + extern void func_8016BF50(s32); + extern void func_8001CF00(s32); + extern M2C_UNK D_801A306C; + extern u8 D_801A306D; + extern u8 D_801A306E; + extern M2C_UNK D_801A3070; + extern u8 D_801A3071; + extern u8 D_801A3072; + + int iVar1; + int temp; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + *(int *)(((int)param_1) + 0x20) = iVar1; + if (iVar1 != 0) { + ((void (*)(s32))func_8016BF34)(((int)param_1)); + func_8016BF50(((int)param_1)); + func_8001CF00(iVar1); + *(s16 *)(iVar1 + 0x10) = 0; + temp = *(int *)(((int)param_1) + 0x2c); + *(s16 *)(iVar1 + 0x14) = 0; + *(s16 *)(iVar1 + 0x1a) = 0; + *(s16 *)(iVar1 + 0x18) = 0; + *(s16 *)(iVar1 + 0x12) = temp * 0x555; + *(s16 *)(((int)param_1) + 0x10) = 0; + *(s16 *)(((int)param_1) + 0x14) = 0; + (*(u8 *)&D_801A306C) = 0x20; + D_801A306D = 0x20; + D_801A306E = 0; + (*(u8 *)&D_801A3070) = 0xc0; + D_801A3071 = 0xc0; + D_801A3072 = 0; + *(u16 *)(((int)param_1) + 2) += 1; + } else { + ((void (*)(s32))func_80146C3C)(((int)param_1)); + } +} + + + +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801A306C; +extern M2C_UNK D_801A3070; + +void func_8016BCC0(void *arg0) { + u16 temp_a2; + u16 temp_v0; + void *temp_s0; + + temp_s0 = M2C_FIELD(arg0, void **, 0x20); + func_8016BF50(); + temp_a2 = M2C_FIELD(arg0, u16 *, 0x10) + 0x60; + M2C_FIELD(arg0, u16 *, 0x10) = temp_a2; + temp_v0 = M2C_FIELD(temp_s0, u16 *, 0x1A) + temp_a2; + M2C_FIELD(temp_s0, u16 *, 0x1A) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x18) = temp_v0; + M2C_FIELD(temp_s0, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_s0, u16 *, 0x12) + 0x71) & 0xFFF); + func_8016BFA8(arg0, &D_801A306C, &D_801A3070, temp_s0 + 0x18); + if ((s16) M2C_FIELD(temp_s0, u16 *, 0x1A) >= 0x1001) { + M2C_FIELD(temp_s0, u16 *, 0x18) = 0x1000U; + M2C_FIELD(temp_s0, u16 *, 0x1A) = 0x1000U; + func_80146E90(arg0, M2C_FIELD(arg0, s32 *, 0x30)); + M2C_FIELD(arg0, u16 *, 2) = (u16) (M2C_FIELD(arg0, u16 *, 2) + 1); + } +} + + +// @class: struct +// @stuck: none — MATCH (74 ins, relocation-masked) + + + + +s32 func_8016BD78(s32 param_1) +{ + extern void func_8016BF50(void); + extern u8 D_801A306D; + extern u8 D_801A306E; + extern u8 D_801A3071; + extern u8 D_801A3072; + + s32 iVar2; + u16 uVar1; + u8 *p1; + u8 *p2; + + iVar2 = *(s32 *)(param_1 + 0x20); + func_8016BF50(); + + p1 = &(*(u8 *)&D_801A306C); + if (*p1 != 0) *p1 -= 4; + if (D_801A306D != 0) D_801A306D -= 4; + if (D_801A306E != 0) D_801A306E -= 4; + p2 = &(*(u8 *)&D_801A3070); + if (*p2 != 0) *p2 -= 4; + if (D_801A3071 != 0) D_801A3071 -= 4; + if (D_801A3072 != 0) D_801A3072 -= 4; + + uVar1 = *(u16 *)(iVar2 + 0x18) - 0x80; + *(u16 *)(iVar2 + 0x18) = uVar1; + if ((s32)((unsigned int)uVar1 << 0x10) < 0) { + *(u16 *)(iVar2 + 0x18) = 0; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } + *(u16 *)(iVar2 + 0x12) = (*(u16 *)(iVar2 + 0x12) + 0x22) & 0xfff; + + ((void (*)(s32, u8 *, u8 *, s32))func_8016BFA8)(param_1, p1, p2, iVar2 + 0x18); +} + + + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016BEA0(s32 param_1) +{ + extern void func_8016BF50(void); + + int iVar2; + unsigned short uVar1; + + iVar2 = *(int *)(((int)param_1) + 0x20); + func_8016BF50(); + uVar1 = *(unsigned short *)(((int)param_1) + 0x10) - 0x18; + *(unsigned short *)(((int)param_1) + 0x10) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = *(unsigned short *)(iVar2 + 0x1a) + uVar1; + *(unsigned short *)(iVar2 + 0x12) = (*(unsigned short *)(iVar2 + 0x12) + 0x22) & 0xfff; + ((void (*)(int, void *, void *, int))func_8016BFA8)(((int)param_1), &(*(int *)&D_801A306C), &(*(int *)&D_801A3070), iVar2 + 0x18); + if (*(short *)(iVar2 + 0x1a) < 0) { + ((void (*)(int))func_80146C3C)(((int)param_1)); + } +} + + + +DEFINE_func_8016BF34() /* dedup: shared engine-core @0x8016BF34 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8016AB6C", func_8016BF50); + + +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801A2FF8; + +void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3) { + func_8016BFD0(a0, a1, a2, a3, &D_801A2FF8); +} + + +// @class: struct +// @stuck: none — MATCH (95 ins). Keys: (1) 4-byte unaligned copies via `struct{char b[4];}` +// assignment -> lwl/lwr/swl/swr with reload; (2) 0x40-byte stack buffer `buf` (Mtx_8016BFD0 padded to +// 0x40, not 0x20) sets the frame to 0x70 and lands v1/v2 at sp+0x50/0x58; (3) func_80017714(a4) +// takes param_5 as an arg -> gcc materializes `addu $a0,$s0,$zero` and stores the 4 zeros via $a0. + +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; + + + +void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4) { + extern void func_80017714(); + extern s32 D_80180FEC; + extern s32 D_80180FF4; + extern s32 D_80180FFC; + extern s32 D_80181004; + + Mtx_8016BFD0 buf; + Vec3_8016BFD0 v1; + Vec3_8016BFD0 v2; + s32 iVar5 = *(s32 *)(a0 + 0x20); + + *(u32 *)((s32)a4 + 0x30) = 0x50000000; + *(W_8016BFD0 *)((s32)a4 + 0x20) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x24) = *(W_8016BFD0 *)a1; + *(W_8016BFD0 *)((s32)a4 + 0x28) = *(W_8016BFD0 *)a2; + *(W_8016BFD0 *)((s32)a4 + 0x2c) = *(W_8016BFD0 *)a2; + + v1.x = *(u16 *)(a0 + 6); + v1.y = *(u16 *)(a0 + 0xa); + v1.z = *(u16 *)(a0 + 0xe); + ((void(*)())func_8012EFB8)(&v1, &v1); + ((void(*)())func_80013F3C)(&buf); + ((void(*)())func_800123F0)(&buf, (s32)*(s16 *)(iVar5 + 0x12)); + + v2.x = *(u16 *)(a3 + 0); + v2.y = *(u16 *)(a3 + 2); + v2.z = *(u16 *)(a3 + 4); + ((void(*)())func_80020F34)(&buf, &v2); + + buf.t[0] = v1.x; + buf.t[1] = v1.y; + buf.t[2] = v1.z; + ((void(*)())func_8012F14C)(&buf, &D_80180FEC, (s32)a4); + ((void(*)())func_8012F14C)(&buf, &D_80180FF4, (s32)a4 + 8); + ((void(*)())func_8012F14C)(&buf, &D_80180FFC, (s32)a4 + 0x10); + ((void(*)())func_8012F14C)(&buf, &D_80181004, (s32)a4 + 0x18); + + *(s16 *)((s32)a4 + 4) = 0; + *(s16 *)((s32)a4 + 0xc) = 0; + *(s16 *)((s32)a4 + 0x14) = 0; + *(s16 *)((s32)a4 + 0x1c) = 0; + func_80017714(a4); +} + + + + +extern void (*D_8018100C[])(void); + +void func_8016C14C(void *a0) { + D_8018100C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8016AB6C", func_8016C188); + + +// @class: schedule +// @stuck: none — MATCH (44 ins; pins $s0/$s1 + hoist call-arg into a temp so its load fills the buf-store delay slot) + + +extern void func_80149350(s32 arg0); +extern void func_80015954(s32 a0, s32 a1); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); + +extern u8 D_801A3074[]; +extern u8 D_801A307C[]; +extern u8 D_801A302C[]; + +void func_8016C2C4(s32 param) +{ + register s32 s1 __asm__("$17"); + register s32 s0 __asm__("$16"); + u16 buf[3]; + s16 v; + s32 r; + s32 arg; + + s1 = param; + s0 = *(s32 *)(s1 + 0x20); + arg = *(s32 *)(s1 + 0x34); + buf[0] = *(u16 *)(s1 + 0x12); + buf[1] = *(u16 *)(s1 + 0x16); + buf[2] = *(u16 *)(s1 + 0x1a); + ((void (*)(s32, void *, void *))func_80149350)(arg, buf, buf); + ((void (*)(void *, s32))func_80015954)(buf, s1 + 4); + v = *(s16 *)(s1 + 0x10) + 0x10; + *(s16 *)(s1 + 0x10) = v; + v = *(s16 *)(s0 + 0x1a) + v; + *(s16 *)(s0 + 0x1a) = v; + *(s16 *)(s0 + 0x18) = v; + r = ((s32 (*)(s32, void *, void *, void *))func_8016C374)(s1, D_801A3074, D_801A307C, D_801A302C); + if (r == 0) { + ((void (*)(s32))func_80146C3C)(s1); + } +} + + +DEFINE_func_8016C374() /* dedup: shared engine-core @0x8016C374 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (172/172, relocation-masked) + + + +s32 func_8016C49C(s32 param_1_arg) { + extern s32 VectorNormalSS(void *, void *); + extern void func_8001CD9C(s32, void *); + extern void func_8016CF04(s32, s32); + extern u8 D_801A3088[]; + extern u8 D_801A3148; + + register u16 *param_1 __asm__("$17") = ((u16 *)param_1_arg); + int iVar5; + int iVar6; + u16 sv[4]; + s32 mat[8]; + short sVar1; + + iVar5 = *(int *)(param_1 + 0x18); + iVar6 = *(int *)(param_1 + 0x1a); + param_1[0x14] = *(u16 *)(iVar5 + 0x36); + if ((*(u32 *)(param_1 + 0x16) & 0x8000) == 0) { + short iVar4 = 0; + u16 *psVar3 = (u16 *)&D_8011D030; + do { + if (psVar3 != param_1 && *psVar3 == 0x30) { + ((void(*)(void *))func_80146C3C)(psVar3); + } + iVar4 = iVar4 + 1; + psVar3 = psVar3 + 0x2c; + } while (iVar4 < 0x1e); + D_801A3088[1] = 0xff; + D_801A3088[2] = 0x10; + D_801A3088[0] = 0x10; + D_801A3088[6] = 0; + D_801A3088[5] = 0; + D_801A3088[4] = 0; + ((void(*)(void *, s32))func_800233CC)(D_801A3088, 10); + sv[0] = *(u16 *)(iVar5 + 6) - *(u16 *)(iVar6 + 6); + { + int t = *(u16 *)(iVar6 + 0xa) + 0x28; + sv[1] = *(u16 *)(iVar5 + 0xa) - t; + } + sv[2] = *(u16 *)(iVar5 + 0xe) - *(u16 *)(iVar6 + 0xe); + VectorNormalSS(sv, sv); + param_1[3] = *(u16 *)(iVar5 + 6) + ((s16)sv[0] >> 9); + param_1[5] = *(u16 *)(iVar5 + 0xa) + (((s16)sv[1] >> 9) - 0x28); + param_1[7] = *(u16 *)(iVar5 + 0xe) + ((s16)sv[2] >> 9); + ((void(*)(void *))func_800D23D0)(sv); + sv[0] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, param_1 + 0x1c); + ((void(*)(void *, s32))func_80016714)(&D_801A3148, 0x620); + ((s32(*)(s32, void *, s32, s32, s32, s32, s32))func_80146A6C)(0x32, param_1, 0, 0, 0, 0, *(int *)(param_1 + 0x18)); + sVar1 = 5; + } else { + int iVar5b = ((s32(*)())func_801465C0)(); + u32 uVar2; + if (iVar5b == 0) { + return; + } + func_8001CD9C(iVar5b, D_801A3088); + *(u32 *)(iVar5b + 4) |= 0x50000000; + uVar2 = ((int(*)())rand)(); + sv[0] = (uVar2 & 0x7f) * 8 - 0x80; + sv[1] = ((uVar2 & 0x7f00) >> 4) - 0x400; + sv[2] = 0; + ((void(*)(void *, void *))RotMatrixYXZ)(sv, mat); + ((void(*)(void *, void *))func_80048EAC)(param_1 + 0x1c, mat); + sv[1] = 0; + sv[0] = 0; + sv[2] = 0xb; + ((void(*)(void *, void *, void *))ApplyMatrixSV)(mat, sv, sv); + param_1[9] = sv[0]; + param_1[0xb] = sv[1]; + param_1[0xd] = sv[2]; + *(int *)(param_1 + 0x10) = iVar5b; + *(int *)(param_1 + 0xe) = 8; + func_8016CF04((s32)param_1, 0); + *(int *)(param_1 + 0x16) = 0; + sVar1 = param_1[1] + 1; + } + param_1[1] = sVar1; +} + + + +DEFINE_func_8016C74C() /* dedup: shared engine-core @0x8016C74C (src/shared) */ + +DEFINE_func_8016C83C() /* dedup: shared engine-core @0x8016C83C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8016AB6C", func_8016C998); + + +extern void (*D_80181014[])(void); + +void func_8016CB84(void *a0) { + D_80181014[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8016AB6C", func_8016CBC0); + +/* func_8016CF04 returns short (case 2: 1 if the decremented f2 hit 0, else 0; all other + * paths return 0 via the addu $v0,$zero,$zero at 0x8016D154). The TU/engine_core.h declare + * it `void` in 4 DEFINE_ macros + one block-scope decl in func_8016C49C; the real apply is the + * byte-neutral engine_core.h void->short flip (every caller discards or ptr-casts the return, + * cf. func_8016D5EC's `(s16)(...)` cast). The //@EDIT lines above are the rtu_match proxy for + * that flip. Body verified 166/166 in isolation AND in a whole-TU compile w/ the reconciled hdr. */ +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ + +short func_8016CF04(s32 param_1, s32 param_2) { + extern Blk_8016CF04_8016CF04 D_801A3148[]; + + + Blk_8016CF04_8016CF04 *p = &D_801A3148[*(short *)(((int)param_1) + 0x2a)]; + u16 rot[4]; + u16 out[4]; + s32 mtx[8]; + + switch (((short)param_2)) { + case 0: + p->f2 = 0; + p->f1 = 0; + p->f3 = 0xf0; + break; + case 1: + p->f1 = p->f1 + 1; + if ((u8)p->f1 >= 0x10) + p->f1 = 0; + if ((u8)p->f2 < 0xf) + p->f2 = p->f2 + 1; + break; + case 2: { + u8 c = p->f2 - 1; + p->f2 = c; + if (c == 0) { + p->f0 = 0; + return 1; + } + p->f3 = p->f3 - 0xf; + return 0; + } + } + + rot[0] = *(s32 *)(((int)param_1) + 0x10) >> 12; + rot[1] = *(s32 *)(((int)param_1) + 0x14) >> 12; + rot[2] = *(s32 *)(((int)param_1) + 0x18) >> 12; + func_800D23D0(rot); + RotMatrixYXZ(rot, mtx); + rot[0] = 9; + rot[1] = 0; + rot[2] = 0; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].a = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].b = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].c = *(u16 *)(((int)param_1) + 0xe) + out[2]; + rot[0] = -rot[0]; + rot[1] = -rot[1]; + ApplyMatrixSV(mtx, rot, out); + p->ent[(u8)p->f1].d = *(u16 *)(((int)param_1) + 6) + out[0]; + p->ent[(u8)p->f1].e = *(u16 *)(((int)param_1) + 0xa) + out[1]; + p->ent[(u8)p->f1].g = *(u16 *)(((int)param_1) + 0xe) + out[2]; + return 0; +} + + + + +extern void (*D_80181030[])(void); + +void func_8016D19C(void *a0) { + D_80181030[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8016AB6C", func_8016D1D8); + + +extern void (*D_80181038[])(void); + +void func_8016D428(void *a0) { + D_80181038[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016D464() /* dedup: shared engine-core @0x8016D464 (src/shared) */ + +DEFINE_func_8016D4DC() /* dedup: shared engine-core @0x8016D4DC (src/shared) */ + +DEFINE_func_8016D5EC() /* dedup: shared engine-core @0x8016D5EC (src/shared) */ + +DEFINE_func_8016D64C() /* dedup: shared engine-core @0x8016D64C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8016AB6C", func_8016D688); + +DEFINE_func_8016D778() /* dedup: shared engine-core @0x8016D778 (src/shared) */ + +DEFINE_func_8016D848() /* dedup: shared engine-core @0x8016D848 (src/shared) */ + +DEFINE_func_8016D984() /* dedup: shared engine-core @0x8016D984 (src/shared) */ + +DEFINE_func_8016DA04() /* dedup: shared engine-core @0x8016DA04 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8016DBD8(u8 *a0); +extern void (*D_801810A0[])(int); + +void func_8016DA30(int param_1) +{ + ((void (*)(void))func_8016DBD8)(); + D_801810A0[*(unsigned short *)(param_1 + 2)](param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, one call-crossing local; bnez polarity = if(iVar1==0) fall-through) + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); + +extern u8 D_80181044; +extern u8 D_80181050; + +void func_8016DA7C(s32 param_1) +{ + s32 iVar1; + + iVar1 = ((s32 (*)(void))func_801465C0)(); + if (iVar1 == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } else { + *(s32 *)(param_1 + 0x20) = iVar1; + ((void (*)(s32, s32, s32, s32))func_8001CC3C)(iVar1, (s32)&D_80181044, 0x250, 0x100); + *(u8 *)(iVar1 + 0x27) = 0x90; + *(u16 *)(iVar1 + 0x18) = 0x3000; + *(u16 *)(iVar1 + 0x1a) = 0x4000; + *(u32 *)(iVar1 + 4) = *(u32 *)(iVar1 + 4) | 0x50000000; + func_80128EA8(iVar1, param_1 + 0x24, (s32)&D_80181050); + *(s32 *)(param_1 + 0x10) = 0; + *(s32 *)(param_1 + 0x14) = 0xfff40000; + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; + } +} + + +DEFINE_func_8016DB34() /* dedup: shared engine-core @0x8016DB34 (src/shared) */ + +DEFINE_func_8016DBD8() /* dedup: shared engine-core @0x8016DBD8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8016AB6C", func_8016DC20); + + +extern void (*D_801810D4[])(void); + +void func_8016DEA4(void *a0) { + D_801810D4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016DEE0() /* dedup: shared engine-core @0x8016DEE0 (src/shared) */ + + +extern void (*D_801810DC[])(void); + +void func_8016DF20(void *a0) { + D_801810DC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8016AB6C", func_8016DF5C); + +DEFINE_func_8016E1CC() /* dedup: shared engine-core @0x8016E1CC (src/shared) */ + +DEFINE_func_8016E26C() /* dedup: shared engine-core @0x8016E26C (src/shared) */ + +DEFINE_func_8016E2E8() /* dedup: shared engine-core @0x8016E2E8 (src/shared) */ + +DEFINE_func_8016E358() /* dedup: shared engine-core @0x8016E358 (src/shared) */ + +DEFINE_func_8016E3CC() /* dedup: shared engine-core @0x8016E3CC (src/shared) */ + +DEFINE_func_8016E460() /* dedup: shared engine-core @0x8016E460 (src/shared) */ + + +extern void (*D_80181130[])(void); + +void func_8016E5B8(void *a0) { + D_80181130[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8016E5F4() /* dedup: shared engine-core @0x8016E5F4 (src/shared) */ + +DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016E688 (src/shared) */ + +DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016E6E4 (src/shared) */ + +DEFINE_func_8016E728() /* dedup: shared engine-core @0x8016E728 (src/shared) */ + +DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016E778 (src/shared) */ + +// @class: regalloc-order +// @stuck: none — MATCH (74 ins); register pin $s2 forces &prim into a saved reg (§17) + +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ + +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; + + +void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3) +{ + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + extern void func_80016ED4(void *a0); + extern SVECTOR_8016E7C8 D_801810F0[4]; + extern s32 D_80181110; + extern s32 D_80181118; + extern s32 D_80181120; + extern s32 D_80181128; + + Prim_8016E7C8 prim; + MATRIX_8016E7C8 m; + SVECTOR_8016E7C8 tmp; + register Prim_8016E7C8 *pp __asm__("$18"); /* $s2 — force &prim into a saved reg */ + + ((void (*)(void *, void *))func_80017DC4)(param_2, &m); + m.t[0] = *(short *)(param_1 + 6); + m.t[1] = *(short *)(param_1 + 10); + m.t[2] = *(short *)(param_1 + 14); + func_8004914C(&m); + func_800491AC(&m); + pp = &prim; + RotTransSV(&D_801810F0[0], pp, &tmp); + RotTransSV(&D_801810F0[1], &prim.v[1], &tmp); + RotTransSV(&D_801810F0[2], &prim.v[2], &tmp); + RotTransSV(&D_801810F0[3], &prim.v[3], &tmp); + prim.v[0].vz = 3; + prim.f5 = 0x50000000; + prim.f0 = D_80181110; + prim.f1 = D_80181118; + prim.f2 = D_80181120; + prim.f3 = D_80181128; + prim.f4 = *param_3; + prim.f6 = 0x27; + func_80016ED4(pp); +} + + + +DEFINE_func_8016E8F0() /* dedup: shared engine-core @0x8016E8F0 (src/shared) */ + +DEFINE_func_8016E918() /* dedup: shared engine-core @0x8016E918 (src/shared) */ + +// @class: struct +// @stuck: none — MATCH (36/36 ins, match_one relocation-masked) + + +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; + +typedef void (*Handler)(struct Entry_8016E95C *); + + +s32 func_8016E95C() { + extern Handler D_80181170[]; + + struct Entry_8016E95C *p; + for (p = ((struct Entry_8016E95C *)&D_80115218); p < &((struct Entry_8016E95C *)&D_80115218)[4]; p++) { + if (p->f0 != 0) { + D_80181170[p->f1](p); + } + } +} + + + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8016AB6C", func_8016E9EC); + + +// @class: struct +// @stuck: none — MATCH (31/31 ins, match_one verified) + +extern u16 D_80181164[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EAC0(Wave *param_1) +{ + unsigned char bVar1; + + param_1->f4 = param_1->f4 + D_80181164[param_1->f2]; + ((void (*)(void *, int))func_8016EC0C)(param_1, 0x80); + bVar1 = param_1->f2 + 1; + param_1->f2 = bVar1; + if (5 < bVar1) { + param_1->f2 = 0x20; + param_1->f1 = param_1->f1 + 1; + } +} + + + +// @class: loose-typing +// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) + +extern u8 D_80181154[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EB3C(s32 p) { + u8 v; + + ((void (*)(s32, s32))func_8016EC0C)(p, D_80181154[*(u8 *)(p + 2) & 3]); + + v = *(u8 *)(p + 2); + *(u8 *)(p + 2) = v + 0xFF; + if (v == 0) { + *(u8 *)(p + 2) = 5; + *(u8 *)(p + 1) = *(u8 *)(p + 1) + 1; + } +} + + + +// @class: struct +// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80181164[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. + +extern u16 D_80181164[]; + +extern s32 func_8016EC0C(s32 a0, s32 a1); + +void func_8016EBA8(u8 *param_1) +{ + u8 c; + + *(u16 *)(param_1 + 4) = + *(u16 *)(param_1 + 4) - D_80181164[param_1[2]]; + ((void (*)(u8 *, int))func_8016EC0C)(param_1, 0x80); + c = param_1[2]; + param_1[2] = c + 0xFF; + if (c == 0) { + param_1[0] = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8016AB6C", func_8016EC0C); + +DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ + +DEFINE_func_8016ED8C() /* dedup: shared engine-core @0x8016ED8C (src/shared) */ + +DEFINE_func_8016EDBC() /* dedup: shared engine-core @0x8016EDBC (src/shared) */ + +DEFINE_func_8016EDEC() /* dedup: shared engine-core @0x8016EDEC (src/shared) */ + +DEFINE_func_8016EE40() /* dedup: shared engine-core @0x8016EE40 (src/shared) */ + +DEFINE_func_8016EE94() /* dedup: shared engine-core @0x8016EE94 (src/shared) */ + +DEFINE_func_8016EF78() /* dedup: shared engine-core @0x8016EF78 (src/shared) */ + +DEFINE_func_8016EFA8() /* dedup: shared engine-core @0x8016EFA8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8016AB6C", func_8016EFC8); + +DEFINE_func_8016F094() /* dedup: shared engine-core @0x8016F094 (src/shared) */ + +// @class: plumbing +// @stuck: none — MATCH + +s32 func_8016F0AC() +{ + extern void func_8016F0E4(void); + + + ((void (*)(void *))func_8016F0E4)(&D_80126B58); + ((void (*)(void *))func_80165770)(&D_80126B58); +} + + + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8016AB6C", func_8016F0E4); + +DEFINE_func_8016F14C() /* dedup: shared engine-core @0x8016F14C (src/shared) */ + +DEFINE_func_8016F1AC() /* dedup: shared engine-core @0x8016F1AC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH + +extern s32 D_80181180; +extern s32 D_80126B58; +extern s16 currentLocationId; + +s32 func_8016F1C4(void) { + s32 *p; + s32 cur; + s32 loc; + s32 v; + s32 *base = &D_80126B58; + + p = &D_80181180; + cur = *p; + if (cur != 0) { + loc = currentLocationId; + p = p + 1; + for (;;) { + if (loc == cur) { + return 1; + } + cur = *p; + p = p + 1; + if (cur == 0) { + break; + } + } + } + v = base[0x7E]; + if (((v & 0x80FFFFFF) != 0) && ((v & 0x10000000) != 0)) { + return 0; + } + return base[0x7E] & 0x80FFFFFF; +} + + +DEFINE_func_8016F250() /* dedup: shared engine-core @0x8016F250 (src/shared) */ + +DEFINE_func_8016F264() /* dedup: shared engine-core @0x8016F264 (src/shared) */ + +DEFINE_func_8016F288() /* dedup: shared engine-core @0x8016F288 (src/shared) */ + +DEFINE_func_8016F2A8() /* dedup: shared engine-core @0x8016F2A8 (src/shared) */ + +DEFINE_func_8016F2C8() /* dedup: shared engine-core @0x8016F2C8 (src/shared) */ + +DEFINE_func_8016F2EC() /* dedup: shared engine-core @0x8016F2EC (src/shared) */ + +DEFINE_func_8016F30C() /* dedup: shared engine-core @0x8016F30C (src/shared) */ + +DEFINE_func_8016F330() /* dedup: shared engine-core @0x8016F330 (src/shared) */ + +DEFINE_func_8016F350() /* dedup: shared engine-core @0x8016F350 (src/shared) */ + +DEFINE_func_8016F374() /* dedup: shared engine-core @0x8016F374 (src/shared) */ + +DEFINE_func_8016F388() /* dedup: shared engine-core @0x8016F388 (src/shared) */ + +DEFINE_func_8016F398() /* dedup: shared engine-core @0x8016F398 (src/shared) */ + +DEFINE_func_8016F410() /* dedup: shared engine-core @0x8016F410 (src/shared) */ + +DEFINE_func_8016F44C() /* dedup: shared engine-core @0x8016F44C (src/shared) */ + +DEFINE_func_8016F470() /* dedup: shared engine-core @0x8016F470 (src/shared) */ + +DEFINE_func_8016F494() /* dedup: shared engine-core @0x8016F494 (src/shared) */ + +DEFINE_func_8016F4C4() /* dedup: shared engine-core @0x8016F4C4 (src/shared) */ + +DEFINE_func_8016F4F4() /* dedup: shared engine-core @0x8016F4F4 (src/shared) */ + +DEFINE_func_8016F4FC() /* dedup: shared engine-core @0x8016F4FC (src/shared) */ + +DEFINE_func_8016F540() /* dedup: shared engine-core @0x8016F540 (src/shared) */ + +DEFINE_func_8016F578() /* dedup: shared engine-core @0x8016F578 (src/shared) */ + +DEFINE_func_8016F5B0() /* dedup: shared engine-core @0x8016F5B0 (src/shared) */ + +DEFINE_func_8016F5E0() /* dedup: shared engine-core @0x8016F5E0 (src/shared) */ + +DEFINE_func_8016F610() /* dedup: shared engine-core @0x8016F610 (src/shared) */ + +DEFINE_func_8016F648() /* dedup: shared engine-core @0x8016F648 (src/shared) */ + +DEFINE_func_8016F680() /* dedup: shared engine-core @0x8016F680 (src/shared) */ + +DEFINE_func_8016F6B0() /* dedup: shared engine-core @0x8016F6B0 (src/shared) */ + + +extern void (*D_801811F8[])(void); + +void func_8016F6E0(void *a0) { + D_801811F8[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F71C() /* dedup: shared engine-core @0x8016F71C (src/shared) */ + +DEFINE_func_8016F764() /* dedup: shared engine-core @0x8016F764 (src/shared) */ + + +extern void (*D_80181200[])(void); + +void func_8016F798(void *a0) { + D_80181200[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F7D4() /* dedup: shared engine-core @0x8016F7D4 (src/shared) */ + +DEFINE_func_8016F804() /* dedup: shared engine-core @0x8016F804 (src/shared) */ + + +extern void (*D_80181208[])(void); + +void func_8016F834(void *a0) { + D_80181208[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F870() /* dedup: shared engine-core @0x8016F870 (src/shared) */ + +DEFINE_func_8016F8AC() /* dedup: shared engine-core @0x8016F8AC (src/shared) */ + + +extern void (*D_80181210[])(void); + +void func_8016F8E4(void *a0) { + D_80181210[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016F920() /* dedup: shared engine-core @0x8016F920 (src/shared) */ + +DEFINE_func_8016F95C() /* dedup: shared engine-core @0x8016F95C (src/shared) */ + + +extern void (*D_80181218[])(void); + +void func_8016F9C4(void *a0) { + D_80181218[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FA00() /* dedup: shared engine-core @0x8016FA00 (src/shared) */ + +DEFINE_func_8016FA44() /* dedup: shared engine-core @0x8016FA44 (src/shared) */ + + +extern void (*D_80181220[])(void); + +void func_8016FA84(void *a0) { + D_80181220[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FAC0() /* dedup: shared engine-core @0x8016FAC0 (src/shared) */ + +DEFINE_func_8016FB10() /* dedup: shared engine-core @0x8016FB10 (src/shared) */ + +DEFINE_func_8016FB50() /* dedup: shared engine-core @0x8016FB50 (src/shared) */ + + +extern void (*D_8018122C[])(void); + +void func_8016FB7C(void *a0) { + D_8018122C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FBB8() /* dedup: shared engine-core @0x8016FBB8 (src/shared) */ + +DEFINE_func_8016FC24() /* dedup: shared engine-core @0x8016FC24 (src/shared) */ + +DEFINE_func_8016FC64() /* dedup: shared engine-core @0x8016FC64 (src/shared) */ + + +extern void (*D_80181238[])(void); + +void func_8016FC90(void *a0) { + D_80181238[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FCCC() /* dedup: shared engine-core @0x8016FCCC (src/shared) */ + +DEFINE_func_8016FD08() /* dedup: shared engine-core @0x8016FD08 (src/shared) */ + +DEFINE_func_8016FD7C() /* dedup: shared engine-core @0x8016FD7C (src/shared) */ + + +extern void (*D_80181244[])(void); + +void func_8016FDB4(void *a0) { + D_80181244[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FDF0() /* dedup: shared engine-core @0x8016FDF0 (src/shared) */ + +DEFINE_func_8016FE2C() /* dedup: shared engine-core @0x8016FE2C (src/shared) */ + +DEFINE_func_8016FE78() /* dedup: shared engine-core @0x8016FE78 (src/shared) */ + +DEFINE_func_8016FED0() /* dedup: shared engine-core @0x8016FED0 (src/shared) */ + + +extern void (*D_80181254[])(void); + +void func_8016FF30(void *a0) { + D_80181254[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8016FF6C() /* dedup: shared engine-core @0x8016FF6C (src/shared) */ + +DEFINE_func_8016FFA8() /* dedup: shared engine-core @0x8016FFA8 (src/shared) */ + + +extern void (*D_80181264[])(void); + +void func_8016FFDC(void *a0) { + D_80181264[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170018() /* dedup: shared engine-core @0x80170018 (src/shared) */ + +DEFINE_func_80170068() /* dedup: shared engine-core @0x80170068 (src/shared) */ + +DEFINE_func_801700B8() /* dedup: shared engine-core @0x801700B8 (src/shared) */ + +DEFINE_func_80170100() /* dedup: shared engine-core @0x80170100 (src/shared) */ + + +extern void (*D_8018126C[])(void); + +void func_80170150(void *a0) { + D_8018126C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017018C() /* dedup: shared engine-core @0x8017018C (src/shared) */ + +DEFINE_func_801701C8() /* dedup: shared engine-core @0x801701C8 (src/shared) */ + + +extern void (*D_80181274[])(void); + +void func_80170240(void *a0) { + D_80181274[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017027C() /* dedup: shared engine-core @0x8017027C (src/shared) */ + +DEFINE_func_801702B8() /* dedup: shared engine-core @0x801702B8 (src/shared) */ + + +extern void (*D_8018127C[])(void); + +void func_801702FC(void *a0) { + D_8018127C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170338() /* dedup: shared engine-core @0x80170338 (src/shared) */ + +DEFINE_func_80170374() /* dedup: shared engine-core @0x80170374 (src/shared) */ + + +extern void (*D_80181284[])(void); + +void func_801703E0(void *a0) { + D_80181284[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017041C() /* dedup: shared engine-core @0x8017041C (src/shared) */ + +DEFINE_func_8017044C() /* dedup: shared engine-core @0x8017044C (src/shared) */ + + +extern void (*D_8018128C[])(void); + +void func_801704B0(void *a0) { + D_8018128C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801704EC() /* dedup: shared engine-core @0x801704EC (src/shared) */ + +DEFINE_func_8017051C() /* dedup: shared engine-core @0x8017051C (src/shared) */ + + +extern void (*D_80181294[])(void); + +void func_80170548(void *a0) { + D_80181294[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170584() /* dedup: shared engine-core @0x80170584 (src/shared) */ + +DEFINE_func_801705C0() /* dedup: shared engine-core @0x801705C0 (src/shared) */ + + +extern void (*D_8018129C[])(void); + +void func_801705F8(void *a0) { + D_8018129C[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170634() /* dedup: shared engine-core @0x80170634 (src/shared) */ + +DEFINE_func_80170670() /* dedup: shared engine-core @0x80170670 (src/shared) */ + + +extern void (*D_801812A4[])(void); + +void func_801706AC(void *a0) { + D_801812A4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801706E8() /* dedup: shared engine-core @0x801706E8 (src/shared) */ + +DEFINE_func_80170718() /* dedup: shared engine-core @0x80170718 (src/shared) */ + + +extern void (*D_801812AC[])(void); + +void func_80170748(void *a0) { + D_801812AC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170784() /* dedup: shared engine-core @0x80170784 (src/shared) */ + +DEFINE_func_801707D4() /* dedup: shared engine-core @0x801707D4 (src/shared) */ + + +extern void (*D_801812B4[])(void); + +void func_80170810(void *a0) { + D_801812B4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017084C() /* dedup: shared engine-core @0x8017084C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8016AB6C", func_801708B0); + +DEFINE_func_80170928() /* dedup: shared engine-core @0x80170928 (src/shared) */ + +DEFINE_func_80170970() /* dedup: shared engine-core @0x80170970 (src/shared) */ + +DEFINE_func_801709B8() /* dedup: shared engine-core @0x801709B8 (src/shared) */ + +DEFINE_func_80170A00() /* dedup: shared engine-core @0x80170A00 (src/shared) */ + +DEFINE_func_80170A48() /* dedup: shared engine-core @0x80170A48 (src/shared) */ + +DEFINE_func_80170A90() /* dedup: shared engine-core @0x80170A90 (src/shared) */ + + +extern void (*D_801812BC[])(void); + +void func_80170AD8(void *a0) { + D_801812BC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170B14() /* dedup: shared engine-core @0x80170B14 (src/shared) */ + +DEFINE_func_80170B48() /* dedup: shared engine-core @0x80170B48 (src/shared) */ + +DEFINE_func_80170B90() /* dedup: shared engine-core @0x80170B90 (src/shared) */ + + +extern void (*D_801812C4[])(void); + +void func_80170BD8(void *a0) { + D_801812C4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170C14() /* dedup: shared engine-core @0x80170C14 (src/shared) */ + +DEFINE_func_80170C44() /* dedup: shared engine-core @0x80170C44 (src/shared) */ + + +extern void (*D_801812CC[])(void); + +void func_80170C74(void *a0) { + D_801812CC[*(u8 *)((s32)a0 + 0x215)](); +} + + +DEFINE_func_80170CB0() /* dedup: shared engine-core @0x80170CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8016AB6C", func_80170CF0); + + +extern void (*D_801812D4[])(void); + +void func_80170D68(void *a0) { + D_801812D4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170DA4() /* dedup: shared engine-core @0x80170DA4 (src/shared) */ + +DEFINE_func_80170DE0() /* dedup: shared engine-core @0x80170DE0 (src/shared) */ + + +extern void (*D_801812DC[])(void); + +void func_80170E34(void *a0) { + D_801812DC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170E70() /* dedup: shared engine-core @0x80170E70 (src/shared) */ + +DEFINE_func_80170EAC() /* dedup: shared engine-core @0x80170EAC (src/shared) */ + + +extern void (*D_801812E4[])(void); + +void func_80170EFC(void *a0) { + D_801812E4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170F38() /* dedup: shared engine-core @0x80170F38 (src/shared) */ + +DEFINE_func_80170F74() /* dedup: shared engine-core @0x80170F74 (src/shared) */ + + +extern void (*D_801812EC[])(void); + +void func_80170FB0(void *a0) { + D_801812EC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80170FEC() /* dedup: shared engine-core @0x80170FEC (src/shared) */ + +DEFINE_func_80171028() /* dedup: shared engine-core @0x80171028 (src/shared) */ + + +extern void (*D_801812F4[])(void); + +void func_80171064(void *a0) { + D_801812F4[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801710A0() /* dedup: shared engine-core @0x801710A0 (src/shared) */ + +DEFINE_func_801710DC() /* dedup: shared engine-core @0x801710DC (src/shared) */ + + +extern void (*D_801812FC[])(void); + +void func_80171120(void *a0) { + D_801812FC[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_8017115C() /* dedup: shared engine-core @0x8017115C (src/shared) */ + +DEFINE_func_8017118C() /* dedup: shared engine-core @0x8017118C (src/shared) */ + + +extern void (*D_80181304[])(void); + +void func_801711C0(void *a0) { + D_80181304[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_801711FC() /* dedup: shared engine-core @0x801711FC (src/shared) */ + +DEFINE_func_80171238() /* dedup: shared engine-core @0x80171238 (src/shared) */ + + +extern void (*D_8018130C[])(void); + +void func_80171260(void *a0) { + D_8018130C[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8016AB6C", func_8017129C); + +DEFINE_func_80171384() /* dedup: shared engine-core @0x80171384 (src/shared) */ + + +extern void (*D_80181314[])(void); + +void func_801714E4(void *a0) { + D_80181314[*(u8 *)((s32)a0 + 0x216)](); +} + + +DEFINE_func_80171520() /* dedup: shared engine-core @0x80171520 (src/shared) */ + +DEFINE_func_8017162C() /* dedup: shared engine-core @0x8017162C (src/shared) */ + +DEFINE_func_801716AC() /* dedup: shared engine-core @0x801716AC (src/shared) */ + +DEFINE_func_801717A0() /* dedup: shared engine-core @0x801717A0 (src/shared) */ + +DEFINE_func_801717F4() /* dedup: shared engine-core @0x801717F4 (src/shared) */ + +DEFINE_func_80171824() /* dedup: shared engine-core @0x80171824 (src/shared) */ + +DEFINE_func_80171854() /* dedup: shared engine-core @0x80171854 (src/shared) */ + +DEFINE_func_80171884() /* dedup: shared engine-core @0x80171884 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8016AB6C", func_801718AC); + +DEFINE_func_80171904() /* dedup: shared engine-core @0x80171904 (src/shared) */ + +DEFINE_func_80171928() /* dedup: shared engine-core @0x80171928 (src/shared) */ + +DEFINE_func_8017196C() /* dedup: shared engine-core @0x8017196C (src/shared) */ + +DEFINE_func_8017197C() /* dedup: shared engine-core @0x8017197C (src/shared) */ + +DEFINE_func_80171990() /* dedup: shared engine-core @0x80171990 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8016AB6C", func_801719A4); + +DEFINE_func_80171A04() /* dedup: shared engine-core @0x80171A04 (src/shared) */ + +DEFINE_func_80171A10() /* dedup: shared engine-core @0x80171A10 (src/shared) */ + +DEFINE_func_80171A1C() /* dedup: shared engine-core @0x80171A1C (src/shared) */ + +DEFINE_func_80171A34() /* dedup: shared engine-core @0x80171A34 (src/shared) */ + +DEFINE_func_80171A44() /* dedup: shared engine-core @0x80171A44 (src/shared) */ + +DEFINE_func_80171A58() /* dedup: shared engine-core @0x80171A58 (src/shared) */ + +DEFINE_func_80171A6C() /* dedup: shared engine-core @0x80171A6C (src/shared) */ + +DEFINE_func_80171A80() /* dedup: shared engine-core @0x80171A80 (src/shared) */ + +DEFINE_func_80171A88() /* dedup: shared engine-core @0x80171A88 (src/shared) */ + +DEFINE_func_80171AB0() /* dedup: shared engine-core @0x80171AB0 (src/shared) */ + +DEFINE_func_80171B10() /* dedup: shared engine-core @0x80171B10 (src/shared) */ + +DEFINE_func_80171B44() /* dedup: shared engine-core @0x80171B44 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8016AB6C", func_80171B4C); + +DEFINE_func_80171C64() /* dedup: shared engine-core @0x80171C64 (src/shared) */ + +DEFINE_func_80171CC4() /* dedup: shared engine-core @0x80171CC4 (src/shared) */ + +DEFINE_func_80171D1C() /* dedup: shared engine-core @0x80171D1C (src/shared) */ + +DEFINE_func_80171D78() /* dedup: shared engine-core @0x80171D78 (src/shared) */ + +DEFINE_func_80171E08() /* dedup: shared engine-core @0x80171E08 (src/shared) */ + +DEFINE_func_80171EC8() /* dedup: shared engine-core @0x80171EC8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8016AB6C", func_80171FFC); + +DEFINE_func_8017209C() /* dedup: shared engine-core @0x8017209C (src/shared) */ + +DEFINE_func_80172170() /* dedup: shared engine-core @0x80172170 (src/shared) */ + +DEFINE_func_801722CC() /* dedup: shared engine-core @0x801722CC (src/shared) */ + +DEFINE_func_80172304() /* dedup: shared engine-core @0x80172304 (src/shared) */ + +DEFINE_func_80172310() /* dedup: shared engine-core @0x80172310 (src/shared) */ + +DEFINE_func_80172358() /* dedup: shared engine-core @0x80172358 (src/shared) */ + +DEFINE_func_801723C4() /* dedup: shared engine-core @0x801723C4 (src/shared) */ + +DEFINE_func_80172414() /* dedup: shared engine-core @0x80172414 (src/shared) */ + +DEFINE_func_8017248C() /* dedup: shared engine-core @0x8017248C (src/shared) */ + +DEFINE_func_801724EC() /* dedup: shared engine-core @0x801724EC (src/shared) */ + +DEFINE_func_8017250C() /* dedup: shared engine-core @0x8017250C (src/shared) */ + +DEFINE_func_80172560() /* dedup: shared engine-core @0x80172560 (src/shared) */ + +DEFINE_func_80172588() /* dedup: shared engine-core @0x80172588 (src/shared) */ + +DEFINE_func_80172590() /* dedup: shared engine-core @0x80172590 (src/shared) */ + +DEFINE_func_801725A4() /* dedup: shared engine-core @0x801725A4 (src/shared) */ + +DEFINE_func_801725B8() /* dedup: shared engine-core @0x801725B8 (src/shared) */ + +DEFINE_func_801725CC() /* dedup: shared engine-core @0x801725CC (src/shared) */ + +DEFINE_func_801725E0() /* dedup: shared engine-core @0x801725E0 (src/shared) */ + +DEFINE_func_801725F4() /* dedup: shared engine-core @0x801725F4 (src/shared) */ + +DEFINE_func_80172608() /* dedup: shared engine-core @0x80172608 (src/shared) */ + +DEFINE_func_8017261C() /* dedup: shared engine-core @0x8017261C (src/shared) */ + +DEFINE_func_80172630() /* dedup: shared engine-core @0x80172630 (src/shared) */ + +DEFINE_func_80172644() /* dedup: shared engine-core @0x80172644 (src/shared) */ + +DEFINE_func_80172658() /* dedup: shared engine-core @0x80172658 (src/shared) */ + +DEFINE_func_80172664() /* dedup: shared engine-core @0x80172664 (src/shared) */ + +DEFINE_func_80172670() /* dedup: shared engine-core @0x80172670 (src/shared) */ + +DEFINE_func_8017267C() /* dedup: shared engine-core @0x8017267C (src/shared) */ + +DEFINE_func_80172688() /* dedup: shared engine-core @0x80172688 (src/shared) */ + +DEFINE_func_80172694() /* dedup: shared engine-core @0x80172694 (src/shared) */ + +DEFINE_func_801726A0() /* dedup: shared engine-core @0x801726A0 (src/shared) */ + +DEFINE_func_801726AC() /* dedup: shared engine-core @0x801726AC (src/shared) */ + +DEFINE_func_801726B8() /* dedup: shared engine-core @0x801726B8 (src/shared) */ + +DEFINE_func_801726C4() /* dedup: shared engine-core @0x801726C4 (src/shared) */ + +DEFINE_func_801726D0() /* dedup: shared engine-core @0x801726D0 (src/shared) */ + +DEFINE_func_80172710() /* dedup: shared engine-core @0x80172710 (src/shared) */ + +DEFINE_func_80172738() /* dedup: shared engine-core @0x80172738 (src/shared) */ + +DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */ + +DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8016AB6C", func_801727D0); + +DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280C (src/shared) */ + +DEFINE_func_80172844() /* dedup: shared engine-core @0x80172844 (src/shared) */ + +DEFINE_func_8017288C() /* dedup: shared engine-core @0x8017288C (src/shared) */ + +DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8016AB6C", func_801728E4); + +DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */ + +DEFINE_func_80172958() /* dedup: shared engine-core @0x80172958 (src/shared) */ + +DEFINE_func_801729A8() /* dedup: shared engine-core @0x801729A8 (src/shared) */ + +DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8016AB6C", func_801729F0); + +DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172A2C (src/shared) */ + +DEFINE_func_80172A8C() /* dedup: shared engine-core @0x80172A8C (src/shared) */ + +DEFINE_func_80172ACC() /* dedup: shared engine-core @0x80172ACC (src/shared) */ + +DEFINE_func_80172B0C() /* dedup: shared engine-core @0x80172B0C (src/shared) */ + +DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172B14 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8016AB6C", func_80172B44); + +DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172B80 (src/shared) */ + +DEFINE_func_80172BC8() /* dedup: shared engine-core @0x80172BC8 (src/shared) */ + +DEFINE_func_80172C48() /* dedup: shared engine-core @0x80172C48 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8016AB6C", func_80172C50); + + +extern void (*D_80181358[])(void); + +void func_80172CA0(void *a0) { + D_80181358[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_80172CDC() /* dedup: shared engine-core @0x80172CDC (src/shared) */ + +DEFINE_func_80172D14() /* dedup: shared engine-core @0x80172D14 (src/shared) */ + +DEFINE_func_80172D60() /* dedup: shared engine-core @0x80172D60 (src/shared) */ + +DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172D68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8016AB6C", func_80172DAC); + +DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172DE8 (src/shared) */ + +DEFINE_func_80172E20() /* dedup: shared engine-core @0x80172E20 (src/shared) */ + +DEFINE_func_80172E8C() /* dedup: shared engine-core @0x80172E8C (src/shared) */ + +DEFINE_func_80172E94() /* dedup: shared engine-core @0x80172E94 (src/shared) */ + +DEFINE_func_80172ED4() /* dedup: shared engine-core @0x80172ED4 (src/shared) */ + +DEFINE_func_80172EFC() /* dedup: shared engine-core @0x80172EFC (src/shared) */ + +DEFINE_func_80172F24() /* dedup: shared engine-core @0x80172F24 (src/shared) */ + +DEFINE_func_80172F4C() /* dedup: shared engine-core @0x80172F4C (src/shared) */ + +DEFINE_func_80172F9C() /* dedup: shared engine-core @0x80172F9C (src/shared) */ + +DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172FEC (src/shared) */ + +DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8016AB6C", func_80173078); + +DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730B4 (src/shared) */ + +DEFINE_func_801730FC() /* dedup: shared engine-core @0x801730FC (src/shared) */ + +DEFINE_func_8017316C() /* dedup: shared engine-core @0x8017316C (src/shared) */ + +DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8016AB6C", func_8017319C); + +DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731D8 (src/shared) */ + + +extern void func_80019064(void *a0); +extern void func_80147324(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); +extern M2C_UNK D_8018131C; + +void func_80173220(void * arg0) +{ + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x4000) { + func_80147324(0x516); + func_80019064(&D_8018131C); + } + if (M2C_FIELD(arg0, u16 *, 0xB8) & 0x8000) { + func_80171A1C(arg0); + func_80174650(arg0); + } +} + + +DEFINE_func_80173294() /* dedup: shared engine-core @0x80173294 (src/shared) */ + +DEFINE_func_8017329C() /* dedup: shared engine-core @0x8017329C (src/shared) */ + +DEFINE_func_801732C4() /* dedup: shared engine-core @0x801732C4 (src/shared) */ + +DEFINE_func_801732F4() /* dedup: shared engine-core @0x801732F4 (src/shared) */ + +DEFINE_func_8017331C() /* dedup: shared engine-core @0x8017331C (src/shared) */ + +DEFINE_func_8017334C() /* dedup: shared engine-core @0x8017334C (src/shared) */ + +DEFINE_func_80173374() /* dedup: shared engine-core @0x80173374 (src/shared) */ + +DEFINE_func_801733A4() /* dedup: shared engine-core @0x801733A4 (src/shared) */ + +DEFINE_func_801733CC() /* dedup: shared engine-core @0x801733CC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8016AB6C", func_801733FC); + +DEFINE_func_80173460() /* dedup: shared engine-core @0x80173460 (src/shared) */ +